gluLookAt和MODELVIEW MATRIX

时间:2013-03-08 07:53:08

标签: opengl glulookat

我觉得我理解了modelview矩阵和gluLookAt的用法。也就是说,通过声明gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz),可以轻松地设置直接查看某个点的方法。

我的问题是 - 因为gluLookAt后置当前矩阵,假设你在调用gluLookAt之前加载了身份,并且当前的矩阵模式是模型视图,如果你绘制一个立方体会发生什么?

这样的事情:

glMatrixMode(GL_PERSPECTIVE);
glLoadIdentity();
glFrustum(-5, 5, -5, 5, 15, 150);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, 16, 0, 0, 0, 0, 1, 0);
glutSolidCube(1.0);

在世界坐标中渲染的立方体在哪里?出于某种原因,在这种情况下,它在世界原点呈现,您可以在视口中看到它 - 但为什么呢?不应该gluLookAt使用视图旋转和翻译修改模型视图矩阵吗?是否应该使用相机内部渲染立方体?

1 个答案:

答案 0 :(得分:2)

glutSolidCube(1.0)绘制一个边长为1.0的立方体,该立方体以世界原点为中心。

所以顶点是:

  • ( - 0.5,-0.5,-0.5)
  • ( - 0.5,+ 0.5,-0.5)
  • ( - 0.5,+ 0.5,+ 0.5)
  • ( - 0.5,-0.5,+ 0.5)
  • (+ 0.5,-0.5,-0.5)
  • (+ 0.5,+ 0.5,-0.5)
  • (+ 0.5,+ 0.5,+ 0.5)
  • (+ 0.5,-0.5,+ 0.5)

现在gluLookAt(0,0,16,0,0,0,0,1,0)生成一个modeView矩阵,将这些坐标转换为相机坐标。

由于相机位置刚刚(0,0,16)转换为默认相机位置(0,0,0),因此该modelView矩阵基本上将每个顶点转换为(0,0,-16)。

清除?