Egoshooter Perspektive programmieren mit OpenGL
-
WoW,
Danke für die MatritzenHilfe, aber meine Frage ist :
Der Code enthält doch wohl kaum Matrizen Rechnung, wie sie
bei OpenGL 5.0x gebraucht wird oder ?mat3, mat4, etc. seh ich iwie nischt xD
oder was versucht Ihr mir hier zu vermitteln ?
Also ich hab mich jetzt einigermaßen GUT in sin(x) und cos(x) eingelsen.Meine Frage ist nur, wie er die neue Position berechnet wird ?
Mal angenommen, auf der "W"-Taste bewegt man sich nach "vorne".
Wenn man sich dann um 180° dreht, dann liegt bei mir das große Problem,
dass ich mich nach HINTEN bewege. Eigentlich auch klar, weil die Taste
"W" bei mir nix anderes macht, als eine Variable zu Dekrementieren.Genau das gleiche Problem ist , wenn man sich um 90° nach links dreht und "W" immernoch drückt, so bewegt man sich nicht nach vorne, sondern zur Seite nach rechts.
drückt, so bewegt er s
-
jookerxxx schrieb:
Der Code enthält doch wohl kaum Matrizen Rechnung, wie sie
bei OpenGL 5.0x gebraucht wird oder ?Ab OpenGL 3.x sicher nicht. Aber OpenGL 5.x gibt's noch nicht
.
Und das wegen dem Winkel und der Fortbewegung: Dreiecks-Welle
-
jookerxxx schrieb:
Mal angenommen, auf der "W"-Taste bewegt man sich nach "vorne".
Wenn man sich dann um 180° dreht, dann liegt bei mir das große Problem,
dass ich mich nach HINTEN bewege. Eigentlich auch klar, weil die Taste
"W" bei mir nix anderes macht, als eine Variable zu Dekrementieren.Wo Vorne und Hinten ist kannst Du abhanegig vom Rotationswinkel am Einheitskreis ablesen.
-
Ihr habt lust mich zu schockieren oda? xD
Kann mir nicht jemand die Rechnung Punktgenau erklären ? So mit süßen Bildchen ? xD Bin aufgeschmissen.
Ich weiß zwar was Matrizen sind. Wie man sie Multipliziert und was für Matrizenformen ( scale, translate etc. ) es da gibt. Sinus Cosinus ist jetzt auch nicht mehr das allzu große Problem, aber mit dem Code komm ich einfach nicht klar.
xD
Ich glaube mein Gehirn schaltet auf Stur xD (L)Ich wäre SEHR erfreut, wenn mir jemand die abgespeckte Version, von dem obrigen Code mit Bildchen erklären könnte.
(L)
-
Du verstehst also nicht wie man einen Punkt auf einem Kreis findet aber moechtest einen Ego-Shooter programmieren?...
-
Die Fortbewegung sollte mit einer Dreiecks-Welle und nicht mit einer Sinus-Welle erfolgen, oder irre ich mich da?
-
Germanys Next MMO Progger
-
this->that schrieb:
Germanys Next MMO Progger
MMORPG tönt realistischer :p
-
EOutOfResources schrieb:
Die Fortbewegung sollte mit einer Dreiecks-Welle und nicht mit einer Sinus-Welle erfolgen, oder irre ich mich da?
Daher auch der Ausdruck "Du drehst Dich im Dreieck" ?
-
hellihjb schrieb:
Daher auch der Ausdruck "Du drehst Dich im Dreieck" ?
Ich meinte die Fortbewegung:
W drücken: Dreieck Cosinus 0° 1 1 45° 0.5 0.707 90° 0 0
Wenn man 'W' drückt und um 45° gedreht ist, geht 50% der Geschwindigkeit in die Z-Achse und auch 50% in die X-Achse. Und nicht je 70.7%.
EDIT: Oder hab ich gerade 'nen Aussetzer?
-
EOutOfResources schrieb:
[/code]Wenn man 'W' drückt und um 45° gedreht ist, geht 50% der Geschwindigkeit in die Z-Achse und auch 50% in die X-Achse. Und nicht je 70.7%.
EDIT: Oder hab ich gerade 'nen Aussetzer?
Denk Dir mal ein Quadrat mit den Seitenlängen 0.707.
Wie lang ist die Diagonale? (Satz des Pythagoras!)
Also muß man 0.707 Geschwindigkeit in X-Richtung und 0.707 Geschwindigkeit in Y-Richtung machen, um in Schräg-Richtung 1 Geschwindigkeit zu machen.
-
Ja, stimmt. Sorry.
-
Oke, ich habs jetzt gecheckt.
Mein gehirn hat heute mal nicht ausgesetzt.Nur zur Info :
Ich hab die Variable "heading" in dem Code nicht gecheckt.
Jetzt ist eig alles klar."heading" = Angle.
Bei mir siehts also wie folgt aus :
GLfloat fAngle.
Bei Taste "A" :
fAngle += 0.5f;
Bei Taste "D" :
fAngle -= 0.5f;
Bei Taste "W" :
fTransX -= (float)sin(fAngle*piover180) * 0.05f; fTransZ -= (float)cos(fAngle*piover180) * 0.05f; //fAngle*piover180 = Gradzahl in Radiant
Bei Taste "S" :
fTransX += (float)sin(fAngle*piover180) * 0.05f; fTransZ += (float)cos(fAngle*piover180) * 0.05f; //fAngle*piover180 = Gradzahl in Radiant
Der Code in der ScenenFunktion :
glRotatef( -fAngle, 0.0f, 1.0f, 0.0f ); glTranslatef( -fTransX, fTransY, -fTransZ );
Und alles passt. Den realistikquatsch von wegen, SinusWave, damit es wie menschenLauf aussieht brauch ich nicht.
Vielen Vielen Dank, für die Hilfe, die Ihr mir gerade geboten habt. Und die Zeit über. Zumindest weiß ich jetzt, dass Trigonometrie entscheidend wichtig ist.
Mfg
jookerxxx (went lucky today)
-
Du solltest nicht bei Nehe lernen. Der Code ist hoffnungslos veraltet. glBegin und glEnd ist wirklich mittlerweile ein nogo. Verwende wenigstens Vertex Arrays.
-
Scorcher24 schrieb:
Du solltest nicht bei Nehe lernen. Der Code ist hoffnungslos veraltet. glBegin und glEnd ist wirklich mittlerweile ein nogo. Verwende wenigstens Vertex Arrays.