查看场景的方法之一是使用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)”?
答案 0 :(得分:0)
不,我们不应该,在OpenGL三角形中进行转换而不是相机OpenGL没有相机的概念;因此,当您向变换添加旋转时,您的对象将通过此更新的变换进行旋转。
gluLookAt只是设置对象的转换,就像你正在看它一样,但仍然被转换的是对象。
至于这个函数,我的猜测是它设置变换来设置它,使视图与平面对齐而不是与水平对齐并挂在中心而不是后面这就是为什么我们在旋转上有+符号 - 签署翻译。请注意,调用不会设置转换,而是更新它。