我在显示功能中具有以下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)到(0,10,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的参数运行程序的结果:



如您所见,多维数据集不在文档(0,0,0)的中心,如文档所述:


  多维数据集以建模为中心
  坐标原点(...)(source)


如果我以5.作为参数运行程序,则多维数据集会进一步移位:



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

更多信息

是否切换axis()glutWireCube的顺序都没关系。用axis()glPushMatrix()包围glPopMatrix()也不能解决问题。



我修改了gluPerspective以开始将目光从相机移开,现在Z缓冲正常工作了,因此很明显,立方体位于原点周围。

最佳答案

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

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

编辑添加:

实际上...仔细看图片,看起来好像是居中于原点。

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

10-06 05:03
查看更多