如何在opengl中实现相机跟踪三维物体

pieyvz9o  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(224)

我第一次用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;
    }
}
d7v8vwbk

d7v8vwbk1#

也许是类似的东西?

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 & stuff),则必须执行以下操作

mat4 ViewMatrix = LookAt(cameraPosition, cameraTarget, cameraUp); // adapt depending on what math library you use
bqjvbblv

bqjvbblv2#

答案很简单。你有一个玩家控制的对象(汽车),所以你可以通过ModelViewMatrix在世界空间中获得它的位置和方向(通常指向3D模型的中心)要将它转换为正确的ModelViewMatrix,你必须:
1.获取或构造汽车ModelMatrix作为double M[16]
1.将其平移/旋转到新位置(驾驶舱内或汽车后面)
所以Z轴指向你想看的方向。通常跟随距离是速度的函数
1.M反转为M=Inverse(M)
1.M用作ModelViewMatrix
1.渲染
所以简单地说:

ModelViewMatrix = rendered_object_matrix * Inverse(following_object_matrix * local_view_offset)

对于你需要的额外的东西,看看我的答案:

相关问题