我的导师说他们可以互换使用来影响投影矩阵。他认为最好使用gluLookAt()
,因为它“由于其定义视角的能力而相对简单”。这是真的?我见过使用gluLookAt()
和glFrustum()
的代码示例,我想知道为什么程序员将它们混合使用。gluLookAt()和glFrustum()有区别吗?
就像在红皮书的cube.c例子显示:
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
**//why isn't this a call to glFrustum?**
glScalef(1.0, 2.0, 1.0);
glutWireCube(1.0);
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
//why isn't this a call a call to gluLookAt()?
glMatrixMode(GL_MODELVIEW);
}
哼。 gluLookAt和glFrustum设置了非常不同的矩阵(gluLookAt通常不适用于投影矩阵)。你确定你的老师不是在说gluPerspective而不是gluLookAt吗? – Bahbar 2010-11-22 09:51:34
主要区别在于glFrustum是核心OpenGL库的一部分,gluLookAt是一个帮助程序库的一部分,它使用一组不同的参数并调用glFrustum。 OpenGL使用哪一个并没有什么不同,选择是编码偏好之一。 – AndrewS 2013-09-20 18:13:48