0

我觉得我了解模型视图矩阵的用法和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用视图旋转和平移修改模型视图矩阵吗?立方体不应该用里面的相机来渲染吗?

4

1 回答 1

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,0) 平移了 (0,0,16),因此这个模型视图矩阵基本上将每个顶点平移了 (0,0,-16)。

清除?

于 2013-03-08T08:26:38.923 回答