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

现在我试图通过向下移动“lookAt.y”来对此进行粗略模拟。为此,我正在尝试获取用于设置相机的所有当前相机坐标 (eye.x、eye.y、eye.z、look.x、look.y、look.z、up.x、up.y、up.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”值?或者我应该做其他事情来获得这些值?

-在此先感谢您的帮助

有帮助吗?

解决方案

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

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

直接存储眼值。通过向量数学计算,lookAt 值就是 (eye - n) 的值。up 值是最难的,但如果我正确地记得我的向量数学,我相信 up = (n cross u)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top