通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用
对于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()的作用的更多相关文章
- Spring的IOC原理[通俗解释一下]
Spring的IOC原理[通俗解释一下] 1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图 ...
- java web中Jdbc访问数据库步骤通俗解释(吃饭),与MVC的通俗解释(做饭)
一.Jdbc访问数据库步骤通俗解释(吃饭) 1)加载驱动 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServer”); 2) 与数据库建立连接 Co ...
- JVM分代通俗解释
JVM分代通俗解释 学习了:https://www.cnblogs.com/zgghb/p/6428395.html
- Oracle 0至6级锁的通俗解释及实验案例_ITPUB博客 http://blog.itpub.net/30126024/viewspace-2156232/
Oracle 0至6级锁的通俗解释及实验案例_ITPUB博客 http://blog.itpub.net/30126024/viewspace-2156232/
- [转帖]通俗解释 AWS 云服务每个组件的作用
你有听说过 ContainerCache,ElastiCast 和 QR72 这些 AWS 的新服务吗? 没有就对了,这些都是我编的:) 不过,AWS 有 50 多个服务,从名称也不能看出这些服务是做 ...
- 小波变换(wavelet transform)的通俗解释(一)
小波变换 小波,一个神奇的波,可长可短可胖可瘦(伸缩平移),当去学习小波的时候,第一个首先要做的就是回顾傅立叶变换(又回来了,唉),因为他们都是频率变换的方法,而傅立叶变换是最入门的,也是最先了解的, ...
- 傅里叶变换通俗解释及快速傅里叶变换的python实现
通俗理解傅里叶变换,先看这篇文章傅里叶变换的通俗理解! 接下来便是使用python进行傅里叶FFT-频谱分析: 一.一些关键概念的引入 1.离散傅里叶变换(DFT) 离散傅里叶变换(discrete ...
- 关于WIndows内核自映射方案的通俗解释
在一次操作系统课程上听老师说了这么一个有意思的东西,windows的自映射方案居然达到了把4K的页目录的线性地址“藏”在4M页表里的效果,感觉甚是奇特,于是乎就想着说怎么去算.光会算之后仍旧不满足,我 ...
- [转]Spring的IOC原理[通俗解释一下]
1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...
随机推荐
- git 常用使用命令
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html http://www.open-open.com/lib/view/open14 ...
- 使用Swoole加速Laravel(正式环境中)
1 Laravel的速度瓶颈在哪? 1.1 已有的一些优化方法 1.1.1 laravel官方提供了一些优化laravel的优化方法 php artisan optimize php artisan ...
- Java水印图片处理
今天需要用Java程序给图片加水印,于是在网上找到了一段代码,感觉很好,于是记录了下来,原来的网址给忘了: import java.awt.AlphaComposite; import java.aw ...
- 6.2.3-AbstractBeanFactory
AbstractBeanFactory体系: 这个抽象类中很重要的实现了BeanFactory中得一个方法,doGetBean(); @SuppressWarnings("unchecked ...
- nginx中使用waf防火墙
1.安装依赖 yum install -y readline-devel ncurses-devel 2.安装Lua # .tar.gz # cd lua- # make linux # make i ...
- A norm is a function. 范数是函数。
[范数]范数是函数.A norm is a function.范数(norm),是具有“长度”概念的函数.在线性代数.泛函分析及相关的数学领域,是一个函数,其为向量空间内的所有向量赋予非零的正长度或大 ...
- 【python】-- MySQL简介、安装、操作
MySQL简介.安装.操作 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储 ...
- ABAP xml
[转]Part 1 - Expressiveness of Simple TransformationsSimple Transformations are a SAP proprietary pro ...
- pinpoint本地开发——collector
本地启动collector 启动前准备 启动之前,要先确保本地已经可以正常package,install 必须保证install成功,才能进行后续步骤,无法install或者package参考[pin ...
- 设置某个字段为null
update 表名 set 字段名=null WHERE 条件如下例子 update dwtz set ggid=null WHERE name_of_invested_company='浙江海翔药业 ...
转载▼