glPushMatrix是一个计算机函数,功能是将当前矩阵堆栈推送,通过一个,复制当前矩阵。 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的。用法是void WINAPI glPushMatrix(void)。

glPushMatrix 函数将当前矩阵堆栈推送,通过一个,复制当前矩阵。 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的。
  1. 原理讲解
终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了。将本次需要执行的缩放、平移等操作放在glPushMatrix和glPopMatrix之间。glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响。使本次变换是以世界坐标系的原点为参考点进行。下面对上述结论做进一步的解释:
1)OpenGL中的modelview矩阵变换是一个马尔科夫过程:上一次的变换结果对本次变换有影响,上次modelview变换后物体在世界坐标系下的位置是本次modelview变换的起点。默认时本次变换和上次变换不独立。
2)OpenGL物体建模实际上是分两步走的。第一步,在世界坐标系的原点位置绘制出该物体;第二步,通过modelview变换矩阵对世界坐标系原点处的物体进行仿射变换,将该物体移动到世界坐标系的目标位置处。
3)将modelview变换放在glPushMatrix和glPopMatrix之间可以使本次变换和上次变换独立。
4)凡是使用glPushMatrix()和glPopMatrix()的程序一般可以判定是采用世界坐标系建模。既世界坐标系固定,modelview矩阵移动物体。
一般说来,矩阵堆栈常用于构造具有继承性的模型,即由一些简单目标构成的复杂模型。例如,一辆自行车就是由两个轮子、一个三角架及其它一些零部件构成的。它的继承性表现在当自行车往前走时,首先是前轮旋转,然后整个车身向前平移,接着是后轮旋转,然后整个车身向前平移,如此进行下去,这样自行车就往前走了。将上述模型的构造过程放在glPushMatrix和glPopMatrix之间,则本次汽车在世界坐标系中的位置不是基于上一次汽车的位置而给出的(以前一次的位置为参考),而是直接给出的以世界下的坐标(以世界坐标系的原点为参考)。整个过程是符合人的思维过程的,由于每次建模都是以单位阵为变换起点,故便于采用统一的实现方式进行处理。
矩阵堆栈对复杂模型运动过程中的多个变换操作之间的联系与独立十分有利。因为所有矩阵操作函数如glLoadMatrix()、glMultMatrix()、glLoadIdentity()等只处理当前矩阵或堆栈顶部矩阵,这样堆栈中下面的其它矩阵就不受影响。堆栈操作函数有以下两个:
void glPushMatrix(void);
void glPopMatrix(void);
第一个函数表示将所有矩阵依次压入堆栈中,顶部矩阵是第二个矩阵的备份;压入的矩阵数不能太多,否则出错。第二个函数表示弹出堆栈顶部的矩阵,令原第二个矩阵成为顶部矩阵,接受当前操作,故原顶部矩阵被破坏;当堆栈中仅存一个矩阵时,不能进行弹出操作,否则出错。由此看出,矩阵堆栈操作与压入矩阵的顺序刚好相反,编程时要特别注意矩阵操作的顺序。为了更好地理解这两个函数,我们可以形象地认为glPushMatrix()就是“记住自己在哪”,glPopMatrix()就是“返回自己原来所在地”。

glPushMatrix相关推荐

  1. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (

    原文地址如下: http://blog.sina.com.cn/s/blog_70c3d9ed010122bp.html#cmt_56C57036-7F000001-15BB06C27-948-8A0 ...

  2. glPushMatrix()和glPopMatrix()以及glLoadIdentity()的理解

    glLoadIdentity()重置当前矩阵,为什么要PushMatrix(),然后PopMatrix(),因为是由于是对矩阵进行变换,这样操作不至 于影响后面的矩阵操作. Translate()每一 ...

  3. glPushMatrix/glPopMatrix简介及示例(在不同位置绘制图形)

    glPushMatrix()函数 glPushMatrix()函数是OpenGL中的一个栈操作函数,用于将当前矩阵压入栈中. 在OpenGL中,矩阵是用来对三维坐标进行变换的工具.例如,使用glTra ...

  4. glPushMatrix()/glPopMatrix() glLoadMatrixf()

    glPushMatrix()/glPopMatrix() & glLoadMatrixf() 这三个函数你搞清楚了没? 头大啊.. http://www.gamedev.net/communi ...

  5. 【已解决】DQN报错:NameError: name ‘glPushMatrix‘ is not defined

    1.问题 pycharm在运行DQN平衡杆代码时报错:NameError: name 'glPushMatrix' is not defined. 画面只出现一个白色背景. 2.分析 pyglet版本 ...

  6. OpenGL的glPushMatrix和glPopMatrix矩阵栈顶操作函数详解

    OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的.opengl中的变换一般包括视图变换.模型变换.投影变换等,在每次变换后,opengl将会呈 ...

  7. OpenGL的glPushMatrix和glPopMatrix矩阵栈顶操作函数

    在之前的博客中,我就说过后面会详细讲解这两个函数.今天让我们来认识下它们(glPushMatrix和glPopMatrix函数). OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这 ...

  8. OpenGL中glPushMatrix和glPopMatrix的原理

    glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...

  9. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作

    对于glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用虽然网上有很多的帖子,而且都试图解释得很详细,但是效果总是越说越黑,模棱两可的.今天我就简单滴说几句 ...

  10. glPushMatrix()和glPopmatirx()

    OpenGL有三个矩阵堆栈,分别是GL_MODELVIEW(模型视图矩阵堆栈).GL_PROJECTION(投影矩阵堆栈).GL_TEXTURE(纹理矩阵堆栈),用法和普通堆栈一样: 这里我们只讲模型 ...

最新文章

  1. pytorch nn.LSTM()参数详解
  2. 聊一个不常见的面试题:为什么数据库连接池不采用 IO 多路复用?
  3. Nat. Biotechnol.扩增子测序革命—用16S及18S rRNA全长进行微生物多样性研究
  4. sklearn svm
  5. 乐高(LEGO)在线购物店面剖析
  6. 汇编语言(十一)之统计非数字字符个数
  7. LeetCode 437. 路径总和 III(双重递归)
  8. ASA8.4端口映射篇
  9. 【纪念】NOIP2018前夕——一些想说的话
  10. spring-aop源码分析
  11. ABP框架 - 授权
  12. CIO:IT优化刻不容缓
  13. Dependency Walker
  14. x5webview TbsReaderView首次加载失败
  15. 如何使用qq截图工具,却能保证系统不会随意放大
  16. 我的世界服务器物品栏快捷菜单,我的世界:教你几个实用的快捷键小技巧,萌新可能对此一无所知!...
  17. 【转】 道格拉斯-普克 算法 (可用于手写获取特征点)
  18. 相对传统桌面设计器,在线报表设计器价值何在?
  19. 【MQTT从入门到提高系列 | 06】MQTT3.1.1之SUBSCRIBE订阅工作流
  20. matlab语音合成技术,matlab语音合成详细版

热门文章

  1. 【图论算法】 最短路,次短路,k短路总结
  2. 工控机linux安装win7,4网口工控机安装ProxmoxVE+LEDE+CentOS7
  3. 5个emoji表情包,让你秒懂哈希函数!
  4. python运算符中用来计算集合并集的是什么_问题:表达式 sum(range(1,10))的值为_____________...
  5. 运维人员打字耍不要快_Linux运维人员应该知道的系统故障排查及修复方法
  6. python讲师金角大王_(学习)金角大王python练习题
  7. Kubernetes学习笔记
  8. CSS中标题限制在两行
  9. 当iPhone用上联发科,你还会爱上它吗?
  10. 手把手教你用Python批量实现文件夹下所有Excel文件的第二张表合并