0

我在显示功能中有以下 OpenGL 代码:

glLoadIdentity();
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);
// called as: gluLookAt(20, 5, 5, -20, 5, 5, 0, 1, 0);

axis();
glutWireCube (1.);

glFlush ();

axis()绘制从 (0,0,0) 到 (10,0,0)、(0,10,0) 和 (0,10,0) 的线,加上从 (1,0,0) 到 (1) 的线, 3,0)。

我的重塑功能包含以下内容:

glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(45.0, (GLsizei) w / (GLsizei) h, 1.0, 100.0);
glMatrixMode (GL_MODELVIEW);

此图显示了以1.为参数运行程序的结果glutWireCube

glutWireCube(1.)

如您所见,立方体并没有像文档所说的那样以 (0,0,0) 为中心:

立方体以建模坐标原点(...)为中心(源)

如果我使用5.作为参数运行程序,立方体将被进一步移动:

glutWireCube(5.)

为什么会这样,我如何将立方体放置在 (0,0,0) 周围?

更多的信息

axis()如果我切换and的顺序并不重要glutWireCube。周围也axis()没有修复它。glPushMatrix()glPopMatrix()

解决方案

我进行了修改gluPerspective,开始看离相机更远的地方,现在 Z 缓冲工作正常,因此很明显立方体放置在原点周围。

4

2 回答 2

1

您确定轴不会与视图矩阵混淆吗?

如果在绘制立方体后调用它会发生什么?

编辑添加:

其实... 仔细看图片,它看起来可能原点为中心。

立方体的中心似乎与 3 个轴的交点完全对齐。唯一看起来可疑的是红线没有写在白边上。您是否正确设置了 Z 缓冲?

于 2009-12-03T11:08:22.250 回答
0

也许是对的,我认为由于视角的原因很难确定......但我想这不是因为更多地盯着它。

要快速排除axis()没有修改模型视图矩阵,请使用矩阵推送/弹出围绕调用:

glPushMatrix();
axis();
glPopMatrix();

要调查/检查的事项:

  1. 这是整个窗口吗?视图在一个角落里似乎很奇怪。
  2. 如果您在渲染之前添加增加的旋转是否有帮助?通过提供更多线索,可以更容易地确定视角。
  3. gluLookAt()您还可以尝试通过将参数更改为动态来移动“相机” 。
于 2009-12-03T11:12:11.447 回答