我第一次用opengl制作一个赛车,我面临的第一个问题是如何让摄像机以恒定的距离跟踪汽车..这是键盘功能的代码。
void OnSpecial(int key, int x, int y)
{
float step = 5;
switch(key) {
case GLUT_KEY_LEFTa:
carAngle = step;
V.z = carAngle ;
camera.Strafe(-step/2);
break;
case GLUT_KEY_RIGHT:
carAngle = -step;
V.z = carAngle ;
camera.Strafe(step/2);
break;
case GLUT_KEY_UP:
V.x += (-step);
camera.Walk(step/2);
break;
case GLUT_KEY_DOWN:
if(V.x<0)
{
V.x += step;
camera.Walk(-step/2);
}
break;
}
}
2条答案
按热度按时间d7v8vwbk1#
也许是类似的东西?
如果您没有使用旧的和废弃的openGL API(glBegin & stuff),则必须执行以下操作
bqjvbblv2#
答案很简单。你有一个玩家控制的对象(汽车),所以你可以通过
ModelViewMatrix
在世界空间中获得它的位置和方向(通常指向3D模型的中心)要将它转换为正确的ModelViewMatrix
,你必须:1.获取或构造汽车
ModelMatrix
作为double M[16]
1.将其平移/旋转到新位置(驾驶舱内或汽车后面)
所以Z轴指向你想看的方向。通常跟随距离是速度的函数
1.将
M
反转为M=Inverse(M)
1.将
M
用作ModelViewMatrix
1.渲染
所以简单地说:
对于你需要的额外的东西,看看我的答案: