我是OpenGL的新手,我对代码中的所有随机函数都有点不知所措.他们工作,我知道何时使用它们,但我不知道为什么我需要它们或他们实际做什么.
我知道glLoadIdentity()用当前矩阵替换当前矩阵,但究竟是做什么的呢?如果每个程序都需要它,除非另有说明,为什么默认情况下不是单位矩阵?除非我知道他们做了什么,否则我不喜欢在我的代码中使用函数.我应该注意到,我专门为丰富的2D客户端使用OpenGL,所以请原谅我的无知,如果这对于3D非常明显.
关于glMatrixMode(GL_PROJECTION)VS 也有点困惑glMatrixMode(GL_MODELVIEW).
我所遵循的Android大多数OpenGL ES教程都有这样的onSurfaceChanged()函数:
public void onSurfaceChanged( GL10 gl, int width, int height ) {
gl.glViewport( 0, 0, width, height );
gl.glMatrixMode( GL10.GL_PROJECTION );
gl.glLoadIdentity();
GLU.gluPerspective( gl, 45.0f, ( ( float )width / ( float )height ), 0.1f, 100.0f );
gl.glMatrixMode( GL10.GL_MODELVIEW );
gl.glLoadIdentity();
}
Run Code Online (Sandbox Code Playgroud)
但是,这里的分组是什么?必须在glViewport之后调用glMatrixMode()吗?并且必须在glMatrixMode()之后立即调用glLoadIdentity()吗?
我之前一直在编写"完整"的OpengGL,在我的旧代码中我首先调用glMatrixMode(),然后调用gluPerspective和glLoadIdentity().好像首先设置了什么矩阵应该用于gluPerspective()和最后设置glIdentity()来完成它.
调用glMatrixMode(),glIdentity()和gluPerspective()的正确顺序是什么?为什么?OpenGL和OpenGL ES之间是否存在设置glMatrixMode()的区别?