鍍金池/ 教程/ Java/ 第八課 縮放變換
第四十四課 GLFW
第十七課 環(huán)境光(Ambient Lighting)
第二十四課 陰影貼圖(二)
第十五課 相機(jī)控制(二)
第四十五課 屏幕空間環(huán)境光遮擋
第十六課 基本的紋理貼圖
第九課 插值
第二十八課 使用 Transform Feedback 創(chuàng)建粒子系統(tǒng)
第三十二課 頂點數(shù)組對象
第十課 索引繪制
第三十一課 基于PN算法的曲面細(xì)分
第四十六課 SSAO 與深度重構(gòu)
第十二課 透視投影
第四十一課 運動模糊
第十四課 相機(jī)控制(一)
第八課 縮放變換
第二十三課 陰影貼圖(一)
第六課 平移變換
第七課 旋轉(zhuǎn)變換
第一課 Create a Window
第十一課 矩陣連乘
第十八課 漫反射光
第四十三課 點光源的多通道陰影映射
第三十五課 延遲渲染(一)
第二十一課 聚光燈
第二十七課 廣告牌和幾何著色器
OpenGL教程翻譯 第三課 First Triangle
第二十課 點光源
第五課 Uniform Variables
第二十二課 使用Assimp加載模型
第三十三課 實例渲染
第三十七課 延遲渲染(三)
第四十二課 基于 PCF 的陰影優(yōu)化
第二十五課 天空盒
第二課 繪制一個點
第三十八課 用 Assimp 導(dǎo)入骨骼動畫
第三十課 曲面細(xì)分
第四十課 模板陰影體
第三十四課 GLFX —— 一個 OpenGL 效果庫
第二十九課 3D 拾取
OpenGL教程翻譯 第四課 Shaders
第十九課 鏡面反射
第三十九課 邊緣檢測
第十三課 相機(jī)空間
第三十六課 延遲渲染(二)
第二十六課 法線紋理

第八課 縮放變換

背景

縮放矩陣也很簡單!它的作用是放大或縮小物體的尺寸!在很多情況下,你可能想對某些對象做這些處理,例如,當(dāng)你想用同一模型產(chǎn)生一些差異(大樹和小樹本質(zhì)上是一樣的),亦或你想將物體的尺寸與其現(xiàn)實世界的尺寸聯(lián)系起來!對于上面的例子,你可能想使點的三個坐標(biāo)分量進(jìn)行相同的縮放。然而,有時候你可能只想縮放兩個坐標(biāo)軸上的分量,導(dǎo)致模型變“厚”或“薄”。

計算變換矩陣是非常復(fù)雜的!我們從單位矩陣開始,記住它與向量相乘后向量不產(chǎn)生的變化原因是,矩陣對角線上的每個 1 依次與向量的每個分量相乘!沒有一個分量會影響其他分量!因此,用其他值代替其中的任何一個 1 將使物體在相應(yīng)軸上發(fā)生變化:這個值大于1的話物體將變大,小于1將縮小。

代碼

World.m[0][0]=sinf(Scale);World.m[0][1]=0.0f;       World.m[0][2]=0.0f;       World.m[0][3]=0.0f;
World.m[1][0]=0.0f;       World.m[1][1]=sinf(Scale);World.m[1][2]=0.0f;       World.m[1][3]=0.0f;
World.m[2][0]=0.0f;       World.m[2][1]=0.0f;       
World.m[2][2]=sinf(Scale);        World.m[2][3]=0.0f;
World.m[3][0]=0.0f;       World.m[3][1]=0.0f;       
World.m[3][2]=0.0f;       World.m[3][3]=1.0f;

相較于上一章,本章僅有的變化是我們根據(jù)上面的描述創(chuàng)建了一個縮放變換矩陣,并用其替換了之前的世界矩陣!正如你看到的,我們用在 -1 到 1 之間的值來對我們繪制的三角形進(jìn)行縮放!在 (0,1] 范圍內(nèi),三角形處于非常小和它原來的大小的范圍內(nèi),而當(dāng)對角線上都是零時它完全消失!在范圍[-1,0)內(nèi)看起來一樣而只是發(fā)生翻轉(zhuǎn),因為對角線上的縮放值實際上改變了坐標(biāo)的符號!

操作結(jié)果

http://wiki.jikexueyuan.com/project/modern-opengl-tutorial/images\picture081.jpg" alt="" />