通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (
原文地址如下:
http://blog.sina.com.cn/s/blog_70c3d9ed010122bp.html#cmt_56C57036-7F000001-15BB06C27-948-8A0
對于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()的作用 (的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++工作笔记-getter/sette
- 下一篇: Qt工作笔记-3D效果唤出QWidget