gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:19 25 4
gpt4 key购买 nike

嘿,我目前正在尝试制作第一人称游戏。我能够做的是使用函数 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);

最佳答案

这需要一点 vector 数学...

有了这些函数,操作起来还是很简单的:

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);
}

假设您有一个定义为 {CameraPhi, CameraTheta, 0.0} 的方向 vector ,然后如果您想相对于相机轴在 vector 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);

那应该就可以了。继续编码:)

关于c++ - 如何旋转然后朝那个方向移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4288367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com