到目前为止,虽然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
答案 0 :(得分:5)
来自docs:
gluPerspective生成的矩阵乘以当前矩阵,就像用生成的矩阵调用glMultMatrix一样。要将透视矩阵加载到当前矩阵堆栈上,请在调用gluPerspective之前调用glLoadIdentity。
您认为gluPerspective
覆盖glOrtho
不正确。
答案 1 :(得分:0)
几乎所有操纵变换的调用都是相对于当前矩阵应用的。 glLoad*
调用(glLoadIdentity
,glLoadMatrix
)例外,它取代了当前的矩阵。
gluPerspective
man page专门记录了这一点:
gluPerspective生成的矩阵乘以当前矩阵,就像用生成的矩阵调用glMultMatrix一样。要将透视矩阵加载到当前矩阵堆栈上,请在调用gluPerspective之前调用glLoadIdentity。
在您的代码中,gluLookAt
应该是模型视图矩阵的一部分。您需要在它之前:
glMatrixMode(GL_MODELVIEW);
gluLookAt(...);