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;
}
}
答案 0 :(得分:4)
这样的事可能吗?
vec3 cameraPosition = carPosition + vec3(20*cos(carAngle), 10,20*sin(carAngle));
vec3 cameraTarget = carPosition;
vec3 cameraUp = vec3(0,1,0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity()
gluLookAt(cameraPosition, cameraTarget, cameraUp);
glTranslate(carPosition);
drawCar();
你没有使用旧的和不推荐使用的openGL API(glBegin&amp; stuff)你必须做的事情
mat4 ViewMatrix = LookAt(cameraPosition, cameraTarget, cameraUp); // adapt depending on what math library you use
答案 1 :(得分:0)
答案很简单。您有玩家控制的对象(汽车),因此您可以通过ModelViewMatrix在世界空间中获得其位置和方向(通常指向3D模型的中心) 要将其转换为正确的跟随ProjectionMatrix,您必须:
有关其他内容,您需要在此处查看我的答案:https://stackoverflow.com/a/18041433/2521214