First Person Shoter Frage

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag 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
Wenn sie weich werden bringt Pandora sie um und scheisst sie aus bevor sie irgend etwas merken.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Re: Thanks

Beitrag 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 :oops:

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...
Benutzeravatar
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

Beitrag von kob »

Danke es leuft !!!! :D
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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

gratuliere! dann viel spatz damit...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag 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...
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: First Person Shoter Frage

Beitrag 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.
Repeat
PureBasic
ForEver
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: First Person Shoter Frage

Beitrag 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
Repeat
PureBasic
ForEver
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: First Person Shoter Frage

Beitrag 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..
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: First Person Shoter Frage

Beitrag 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
a²+b²=mc²
Antworten