我在显示功能中有以下 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
:
如您所见,立方体并没有像文档所说的那样以 (0,0,0) 为中心:
立方体以建模坐标原点(...)为中心(源)
如果我使用5.
作为参数运行程序,立方体将被进一步移动:
为什么会这样,我如何将立方体放置在 (0,0,0) 周围?
更多的信息
axis()
如果我切换and的顺序并不重要glutWireCube
。周围也axis()
没有修复它。glPushMatrix()
glPopMatrix()
解决方案
我进行了修改gluPerspective
,开始看离相机更远的地方,现在 Z 缓冲工作正常,因此很明显立方体放置在原点周围。