Seite 3 von 4
Verfasst: 25.07.2008 15:27
von Kaeru Gaman
kommt drauf an, wie dein koordinatensystem orientiert ist.
ist denn jetzt die Z achse senkrecht oder die Y?
das kann man nämlich unterschiedlich machen und unterscheidet sich von engine zu engine.
also, wenn hier jetzt Z senkrecht ist:
Alpha = CamRotX
Beta = CamRotY
Speed = Beweg
X = (Cos(Alpha)) * Speed * Factor
Y = (Sin(Alpha)) * Speed * Factor
weil Alpha der Drehwinkel in der ebene ist, und x und y in der Ebene liegen.
Factor ist kleiner als 1, um soviel musst du Speed nochmal kleiner machen,
weil du brauchst nicht die länge des ganzen Vertors Speed,
sondern nur die Länge seines "Schattens", also seiner abbildung auf die Ebene.
(ist aber eigentlich schon vernachlässigbar, ist der schuss halt ein bissel schneller)
und mit Z müßtest du dann eigentlich schon richtig liegen...
aber ich bin mir auch nicht wirklich sicher, ob da jetzt irgendwo ein vorzeichen verdreht ist oder was 90 falsch liegt,
aber grundsätzlich ist das schon so.
Orientirung
Verfasst: 25.07.2008 15:35
von kob
die Z Achse ist in die tiefe orientirt also
X = Breit
Y = Hohe
Z = Tiefe
ich use die OGRE Engine , ich denke mal das die nicht greade für soetwas geeignet ist , aber bei der kenne ich wenigstens die befele , wen ich jetzt eine neue engine lernen müsste , das würde dauern , aber ich glaube das ich das verstanden habe , habe probeweise in echt geübt, habe papir kölchen in den papirkorb geworfen , unddabe erst nach den winkeln gekuckt , ich glaube das habe ich verstanden , danke danke für die hilfe , PS : bin ab 6 pm nur noch 1 mal täglich zu erreichen , bin bei freund , habe daheim kein inet
Re: Thanks
Verfasst: 25.07.2008 15:47
von Andreas_S
kob hat geschrieben:Danke jetzt habe ich das glaude ich geraft also :
Alpha = CamRotX
Beta = CamRotY
Speed = Beweg
X = (Cos(ALpha)) * Speed
Y = (Sin(Beta)) * Speed
bei z bin ich mir nicht sicher und überhaupt
Z = (Cos(beta)) * Speed
Nein. du hast das falsch verstanden.
1. |v| heißt "betrag von Vektor v"
Den Betrag ermittelst du mit dem pythagoreischen Lehrsatz.
2. Bei mir hieß |v|2D, den "2D Betrag von Vektor v"
-> nur x und y
3. Das ganze sieht dann so aus:
Alpha = CamRotX
Beta = CamRotY
Speed = Beweg
Es sieht so aus als würde bei dir die X-Achse nach oben zeigen und die Y-Achse links oder rechts...
also...
X = Cos(beta) * Speed
_2DBetrag = Speed^2 - x^2
(in PB mit der funktion pow())
Z = Cos(alpha) * _2DBetrag
Y = Sin(alpha) * _2DBetrag
Ich hoffe das war verständlich genug...
X, Y, Z sind hier übrigens geschwindigkeiten...
HAHAHAH Es Leuft
Verfasst: 25.07.2008 15:56
von kob
Danke es leuft !!!!
Ja Danke es funktionirt mit den formeln DANKE DANKE DANKE !!!!
Verfasst: 25.07.2008 16:59
von Kaeru Gaman
gratuliere! dann viel spatz damit...
Verfasst: 25.07.2008 17:28
von Andreas_S
Achtung!
Ich hab einen kleinen fehler in meiner Formel!
statt
_2DBetrag = Speed^2 - x^2
muss
_2DBetrag = Sqr(Speed^2 - x^2)
sein!
Code: Alles auswählen
Alpha.d = #PI
Beta.d = #PI
Speed.d = 10
For alphaD = 0 To 360
Alpha = alphaD * 180/#PI
For betaD = 0 To 360
Beta = betaD * 180/#PI
X = Cos(beta) * Speed
_2DBetrag.d = Sqr(Speed*Speed - X*X)
Z = Cos(alpha) * _2DBetrag
Y = Sin(alpha) * _2DBetrag
If Sqr(X*X + Y*Y + Z*Z) <> Speed
Debug "Abweichung: " StrD(Sqr(X*X + Y*Y + Z*Z) - Speed)
EndIf
Next
Next
Hier sieht man das der betrag fast genau ist...
Re: First Person Shoter Frage
Verfasst: 22.05.2012 22:17
von Darie
Hallo Leute !!!
ich möchte das gleiche wie Kob machen, nur nicht als FirstPerson-Shooter. Hab versucht die Berechnung auf das "normale" Ogre-Koordinatensystem umzustellen
(xz -> Ebene, y -> Höhe). Irgendwie stimmt der Drehwinkel nicht. Die Kugel fliegt nicht in die richtige Richtung nachdem man sich gedreht hat. Wäre nett, wenn ihr mal schauen würdet, was ich da falsch mache....
Mit WASD könnt ihr steuern und mit LeftControl feuert ihr eine Kugel ab...
Hier ist der Code von der Shoot Prozedur, und hier alle Dateien zum ausführen
https://www.dropbox.com/s/jgslwzduj7lza ... enture.zip
Code: Alles auswählen
; Alpha = CamRotX
; Beta = CamRotY
; Speed = Beweg
;
; Es sieht so aus als würde bei dir die X-Achse nach oben zeigen und die Y-Achse links oder rechts...
; also...
;
; X = Cos(beta) * Speed
;
; _2DBetrag = Speed^2 - x^2
; (in PB mit der funktion Pow())
;
; Z = Cos(alpha) * _2DBetrag
; Y = Sin(alpha) * _2DBetrag
id = CreateSphere(#PB_Any,1)
id2=CreateEntity(#PB_Any,MeshID(id),#PB_Material_None, NodeX(3), NodeY(3), NodeZ(3))
;EntityPhysicBody(id2, #PB_Entity_SphereBody,0,0,0)
Debug dir.f
Alpha.f = dir.f ;NodeYaw(1)
Beta.f = 45 ;NodePitch(1)
Speed.f = 0.2
yy.f = Cos(Beta) * Speed.f : _2DBetrag = Pow(Speed.f,2) - Pow(yy.f,2)
xx.f = Sin(Alpha) * _2DBetrag
zz.f = Cos(Alpha) * _2DBetrag
;ApplyEntityImpulse(id2, x,y,z)
;MoveEntity(id2,xx,yy,zz)
Müssen Alpha und Beta eigentlich in Grad oder Radian angegeben werden bzw. wie rechnet man NodeYaw und NodePitch richtig um ?
Hab so ziemlich alle Achsen umgestellt, aber irgendwie haut das nicht hin.... Vielen Dank für eure Hilfe
Dir.f ist die Rotation der Spielers in Grad (von 0 - 360 - 0)
Gruss
D.
Re: First Person Shoter Frage
Verfasst: 23.05.2012 19:08
von Darie
Hab`s selber gelöst....
Code: Alles auswählen
id = CreateSphere(#PB_Any,1)
id2=CreateEntity(#PB_Any,MeshID(id),#PB_Material_None, NodeX(1), NodeY(1)+5, NodeZ(1))
EntityPhysicBody(id2, #PB_Entity_SphereBody,0.1,0,0)
Speed.f = 5
xx.f = Sin(NodeYaw(1)*(2*#PI/360))* speed
zz.f = Cos(NodeYaw(1)*(2*#PI/360))* speed
Re: First Person Shoter Frage
Verfasst: 30.05.2012 21:01
von Max_der_Held
btw. inzwischen haben Kob und ich einen kleinen shooter gebastelt:
http://code.google.com/p/purebasic-3d-shooter/
das ist aber schon bisschen her..
Re: First Person Shoter Frage
Verfasst: 31.05.2012 08:50
von Kiffi
Max_der_Held hat geschrieben:btw. inzwischen haben Kob und ich einen kleinen shooter gebastelt
Screenshots wären nett (auf code.google.com).
Grüße ... Kiffi