Berechnung der Blcikrichtungsvektors
-
Hallo,
ich schreib grad ne Kamera, und für MoveForward() brauch ich logischerweise den Blickrichtungsvektor.
Ich hab aber keinen Schimmer wie ich den aus RotationX, RotationY,RotationZ und X,Y und Z errechnen kann. Wisst ihr da was?Danke
-
Das sind dünne Angaben. Was steht dir zur verfügung? Rotationsmatrix, ein Quaternion, ...
Ein paar Angaben wären sehr schön.
grüße
-
Ausser den (Aug-)Koordinaten X,Y,Z und den Rotationsvariablen RotationX, RotationY,RotationZ (nicht im Bogenmaß, sondern Gradmaß) habe ich keine weiteren Variblen.
Es geht bei mir grad darum, den "Ogro.md2" im Raum zu bewegen.
-
du brauchst ja jetzt bereits eine weitere information für die blickrichtung , die du nach angaben nicht hast.
ich mach dass immer so dass ich eine position im Raum habe ( Die Figur).
Diese Figur ist die Kamera und ich schau einfach auf einen Punkt vor mir.
Bsp.Figur Position 0,0,0
guckt auf 1,1,0wenn ich die figur nun drehe oder bewege bewege ich den Punkt auch.
Bsp:
BewegungFigur bewegt sich nach x um 1:
Figur Position 1,0,0
guckt auf 2,1,0Bei der Drehung musst du nur drauf achten dass du um die Figur drehst nicht um dein Koordinatensystem.
-
für die Drehung soweit ich mich erninnern kann hab ich das so gemacht dass ich (bei OpenGL) Translatef(figur position ) aufrufe.
und dann 3 mal glRotatef aufrufe für die drehungen um x,y,z.
dann mit glTranslatef wieder zurrück zum Koordinatensystem wenn nötig.
-
So,
danke erst mal an euch.
@hokk
Ich hab die Transformation zwischen glPush/PopMatrix() aufgerufen, das muss ich nätürlich dann so machenglPushMartix(); glLoadIdentity();//hatte ich vergessen glTranslatef(X,Y,Z); glRotatef(RotX,1.0,0.0,0.0); glRotatef(RotY,0.0,1.0,0.0); glRotatef(RotZ,0.0,0.0,1.0); RenderOgro(); glPushMatrix();
Ach ja, so wie du des machst, also den Blickpunkt mit der Figur mitzubewegen ist ja logisch, aber ich muss den Blickrichtungsvektor ja auch verändern wenn ich die Figur drehe. Und ich weiss nicht wie.
-
ich habs so gemacht mit der rotation( ist aber nur prototyp da es noch sicher besser geht)
Habs auch grad noch bissle umgeschrieben da zu viele sachen von mir noch drin waren ( also weiß ich nicht obs geht)
// value x,y,z = koordinaten des blickpunktes // den x,y,z die Kamera coordinaten abziehen valueX -= KameraX; valueY -= KameraY; valueZ -= KameraZ; // jetzt sieht die situation so aus als ob die Kamera auf 0,0,0 währe und der // blickpunkt um sie rum // rotation um X GLdouble valueX2 = 1*valueX + 0*valueY + 0*valueZ; GLdouble valueY2 = 0*valueX + valueY*cos(rotX) - valueZ*sin(rotX); GLdouble valueZ2 = 0*valueX + valueY*sin(rotX) + valueZ*cos(rotX); // rotation um Y GLdouble valueX3 = cos(rotY)*valueX2 + 0*valueY2 + sin(rotY)*valueZ2; GLdouble valueY3 = 0*valueX2 + 1*valueY2 + 0*valueZ2; GLdouble valueZ3 = -sin(rotY)*valueX2 + 0*sin(rotY) + valueZ2*cos(rotY); // rotation um Z GLdouble valueX4 = cos(rotZ)*valueX3 - sin(rotZ)*valueY3 + 0*valueZ3; GLdouble valueY4 = sin(rotZ)*valueX3 + cos(rotZ)*valueY3 + 0*valueZ3; GLdouble valueZ4 = 0*valueX3 + 0*valueY3 + 1*valueZ3; // den x,y,z die Kamera coordinaten wieder raufaddieren valueX4 += KameraX; valueY4 += KameraY; valueZ4 += KameraZ; // in valueX4,valueY4,valueZ4 sind nun die rotierten werte. // Wie du siehstr kannst du dir bei dem code viel sparen ( z.B die multiplikationen mit 0 etc. )
Musst dir halt praktischerweise ne vector klasse oder so schreiben die dir dann sowas übernimmt