我正在使用OpenGL进行赛车游戏(只是一个小项目)而且我在尝试让我的汽车按照摄像机视图时遇到问题。
当摄像机向前和/或向后移动时,跟随摄像机并不难,但是当我旋转摄像机(向右或向左)时,汽车仍然存在。我的意思是,它仍然向前和向后移动,但它不在镜头前(它在侧面)。
这是我的代码(我尝试实现它的部分):
void updateCam() {
gluLookAt(posX,posY + 0.025 * std::abs(sin(headPosAux*PI/180)),posZ,
posX + sin(roty*PI/180),posY + 0.025 * std::abs(sin(headPosAux*PI/180)) + cos(rotx*PI/180),posZ -cos(roty*PI/180),
0.0,1.0,0.0);
listenerPos[0] = posX;
listenerPos[1] = posY;
listenerPos[2] = posZ;
source0Pos[0] = posX;
source0Pos[1] = posY;
source0Pos[2] = posZ;
GLfloat distD;
distD = posZ - 3.3;
//makes the car "follow" the camera
modelPOR.Translate(posX,posY,distD);
}
答案 0 :(得分:1)
我认为问题在于您更改了gluLookAt中的中心位置而不是模型中的中心位置。转换
gluLookAt的3个中间参数设置了视图的中心,因此汽车应该位于完全相同的位置,但是您可以在不修改汽车位置的情况下修改中心。
gluLookAt(posX,posY + 0.025 * std::abs(sin(headPosAux*PI/180)),posZ,
// center x
posX + sin(roty*PI/180),
// center y
posY + 0.025 * std::abs(sin(headPosAux*PI/180)) + cos(rotx*PI/180),
// center z
posZ -cos(roty*PI/180),
0.0,1.0,0.0);
你应该用这些相同的价值来翻译汽车。然后它会集中。
该代码中似乎存在的另一个问题是您旋转相机而不是汽车,因此汽车可能不会指向与相机相同的方向。 (是你想要的还是你在哪里做的?)
但你真的确定要让汽车跟着相机吗?反过来可能会更好。