• OpenGL中glMatrixMode的使用,以及glPushMatrix和glPopMatrix的原理


    一、glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理。

    二保存状态矩阵

    glPushMatrix、glPopMatrix操作事实上就相当于栈里的入栈和出栈。
      很多人不明确的可能是入的是什么,出的又是什么。

    比如你当前的坐标系原点在你电脑屏幕的左上方。如今你调用glPushMatrix,然后再调用一堆平移、旋转代码等等,然后再绘图。那些平移和旋转都是基于左上角为原点进行变化的。并且都会改变坐标的位置,经过了这些变化后,你的坐标肯定不再左上角了。
      那假设想恢复怎么办呢?这时就调用glPopMatrix从栈里取出一个“状态”了,这个状态就是你调用glPushMatrix之前的那个状态。就如非常多opengl的书上所讲:调用glPushMatrix事实上就是把当前状态做一个副本放入堆栈之中。

    当你做了一些移动或旋转等变换后,使用glPushMatrix();
    OpenGL 会把这个变换后的位置和角度保存起来。
    然后你再随便做第二次移动或旋转变换,再用glPopMatrix();
    OpenGL 就把刚刚保存的那个位置和角度恢复。

    比方:
    glLoadIdentity();
    glTranslatef(1,0,0);//向右移动(1,0,0)
    glPushMatrix();//保存当前位置
    glTranslatef(0,1,0);//如今是(1,1,0)了
    glPopMatrix();//这样,如今又回到(1,0,0)了



  • 相关阅读:
    HTML初步学习7
    HTML初步学习6
    HTML初步学习5
    HTML初步学习4
    poj3449Geometric Shapes
    poj2074Line of Sight(直线相交)
    2014 Multi-University Training Contest 4
    poj3347Kadj Squares
    poj1556The Doors
    poj3608Bridge Across Islands(凸包间最小距离)
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/5967573.html
Copyright © 2020-2023  润新知