zoukankan      html  css  js  c++  java
  • 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)了



  • 相关阅读:
    leetcode 390. 消除游戏
    C12Test5 record
    IELTS Writing Task 1: two-chart answer
    rails work
    java 依赖注入
    Java1.7已经舍弃substr了
    在存储过程创建临时表,插入字段,更新字段
    在存储过程里创建临时表,往表中直接插入数据
    存储过程里分页的例子
    验证方法、自己写一个日期控件、
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/5967573.html
Copyright © 2011-2022 走看看