对于glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用虽然网上有很多的帖子,而且都试图解释得很详细,但是效果总是越说越黑,模棱两可的。今天我就简单滴说几句,言简意赅,希望大家随便看看之余能把这些个问题搞清楚了。glLoadIdentity()的作用就是把矩阵堆栈中的在栈顶的那个矩阵置为单位矩阵,好让之前的任何变换都不影响后面的变化。打个比喻,glLoadIdentity()的作用就是把原来做好的橡皮泥模型重新又变成了橡皮泥,这样你前面做的模型的样子就不会影响后面的模型,后面你怎么捏它就怎么像,比如glLoadIdentity()之后你调用了平移函数glTranslatef(1.0, 0.0, 0.0),那么堆栈的栈顶首先是4×4的单位矩阵,然后因为glTranslatef便成了(1.0, 0.0, 0.0,1.0)(注意坐标在OpenGL中的存储都是四位数的),以后的变换就将基于这个坐标!

glPushMatrix(),glPopMatrix()这两个函数是搭配使用的,就用红宝书中的例子给大家解释一下glPushMatrix()的作用是把矩阵压入栈中保存起来,留着以后再用,就好象把子弹压入枪膛一样。但这个压子弹不是简单滴丫,它是把和弹夹的最顶的那颗子弹一模一样的子弹压入弹夹。假如说弹夹的子弹从下往上装的子弹各不相同(大家不必纠结于此,现实生活中是不是这样并不重要),依次为A1型子弹,B2型子弹,C3型子弹glPushMatrix()的作用就是现时打造一颗C3型子弹并把它压入弹夹,于是弹夹最顶端的两颗子弹是一样的,都是C3型的子弹,随后所作的平移变化旋转变换等都是在最上面那颗C3子弹上所作的,并不影响下面的那颗C3子弹,直到glPopMatrix()把最上面的那颗C3子弹发射出去,让下面的那颗C3子弹成为弹夹最顶上的那颗。

glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用相关推荐

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

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

  2. glPushMatrix()/glPopMatrix() glLoadMatrixf()

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

  3. 小白学opengl之glpushmatrix()与glpopmatrix()的作用

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

  4. glPushMatrix和glPopMatrix的作用

    glPushMatrix.glPopMatrix操作其实就相当于栈里的入栈和出栈. 许多人不明白的可能是入的是什么,出的又是什么. 例如你当前的坐标系原点在你电脑屏幕的左上方.现在你调用glPushM ...

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

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

  6. 《高效学习OpenGL》之 操作矩阵堆栈 glPushMatrix(),glPopMatrix()

    glPushMatrix(); //把当前堆栈中的所有矩阵都下压一级.当前矩阵堆栈是由glMatrixMode()指定的. glPopMatrix(); //把堆栈顶部的那个矩阵弹出堆栈,销毁被弹出的 ...

  7. opengl 知识点1

    1>:glFlush: 就是强制刷新,要知道OPENGL是使用一条渲染管线线性处理命令的,一般情况下,我们提交给OPENGL的指令并不是马上送到驱动程序里执行的,而是放到一个缓冲区里面,等这个缓 ...

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

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

  9. OpenGL编程指南4:双缓冲实现运行

    1.前言 绘制一个旋转的方块,主要为了说明glutSwapBuffers()函数的用法. 同时也为了学习如何使用GLUT控制输入设备,并打开或关闭空闲处理函数. 2.OpenGL编程及程序剖析 /** ...

最新文章

  1. 【ACM】杭电OJ 1181
  2. python搭建环境是什么_python虚拟环境是什么?python虚拟环境的介绍
  3. 必考题:子类继承父类,初始化以及方法调用顺序
  4. webpack.config.js====插件purifycss-webpack,提炼css文件
  5. Linux上如何查看物理CPU个数,核数,线程数
  6. Java Web学习(七)HttpServletResponse(客户端响应)
  7. eclipse_中的注释_快捷键
  8. [css] 当拿到一个新的项目,让你对这个项目的css做下架构设计,你该如何下手?
  9. java xml导出_java 导出xml文件的四种方式
  10. java集合类分析-hashset
  11. weex npm 报错 cb() never called!
  12. 海康服务器协议,国标流媒体服务器GB28181协议和海康设备的交互过程记录
  13. Ubuntu 16.04安装crossover17 并安装 TIM
  14. vsftpd 操作手册 - 完整版
  15. Jasperreport_6.18的吐血记录三之简易交叉表 + 页面预览和导出
  16. C# dataGridView中插入excel表格
  17. 如何用ssh隧道绕过防火墙
  18. VHDL实现USART
  19. python飞机大战实验报告心得_Python学习之路「第七篇」-Pygame之飞机大战1
  20. Labview | VDM与VAS2018下载

热门文章

  1. 日常应用服务器CPU关注哪些指标
  2. 关于12306火车票销售的简单思考
  3. Xamarin.iOS启动图片过渡及广告展示
  4. 初学者基础教学篇一——握拍
  5. 首次公开!阿里技术团队编写的“大厂面试参考指南”v1.0版本
  6. java 路径中 /与\\ linux系统的路径
  7. 注解mysql事物管理_Spring事务管理-注解版
  8. 汇众教育、暴风影音虚拟现实(VR)来袭
  9. c语言自动刷票代码,简单刷票系统 c语言实现
  10. 6. POD 配置1