OpenGL自定义查看例行飞行模拟器



查看场景的方法之一是使用gluLookAt或创建自己的自定义查看例程。我在一本书中的飞行模拟器中偶然发现了这种自定义的观看程序。

void pilotView(GLdouble planex, GLdouble planey,
GLdouble planez, GLdouble roll,
GLdouble pitch, GLdouble heading)
{
    glRotated(roll, 0.0, 0.0, 1.0);
    glRotated(pitch, 0.0, 1.0, 0.0);
    glRotated(heading, 1.0, 0.0, 0.0);
    glTranslated(-planex, -planey, -planez);
}

将相机顺时针旋转x度相当于将目标对象逆时针旋转x°。因此,例如,当我们指定"滚动"角度时,我们不应该写"glRotated(-roll,0.0,0.0,1.0)"而不是"glRotate(roll,0.0、0.0、1.0)"吗?

不,我们不应该,在OpenGL中三角形是变换的,而不是相机OpenGL没有相机的概念;因此,当你向变换添加旋转时,你的对象将被这个更新的变换旋转。

gluLookAt只是设置对象的变换,就好像你在看它一样,但变换的仍然是对象。

至于这个函数,我的猜测是,它设置了变换来设置它,使视图与平面对齐,而不是与水平对齐,并挂在中心而不是后面,这就是为什么我们有+符号旋转和-符号平移。请注意,调用不设置转换,而是更新它。

最新更新