我的导师说他们可以互换使用以影响投影矩阵。他认为gluLookAt()
最好使用,因为它“相对简单,因为它能够定义视角”。这是真的?我已经看到使用gluLookAt()
和glFrustum()
的代码示例,我想知道为什么程序员会混合它们。
就像立方体一样,红皮书的例子出现了:
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);
}
答案 0 :(得分:12)
glFrustum
和gluLookAt
都执行简单矩阵乘法。查看手册页以获取这些矩阵的公式:
这两个都可以被glMultMatrix*
电话取代。
最重要的区别是glFrustum
大部分时间用于建立透视投影矩阵(由gluPerspective
内部使用),gluLookAt
是指定模型的便捷方法-view矩阵(通常:实现相机)。
答案 1 :(得分:2)
gluLookAt影响ModelView矩阵,而glFrustum / gluPerspective影响Projection矩阵。这些完全是管道中的两个不同的矩阵。 gluLookAt是一种实用方法,它是glRotate和glTranslate调用的组合,用于将“摄像机”移动到空间中的适当点并将其指向所需位置。然而,glFrustum / gluPerspective是定义透视观察体积的方法。请查看OpenGL红皮书中的更多详细信息。