我在显示功能中有以下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)为中心,因为文档说它应该是:
立方体以建模为中心 坐标原点(...)(source)
如果我使用5.
作为参数运行程序,则立方体会进一步移位:
为什么会这样,我如何将多维数据集放在(0,0,0)附近?
更多信息
如果我切换axis()
和glutWireCube
的顺序并不重要。 axis()
与glPushMatrix()
和glPopMatrix()
的{{1}}周围也无法修复。
解
我修改了gluPerspective
以开始远离相机,现在Z缓冲工作正常,所以很明显立方体放置在原点周围。
答案 0 :(得分:1)
你确定轴不会弄乱视图矩阵吗?
如果在绘制多维数据集后调用它会发生什么?
编辑添加:
实际上......仔细观察图片,看起来它可能 以原点为中心。
立方体的中心似乎与3个轴的交点完全对齐。唯一看起来可疑的是红线不会写在白边上。你有正确的Z缓冲设置吗?
答案 1 :(得分:0)
这可能是正确的,我认为由于这个观点很难确定...但我想这不是从它盯着它看。
要快速排除axis()
未修改模型视图矩阵,请使用矩阵推/弹出来围绕调用:
glPushMatrix();
axis();
glPopMatrix();
要调查的事项/检查:
gluLookAt()
参数来尝试移动“相机”。