glPushMatrix
来源:互联网 发布:淘宝申诉电话 编辑:程序博客网 时间:2024/05/21 10:23
glPushMatrix是一个计算机函数,功能是将当前矩阵堆栈推送,通过一个,复制当前矩阵。 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的。用法是void WINAPI glPushMatrix(void)。
glPushMatrix 函数将当前矩阵堆栈推送,通过一个,复制当前矩阵。 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的。
- 原理讲解
终于明白为什么使用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()就是“返回自己原来所在地”。
阅读全文
0 0
- glPushMatrix
- glPushMatrix()
- glPushMatrix
- glPushMatrix();glPopMatrix()
- glPushMatrix glPopMatrix
- opengl glPushMatrix()
- glPushMatrix()的使用
- glPushMatrix()作用是什么
- glPushMatrix()和glPopMatrix()
- glPushMatrix() glPopMatrix() GL_DEPTH_TEST
- glPushMatrix()和glPopmatirx()
- glPushMatrix()和glPopMatrix()
- 远离glPushMatrix glLoadIdentity glPopMatrix
- glPushMatrix 与 glPopMatrix
- glPushMatrix()和glPopmatirx()
- 为什么调用glPushMatrix()和glPopMatrix()
- 为什么调用glPushMatrix()和glPopMatrix()
- 为什么调用glPushMatrix()和glPopMatrix()
- Binder通信机制
- 你的pod不工作了吗?
- 【找规律 && 快速幂 && 概率论】LightOJ
- 使用LVS实现负载均衡原理及安装配置详解
- 奥威Power-BI数据可视化分析:年级考试成绩分析
- glPushMatrix
- 线上tomcat服务器假死排查
- 服务器性能优化
- 笔者的心血Android学习路线,不好不要吐槽...分享就好
- 如何更加安全、高效地利用开源项目?
- C#设定只能开一个实例
- 各种典型反爬虫套路
- IntelliJ IDEA 设置代码提示或自动补全的快捷键
- Tarjan 0.2