0

查看场景的方法之一是使用 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)”而不是“glRotated(roll, 0.0, 0.0, 1.0)”吗?

4

1 回答 1

0

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

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

至于这个功能,我的猜测是它设置了转换来设置它,以便视图与平面对齐而不是与水平对齐并悬挂在中心而不是后面,这就是为什么我们在旋转时使用 + 符号和 - 在平移时添加符号. 请注意,调用不会设置转换,而是更新它。

于 2013-06-26T15:21:19.197 回答