如何旋转然后朝那个方向移动?

Ale*_*exx 4 c++ opengl

海兰,我目前正在做一个第一人称game.what我能够做的就是使用函数gluLookAt()使相机移动和使用glRotatef()它旋转.我试图向是旋转相机然后在我旋转的方向上向前移动,但轴保持不变,虽然我已经旋转,但相机会向侧面移动而不是向前移动.有人能帮我吗 ?这是我的代码:

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);
Run Code Online (Sandbox Code Playgroud)

Ned*_*ham 5

这需要一些矢量数学......

鉴于这些功能,操作非常简单:

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);
}
Run Code Online (Sandbox Code Playgroud)

假设您将方向矢量定义为{CameraPhi,CameraTheta,0.0},那么如果您想要相对于相机轴向矢量v的方向移动相机,则将其添加到相机的位置p:

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);
Run Code Online (Sandbox Code Playgroud)

这应该做到这一点.保持编码:)