Umrechnung von YAW, PITCH und ROLL
-
aber ist es dann wirklich kein unterschied, ob ich
flugzeugmatrix *= rotX(joy.y);
flugzeugmatrix *= rotY(joy.z);
flugzeugmatrix *= rotZ(joy.x);
schreibe oder
flugzeugmatrix *= rotY(joy.z);
flugzeugmatrix *= rotX(joy.y);
flugzeugmatrix *= rotZ(joy.x);
?? (ich muss unbedingt mesa wieder hinbekommen, ich kann hier ncihts testen)
-
Ne, wirklich nicht. Kommt ja aufs gleiche raus, ob Du erst um x oder um y drehst, solang Du relativ zu den Flieger-Achsen drehst.
Warum laueft mesa nicht?
-
durito schrieb:
Ne, wirklich nicht. Kommt ja aufs gleiche raus, ob Du erst um x oder um y drehst, solang Du relativ zu den Flieger-Achsen drehst.
du ignorierst aber gerade fleißig, daß nach der rotation um x die y-achse eine andere ist und umgekehrt. das ergebnis ist also NICHT das gleiche. wenn die winkel aber sehr klein bleiben ist der unterschied so klein, daß er keine rolle mehr spielt.
heb deine hand in die luft, dreh sie 45° um den mittelfinger und dann 45° senkrecht zum handrücken. und jetzt nochmal das gleiche umgekehrt.
a) finger zeigen nach vorn, dann nach links oben
b) finger zeigen nach links vorne, dann immer noch nach links vorne
-
Hm, Mist, tatsaechlich
Dann spielt das bei nem FlugSim ja nur keine Rolle, weil die Veraenderung pro Frame sehr gering ist. Naja, Hauptsache es fliegt irgendwie..
-
durito schrieb:
Dann spielt das bei nem FlugSim ja nur keine Rolle, weil die Veraenderung pro Frame sehr gering ist. Naja, Hauptsache es fliegt irgendwie..
die ganz harten simulieren sowieso sämtliche klappen und luftströmungen statt nur billig das flugzeug zu drehen *fg* aber ich bleib dann doch lieber softie
-
@durito:
deswegen kompilierts nicht: http://www.c-plusplus.net/forum/viewtopic.php?t=87749@Trienco:
Genau das hab ich gemeint!! Wie kann man jetzt so eine matrix berechnen? Also z.b. bei einem flugsim, wo man das flugzeug um z.b. 10grad rollen und um 50° nach oben neugen und um 70grad drehen will?
-
ahh mir ist gerade eine idee dafür gekommen: kann man nicht einfach gluLookAt nehmen, und die erzeugte matrix als objektmatrix nehmen??
-
Trienco schrieb:
durito schrieb:
Dann spielt das bei nem FlugSim ja nur keine Rolle, weil die Veraenderung pro Frame sehr gering ist. Naja, Hauptsache es fliegt irgendwie..
die ganz harten simulieren sowieso sämtliche klappen und luftströmungen statt nur billig das flugzeug zu drehen *fg* aber ich bleib dann doch lieber softie
Jo, das mach ich auch so
Allerdings reichts für mich trotzdem nicht in den Club der ganz Harten, meine Flugphysik ist ne einzige grosse Katastrophe..
Mein grösstes Problem ist, dass der Geschwindigkeitsvektor zu langsam an die Flugrichtung angepasst wird, mein Flugzeug "schleudert" also in den Kurven.. *g* Aber das bieg ich schon noch hin..
@HellKnight: Machs mit dieser Obj-Matrix. Das geht wunderbar. Du hast pro Frame eh nur ganz geringe Richtungskorrekturen.
-
Bei meiner FPS-like Maussteuerung klappt es mit Yaw und Pitch in Winkeln speichern, und mehr nicht, anscheinend aber wunderbar. Warum?
Ich mache dabei glaub ich als erstes ne Rotation um die y-Achse und dann um sie veränderte x-Achse. Das ganze dann noch umgekehrt (und immer negativ weil camera), wegen den OpenGL-Matrizen, und es funzt:(Pitch hab ich noch nicht probiert, is immer 0)
void Camera::setMatrix() { glLoadIdentity(); gluLookAt(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f); glRotatef(-direct_.x, 1.0f, 0.0f, 0.0f); glRotatef(-direct_.y, 0.0f, 1.0f, 0.0f); glRotatef(-direct_.z, 0.0f, 0.0f, 1.0f); glTranslatef(-pos_.x, -pos_.y, -pos_.z); }
-
spl@t schrieb:
Bei meiner FPS-like Maussteuerung klappt es mit Yaw und Pitch in Winkeln speichern, und mehr nicht, anscheinend aber wunderbar. Warum?
weils was ganz anderes ist? pack da mal noch ne rotation um z rein (um den kopf seitlich zu neigen) und in der reihenfolge wirds auseinanderfallen. du würdest bei einem shooter auch nie auf die idee kommen um die lokale y achse zu rotieren, weils extrem seltsam aussehen würde.
-
eigentlich müsste man doch das problem lösen können, wenn man gluLookAt verwendet. Dann müsste man nurnoch Yaw Pitch und Roll winkel in die "to"-coord umrechnen oder??
EDIT: ich habe es geschafft!!!!!!!! OPEN GL GEHT!
Edit2: ahh ne doch nich ... hat jemand ne ahnung was das 'Xlib: extension "XFree86-DRI" missing on display ":0.0".' heissen soll? Ich denk mal, dass der X server das OpenGL extention protocol nicht unterstützt oder?? was kann ich dann tun? XFree hab ich gradeben neu compiliert.
-
Hast Du denn keine GraKa-Treiber?
-
doch ich denk auch nicht dass das etwas damit zu tun hat.
eher fehlt mir die X11-protocol-extention für OpenGL oder so (muss man da vielleciht noch ein compiler-flag anschalten?!?). Also früher gings bei mir.
-
Hm, aber wenn Du nen GraKa-Trieber hast, brauchst Du doch keine mesa, oder? oder täusch ich mich da?
-
nee mesa ist doch nur ein OpenGL clone
Mesa redet so-zu-sagen mit dem graka-treiber -> entweder direkt über /dev/dri (direct rendering interface) oder eben über X11 (oder beides weis nich so genau) - auf jeden fall kann mein X-Server die protocol erweiterung irgendwie nicht.
-
HellKnight schrieb:
eigentlich müsste man doch das problem lösen können, wenn man gluLookAt verwendet. Dann müsste man nurnoch Yaw Pitch und Roll winkel in die "to"-coord umrechnen oder??
? wenn du die ganzen sachen weißt, die man für lookat braucht, dann ist die sache sowieso schon erledigt, denn lookat baut daraus GENAU die matrix, die du sowieso von anfang an benutzen solltest und invertiert sie noch schnell. was steht in so einer matrix schon drin? rechts/oben/vorne vektoren und eine position. was braucht man für lookat? einen über den "vorne" vektor berechneten punkt, die position und einen wenigstens grob korrekten oben vektor. lookat bügelt in dem fall nur ein paar überflüssige kreuzprodukte und wurzeln drüber.