glOrtho影响gluPerspective

时间:2014-09-07 16:49:10

标签: opengl opengl-es

到目前为止,虽然glOrtho设置了一个正面相机,而gluPerspective设置了一个透视相机。

但如果我在gluPerspective之前有一个glOrtho调用,那么这也会影响透视摄像机的位置。

例如:

 gl.glMatrixMode(GL10.GL_PROJECTION);
 gl.glOrthof(0, 1, 0, 2, -100, 100);
 GLU.gluPerspective(gl, 90, 1, 0.1f, 100.0f);

 gl.glMatrixMode(GL10.GL_MODELVIEW);
 GLU.gluLookAt(gl,  0f, 0f, -5.0f, 
                        0f, 0f, 0.0f, 
                        0.0f, 1.0f, 0.0f);

这会将我的对象放在右下角。但我希望gluPerspective能够覆盖glOrtho

2 个答案:

答案 0 :(得分:5)

来自docs

  

gluPerspective生成的矩阵乘以当前矩阵,就像用生成的矩阵调用glMultMatrix一样。要将透视矩阵加载到当前矩阵堆栈上,请在调用gluPerspective之前调用glLoadIdentity。

您认为gluPerspective覆盖glOrtho不正确。

答案 1 :(得分:0)

几乎所有操纵变换的调用都是相对于当前矩阵应用的。 glLoad*调用(glLoadIdentityglLoadMatrix)例外,它取代了当前的矩阵。

gluPerspective man page专门记录了这一点:

  

gluPerspective生成的矩阵乘以当前矩阵,就像用生成的矩阵调用glMultMatrix一样。要将透视矩阵加载到当前矩阵堆栈上,请在调用gluPerspective之前调用glLoadIdentity。

在您的代码中,gluLookAt应该是模型视图矩阵的一部分。您需要在它之前:

glMatrixMode(GL_MODELVIEW);
gluLookAt(...);