本人最近开始学openGL,但碰到不少问题。现有关于“当前矩阵”的问题请求您的帮助。   如程序:
    void display(void)
      {glClear(GLUT_COLOR_BUFFUER_BIT);
       glColor(1,1,1);
       glLoadIndentity();//用单位矩阵代替当前矩阵
       draw_triangle();//画三角形
      
       ......
       glLoadIndentity();//用单位矩阵代替当前矩阵
                       //在画完一个三角形后和启动画另一个三角形前
                         又要用到glLoadIndentity()
问题:我想请教在两次用glLoadIndentity()前的“当前矩阵”
是什么,即用用单位矩阵代替的矩阵是什么?
  非常感谢!
       }

解决方案 »

  1.   

    opengl矩阵有如下几种
    modelview 模型观察矩阵,用来表示物体的位置变化和观察点的改变
    projection 投影矩阵描述如何将一个物体投影到平面上
    texture 纹理坐标矩阵,用于描述纹理坐标的动态变化
    color 颜色矩阵,用于对颜色的操作
    默认情况下是modelview矩阵,你的代码很可能表示的就是modelview矩阵
      

  2.   

    我们知道在Opengl中对矩阵的操作是有累加作用的,比如,你先把坐标系沿X轴右移10,再沿Y轴正移10,这两个动作会产生累加作用。举个例子,不知你有没有用过AUTOCAD, 在那里有一个世界坐标和用户坐标,用户坐标可以移动,以方便你在不同的地方画图,而世界坐标不可以移动。回到OPENGL,当你画了许多图形,同时也移动了多次坐标系后(这个可以看成用户坐标),你又想在原点(世界坐标的原点)画东西了,那原点在在哪里???你把原来的转换再倒退着来吗?????不用了   用glLoadIndentity();//就可以了。当前矩阵就是你经过一系列变化后的用户坐标,用单位矩阵代替当前矩阵就是使自己对坐标的变化无效,一切从头开始。
    刚学难免有一些不懂,我也一样在这里绕了半天,不过要坚定信心。
      

  3.   

    The glLoadIdentity function replaces the current matrix with the identity matrix.void glLoadIdentity(void);
     
    Res
    The glLoadIdentity function replaces the current matrix with the identity matrix. It is semantically equivalent to calling glLoadMatrix with the identity matrix
    1 0 0 0
    0 1 0 0
    0 0 1 0
    0 0 0 1
    but in some cases it is more efficient.The following functions retrieve information related to glLoadIdentity:glGet with argument GL_MATRIX_MODEglGet with argument GL_MODELVIEW_MATRIXglGet with argument GL_PROJECTION_MATRIXglGet with argument GL_TEXTURE_MATRIXError Codes
    The following are the error codes generated and their conditions.Error Code
    GL_INVALID_OPERATIONCondition
    glLoadIdentity was called between a call to glBegin and the corresponding call to glEnd. 以上摘自MSDN,不知道对楼主有没有什么帮助。
      

  4.   

    谢谢大家的帮助,你们的解答使我对当前矩阵有了较深的认识,尤其感谢csdnzhu的解答。
    我现在在要做分机流场可视化的课题,工具用vc6和openGL..cn,希望大家能多多帮助