變換
變換主要為縮放、平移和旋轉(zhuǎn)。
我們使用GLM庫(kù)實(shí)現(xiàn)變換。
GLM中,向量類型為glm::vec,其中glm::vec2是二維向量,glm::vec3是三維向量,glm::vec4是四維向量。矩陣類型為glm::mat,其中glm::mat2是2x2矩陣,glm::mat3是3x3矩陣,glm::mat4是4x4矩陣。
注意:從0.9.9版本起,GLM庫(kù)會(huì)將矩陣類型默認(rèn)初始化為零矩陣,而不是單位矩陣。創(chuàng)建單位矩陣的方法為使用glm::mat2/3/4(1.0f)。
縮放
glm::scale()用于創(chuàng)建一個(gè)縮放矩陣。

scale表示在各個(gè)坐標(biāo)軸上的縮放因子。
Case:

平移
glm::translate()用于創(chuàng)建表示平移變換的矩陣。平移(Translation)就是在原始向量的基礎(chǔ)上加上另一個(gè)向量從而獲得一個(gè)在不同位置的新向量的過(guò)程。

Case:

在矩陣和向量相乘時(shí),順序不能交換。
旋轉(zhuǎn)
glm::rotate()用于執(zhí)行旋轉(zhuǎn)變換,創(chuàng)建一個(gè)旋轉(zhuǎn)矩陣。

angle:旋轉(zhuǎn)角度,以弧度為單位。axis:旋轉(zhuǎn)軸,一個(gè)三維向量,表示繞哪個(gè)軸進(jìn)行旋轉(zhuǎn)。
函數(shù)glm::radians()用于將角度轉(zhuǎn)換為弧度:

Case:

應(yīng)用變換
首先需要把矩陣傳遞給著色器。
在著色器中聲明一個(gè)uniform的mat4變量,然后用矩陣乘以位置向量:

接著為uniform變量賦值,調(diào)用函數(shù)glUniformMatrix4fv()。

count:要設(shè)置的矩陣的數(shù)量。通常情況下為1,因?yàn)橹辉O(shè)置一個(gè)矩陣。
transpose:指示矩陣是否應(yīng)該被轉(zhuǎn)置。一般為GL_FALSE。
value:一個(gè)指向矩陣數(shù)據(jù)的指針。我們使用函數(shù)glm::value_ptr()獲得這個(gè)指針。
Case:

這是應(yīng)用變換后得到的效果:
