First Person Shoter Frage
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- kob
- Beiträge: 116
- Registriert: 01.01.2008 02:02
- Computerausstattung: 2x 2.4 GHz Amd Cpu | Geforce N9600GT OC |2.5GB Ram |Windows 7 Ultimate
- Wohnort: Fulda
Orientirung
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
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
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
Re: Thanks
Nein. du hast das falsch verstanden.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
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...
- kob
- Beiträge: 116
- Registriert: 01.01.2008 02:02
- Computerausstattung: 2x 2.4 GHz Amd Cpu | Geforce N9600GT OC |2.5GB Ram |Windows 7 Ultimate
- Wohnort: Fulda
HAHAHAH Es Leuft
Danke es leuft !!!!
Ja Danke es funktionirt mit den formeln DANKE DANKE DANKE !!!!

Ja Danke es funktionirt mit den formeln DANKE DANKE DANKE !!!!
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Achtung!
Ich hab einen kleinen fehler in meiner Formel!
statt
_2DBetrag = Speed^2 - x^2
muss
_2DBetrag = Sqr(Speed^2 - x^2)
sein!
Hier sieht man das der betrag fast genau ist...
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
Re: First Person Shoter Frage
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
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.
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)
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.
Repeat
PureBasic
ForEver
PureBasic
ForEver
Re: First Person Shoter Frage
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
Repeat
PureBasic
ForEver
PureBasic
ForEver
- Max_der_Held
- Beiträge: 595
- Registriert: 18.04.2006 17:01
- Wohnort: Bavaria
- Kontaktdaten:
Re: First Person Shoter Frage
btw. inzwischen haben Kob und ich einen kleinen shooter gebastelt:
http://code.google.com/p/purebasic-3d-shooter/
das ist aber schon bisschen her..
http://code.google.com/p/purebasic-3d-shooter/
das ist aber schon bisschen her..
Re: First Person Shoter Frage
Screenshots wären nett (auf code.google.com).Max_der_Held hat geschrieben:btw. inzwischen haben Kob und ich einen kleinen shooter gebastelt
Grüße ... Kiffi
a²+b²=mc²