1

在我的过剩应用程序中,我正在用相机模拟飞机。当飞机速度较低时,我打算让机头在相机下降时开始指向地面。我的第一个直觉是改变音高,直到它向下指向 -90 度。但是我不能只改变俯仰角,因为如果飞机侧面倾斜或倒置,那么它会注意到改变朝向地面的方向。

现在我试图通过向下移动'lookAt.y'来粗略模拟这个。为此,我试图获取用于设置相机的所有当前相机坐标(eye.x、eye.y、eye.z、look.x、look.y、look.z、up.x、up .y,向上.z)。然后用新的修改值调用集合。

我一直在使用 Camera.cpp 和 Camera.h 来控制我的相机功能。他们可以在这里找到

在添加了获取所有值的方法之后,当进行各种相机运动时,实际上只更新了眼睛的值。我想我的问题是如何检索这些值。

glLoadMaxtrix 调用在这个函数中

void Camera :: setModelViewMatrix(void)

{ // load model view matrix with existing camera values

    float m[16];

    Vector3 eVec(eye.x, eye.y, eye.z);

    m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);

    m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);

    m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);

    m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;

look.x = u.y; look.y = v.y; look.z = n.y; 

    glMatrixMode(GL_MODELVIEW);

    glLoadMatrixf(m);

}

有没有办法从这里的矩阵中获取 'eye'、'lookAt' 和 'up' 值?还是我应该做其他事情来获得这些值?

-在此先感谢您的帮助

4

1 回答 1

1

您链接到的相机类不是实际的 OpenGL 类,但它应该足够简单以便使用。

引用的函数只是获取相机对象的当前值并将它们发送到 OpenGL。如果您查看相机的 set 函数,您可以看到程序如何计算它实际存储的值。

眼睛值直接存储。通过矢量数学,lookAt 值就是 (eye - n) 的值。up 值是最难的,但如果我没记错我的向量数学,我相信 up = (n cross u)。

于 2009-04-29T02:01:57.247 回答