gluLookAt()和glFrustum()之间有区别吗?

时间:2010-11-22 00:09:31

标签: opengl

我的导师说他们可以互换使用以影响投影矩阵。他认为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);
}

2 个答案:

答案 0 :(得分:12)

glFrustumgluLookAt都执行简单矩阵乘法。查看手册页以获取这些矩阵的公式:

gluLookAt

glFrustum

这两个都可以被glMultMatrix*电话取代。

最重要的区别是glFrustum大部分时间用于建立透视投影矩阵(由gluPerspective内部使用),gluLookAt是指定模型的便捷方法-view矩阵(通常:实现相机)。

答案 1 :(得分:2)

gluLookAt影响ModelView矩阵,而glFrustum / gluPerspective影响Projection矩阵。这些完全是管道中的两个不同的矩阵。 gluLookAt是一种实用方法,它是glRotate和glTranslate调用的组合,用于将“摄像机”移动到空间中的适当点并将其指向所需位置。然而,glFrustum / gluPerspective是定义透视观察体积的方法。请查看OpenGL红皮书中的更多详细信息。