2013-03-08 51 views
0

我觉得我理解模型视图矩阵和gluLookAt的用法。也就是说,通过声明gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz),可以很容易地设置一种直接查看某个点的方式。gluLookAt和MODELVIEW MATRIX

我的问题是 - 因为gluLookAt postmultiplies当前矩阵,假设你在调用gluLookAt之前加载身份,当前matrixmode是modelview,如果你绘制一个立方体会发生什么?

因此,像这样:

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不应该用视图旋转和翻译修改模型视图矩阵吗?这个立方体是不是应该用相机内部的相机来渲染?

回答

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),因此该模型视图矩阵基本上将每个顶点转换为(0,0,-16)。

清除?

+0

我可以把这解释为,从世界坐标系来看,gluLookAt就是相对于照相机翻译世界的渊源呢?你的情况是 – geogaddi 2013-03-08 14:27:28

+0

。但总的来说,它可以是旋转+翻译。所以gluLookAt创建了一个ModelViewMatrix,它将模型坐标(基本上是世界坐标,即原点(0,0,0),查看dir(0,0,-1))转换(旋转+平移)到视图坐标(坐标系如从相机/眼睛看到的那样,即相机的观看方向上的凸轮位置的原点) – Dirk 2013-03-08 15:30:59

+0

优秀!棘手的东西,但我想我现在明白了。 – geogaddi 2013-03-08 18:24:31