opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()

能找到最好的解释来自:http://www.gamedev.net/topic/489879-glpushmatrixglpopmatrix--glloadmatrixf/

原理:

glPushMatrix didn't fail to push onto the stack; it's job is to push a copy of the current matrix onto a stack of matrices. Those matrices on the stack don't interact at all. You only manipulate the current, top-most, matrix at any given time.

Example 1:

   command                 result



glLoadMatrixf(A)       stack = [A]

glPushMatrix()         stack = [A, A]

glLoadMatrixf(B)       stack = [B, A]

glPopMatrix()          stack = [A]


Example 2:

   command                 result



glLoadMatrixf(A)       stack = [A]

glPushMatrix()         stack = [A, A]

glMultMatrixf(B)       stack = [AB, A]

glPopMatrix()          stack = [A]


注意: glTranslate* 等都是实际调用的是glMultMatrixf

 

实例:

看下面的代码:

 

743     glPushMatrix();

744 

745     // tramsform camera

746     matrixView.identity();

747     matrixView.rotate(cameraAngleY, 0, 1, 0);

748     matrixView.rotate(cameraAngleX, 1, 0, 0);

749     matrixView.translate(0, 0, -cameraDistance);

750     //@@ the equivalent code for using OpenGL routine is:

751     //@@ glTranslatef(0, 0, -cameraDistance);

752     //@@ glRotatef(cameraAngleX, 1, 0, 0);   // pitch

753     //@@ glRotatef(cameraAngleY, 0, 1, 0);   // heading

754 

755     // copy view matrix to OpenGL

756     glLoadMatrixf(matrixView.getTranspose());

757 

758     drawGrid();                         // draw XZ-grid with default size

759 

760     // compute model matrix

761     matrixModel.identity();

762     //matrixModel.rotateZ(45);        // rotate 45 degree on Z-axis

763     matrixModel.rotateY(10);        // rotate 45 degree on Y-axis

764     matrixModel.translate(0, 1, 0); // move 2 unit up

765 

766     // compute modelview matrix

767     matrixModelView = matrixView * matrixModel;

768 

769     // copy modelview matrix to OpenGL

770     glLoadMatrixf(matrixModelView.getTranspose());

771 

772     drawAxis();

                              

 

770     glLoadMatrixf(matrixModelView.getTranspose());

 

不能是glMultMatrixf

 

 

 

你可能感兴趣的:(OpenGL)