我在显示功能中具有以下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缓冲?