4 Stimmen

Wie kann man sich drehen und dann in diese Richtung bewegen?

Hy, ich bin derzeit versuchen, eine erste Person game.what ich war in der Lage zu tun war, um die Kamera mit der Funktion gluLookAt() zu bewegen, und um es mit glRotatef() zu drehen.What ich versuche, zu ist, um die Kamera zu drehen und dann vorwärts auf die Richtung, die ich auf gedreht haben, aber die Achsen bleiben die gleichen, und obwohl ich die Kamera bewegt sich seitwärts nicht vorwärts gedreht haben. Kann mir jemand helfen? Dies ist mein Code:

glMatrixMode(GL_MODELVIEW);   
glLoadIdentity();   
glRotatef(cameraPhi,1,0,0);   
glRotatef(cameraTheta,0,1,0);
gluLookAt(move_camera.x,move_camera.y,move_camera.z,move_camera.x,move_camera.y,move_camera.z-10,0,1,0);
drawSkybox2d(treeTexture);

5voto

Ned Bingham Punkte 2679

Dies erfordert ein wenig Vektor-Mathematik...

Angesichts dieser Funktionen ist die Bedienung jedoch recht einfach:

vec rotx(vec v, double a)
{
    return vec(v.x, v.y*cos(a) - v.z*sin(a), v.y*sin(a) + v.z*cos(a));
}

vec roty(vec v, double a)
{
    return vec(v.x*cos(a) + v.z*sin(a), v.y, -v.x*sin(a) + v.z*cos(a));
}

vec rotz(vec v, double a)
{
    return vec(v.x*cos(a) - v.y*sin(a), v.x*sin(a) + v.y*cos(a), v.z);
}

Angenommen, Sie haben einen Orientierungsvektor, der als {CameraPhi, CameraTheta, 0.0} definiert ist. Wenn Sie die Kamera dann in Richtung eines Vektors v in Bezug auf die Kameraachse bewegen wollen, fügen Sie diesen zur Kameraposition p hinzu:

p += v.x*roty(rotx(vec(1.0, 0.0, 0.0), CameraPhi), CameraTheta) +
     v.y*roty(rotx(vec(0.0, 1.0, 0.0), CameraPhi), CameraTheta) +
     v.z*roty(rotx(vec(0.0, 0.0, 1.0), CameraPhi), CameraTheta);

Und das sollte genügen. Keep Coding :)

1voto

casablanca Punkte 68114

gluLookAt ist wie folgt definiert:

void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,
               GLdouble centerX, GLdouble centerY, GLdouble centerZ,
               GLdouble upX, GLdouble upY, GLdouble upZ
              );

Die Kamera befindet sich an der eye Position und Blick in die Richtung von der eye zum center .

eye y center definieren zusammen die Achse (Richtung) der Kamera, und der dritte Vektor up definiert die Drehung um diese Achse.

Sie brauchen keine separaten Phi- und Theta-Drehungen, geben Sie einfach die richtigen up Vektor, um die gewünschte Drehung zu erhalten. (0,1,0) bedeutet, dass die Kamera aufrecht steht, (0,-1,0) bedeutet, dass die Kamera auf dem Kopf steht und andere Vektoren Zwischenpositionen definieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X