我觉得我理解模型视图矩阵和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
不应该修改模型视图矩阵与视图旋转和翻译?难道这个立方体不应该被渲染成相机在里面吗?
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,0,1,0)生成一个modeView矩阵,将这些坐标转换为相机坐标。
由于相机位置只是由(0,0,16)转换为默认相机位置(0,0,0),因此这个modelView矩阵基本上将每个顶点转换为(0,0,-16)。
清楚了吗?