为什么我的glutWireCube没有放在原产地?

时间:2009-12-03 10:43:05

标签: c++ opengl graphics coordinates

我在显示功能中有以下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)为中心,因为文档说它应该是:

  

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

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

glutWireCube(5.)

为什么会这样,我如何将多维数据集放在(0,0,0)附近?

更多信息

如果我切换axis()glutWireCube的顺序并不重要。 axis()glPushMatrix()glPopMatrix()的{​​{1}}周围也无法修复。

我修改了gluPerspective以开始远离相机,现在Z缓冲工作正常,所以很明显立方体放置在原点周围。

2 个答案:

答案 0 :(得分:1)

你确定轴不会弄乱视图矩阵吗?

如果在绘制多维数据集后调用它会发生什么?

编辑添加:

实际上......仔细观察图片,看起来它可能 以原点为中心。

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

答案 1 :(得分:0)

这可能是正确的,我认为由于这个观点很难确定...但我想这不是从它盯着它看。

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

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

要调查的事项/检查:

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