OpenGL ES學(xué)習(xí)筆記(二):圖形數(shù)學(xué)基礎(chǔ)

1.矩陣

矩陣其實就是個二維數(shù)組亿汞,如下圖熏迹,是個 3×3 矩陣哈肖,它有三行和三列受啥。

1. 矩陣

頂點和向量實際由一個1×3的矩陣表示:

2. 1x3矩陣

笛卡爾坐標(biāo)系的三軸正向歸一向量可以用以下矩陣表示:


x軸

y軸

z軸

三軸可合成如下3x3矩陣(先x然后是y再后是z)


3. 三軸矩陣
矩陣相乘

矩陣相乘的計算規(guī)則:以結(jié)果矩陣左上角第一個數(shù)字為例,是第一個矩陣第一行的每個數(shù)字炼幔,各自乘以第二個矩陣第一列對應(yīng)位置的數(shù)字秋茫,然后將乘積相加),得到結(jié)果矩陣左上角的那個值乃秀。


4. 矩陣相乘

也就是說肛著,結(jié)果矩陣第m行與第n列交叉位置的那個值,等于第一個矩陣第m行與第二個矩陣第n列环形,對應(yīng)位置的每個值的乘積之和。

轉(zhuǎn)置矩陣

把矩陣A的行換成相應(yīng)的列衙傀,得到的新矩陣稱為A的轉(zhuǎn)置矩陣抬吟,記作AT
A

5. 矩陣的轉(zhuǎn)置

6. 矩陣轉(zhuǎn)置的運算性質(zhì)

一個矩陣和它的轉(zhuǎn)置矩陣可以這么直觀地表示出來:

7. 矩陣及其轉(zhuǎn)置矩陣
逆矩陣

設(shè)A是數(shù)域上的一個n階方陣统抬,若在相同數(shù)域上存在另一個n階矩陣B火本,使得: AB=BA=E危队。 則我們稱BA的逆矩陣,而A則被稱為可逆矩陣钙畔。

初等變換法求逆矩陣:將一n階可逆矩陣A和n階單位矩陣I寫成一個nX2n的矩陣

對B施行初等行變換茫陆,即對A與I進行完全相同的若干初等行變換,目標(biāo)是把A化為單位矩陣擎析。當(dāng)A化為單位矩陣I的同時簿盅,B的右一半矩陣同時化為了A。

8. 初等變換法求逆矩陣

2.四元數(shù)

復(fù)數(shù)是由實數(shù)加上虛數(shù)單位i組成揍魂,其中


相似地桨醋,四元數(shù)都是由實數(shù)加上三個元素i,j,k組成,而且它們有如下的關(guān)系:


每個四元數(shù)都是 1现斋、i喜最、j、k的線性組合庄蹋,即是四元數(shù)一般可表示為


瞬内。
要把兩個四元數(shù)相加只需將相類的系數(shù)加起來就可以,就像復(fù)數(shù)一樣限书。至于乘法則可跟隨以下的乘數(shù)表:

9. 四元數(shù)乘法表

相對于將歐拉角信息存儲在3個GLfloats變量或一個 Vector3D 變量里來說, 使用四元數(shù)有2個優(yōu)點:

1.四元數(shù)不會造成萬向節(jié)死鎖(gimbal lock)虫蝶,但是歐拉角容易造成萬向節(jié)死鎖,使用四元數(shù)能夠讓我們的3D模型能夠全方位的移動蔗包。

2.相比于給每個歐拉角做矩陣旋轉(zhuǎn)轉(zhuǎn)換計算秉扑,使用四元數(shù)結(jié)合多角度旋轉(zhuǎn)可以顯著的減少計算量。

四元數(shù)結(jié)構(gòu)體

從數(shù)據(jù)上看來调限,四元數(shù)只不過是比Vector 3D多加了一個GLfloat舟陆,經(jīng)常把它當(dāng)成w字段。所以對我們來說一個四元數(shù)就象這樣:
typedef struct {
GLfloat x;
GLfloat y;
GLfloat z;
GLfloat w;
} Quaternion3D;

從一個四元數(shù)中創(chuàng)建旋轉(zhuǎn)矩陣

這另外的一個方法相對簡單些耻矮。并且這個基本算法來自于Matrix FAQ秦躯,雖然我需要把它轉(zhuǎn)換成行優(yōu)先的順序。
static inline void Matrix3DSetUsingQuaternion3D(Matrix3D matrix, Quaternion3D quat)
{
matrix[0] = (1.0f - (2.0f * ((quat.y * quat.y) + (quat.z * quat.z))));
matrix[1] = (2.0f * ((quat.x * quat.y) - (quat.z * quat.w)));
matrix[2] = (2.0f * ((quat.x * quat.z) + (quat.y * quat.w)));
matrix[3] = 0.0f;
matrix[4] = (2.0f * ((quat.x * quat.y) + (quat.z * quat.w)));
matrix[5] = (1.0f - (2.0f * ((quat.x * quat.x) + (quat.z * quat.z))));
matrix[6] = (2.0f * ((quat.y * quat.z) - (quat.x * quat.w)));
matrix[7] = 0.0f;
matrix[8] = (2.0f * ((quat.x * quat.z) - (quat.y * quat.w)));
matrix[9] = (2.0f * ((quat.y * quat.z) + (quat.x * quat.w)));
matrix[10] = (1.0f - (2.0f * ((quat.x * quat.x) + (quat.y * quat.y))));
matrix[11] = 0.0f;
matrix[12] = 0.0f;
matrix[13] = 0.0f;
matrix[14] = 0.0f;
matrix[15] = 1.0f;
}

把一個角度和旋轉(zhuǎn)軸轉(zhuǎn)換成一個四元數(shù)

四元數(shù)可以做的另外一種轉(zhuǎn)換是裆装,表示成在一個Vector3D表示的軸線上進行旋轉(zhuǎn)踱承。這在骨骼動畫里面是非常有用的,因為這種表現(xiàn)形式通過矩陣是很難做到的哨免。創(chuàng)建一個基于角度和軸旋轉(zhuǎn)得四元數(shù)茎活,我們可以這樣做:
static inline Quaternion3D Quaternion3DMakeWithAxisAndAngle(Vector3D axis, GLfloat angle)
{
Quaternion3D quat;
GLfloat sinAngle;

angle *= 0.5f;
Vector3DNormalize(&axis);
sinAngle = sinf(angle);
quat.x = (axis.x * sinAngle);
quat.y = (axis.y * sinAngle);
quat.z = (axis.z * sinAngle);
quat.w = cos(angle);

return quat;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市琢唾,隨后出現(xiàn)的幾起案子载荔,更是在濱河造成了極大的恐慌,老刑警劉巖采桃,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懒熙,死亡現(xiàn)場離奇詭異丘损,居然都是意外死亡,警方通過查閱死者的電腦和手機工扎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門徘钥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肢娘,你說我怎么就攤上這事呈础。” “怎么了蔬浙?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵猪落,是天一觀的道長。 經(jīng)常有香客問我畴博,道長笨忌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任俱病,我火速辦了婚禮官疲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亮隙。我一直安慰自己途凫,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布溢吻。 她就那樣靜靜地躺著维费,像睡著了一般。 火紅的嫁衣襯著肌膚如雪促王。 梳的紋絲不亂的頭發(fā)上犀盟,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音蝇狼,去河邊找鬼阅畴。 笑死,一個胖子當(dāng)著我的面吹牛迅耘,可吹牛的內(nèi)容都是我干的贱枣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颤专,長吁一口氣:“原來是場噩夢啊……” “哼纽哥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起栖秕,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤春塌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摔笤,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年垦写,在試婚紗的時候發(fā)現(xiàn)自己被綠了吕世。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡梯投,死狀恐怖命辖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情分蓖,我是刑警寧澤尔艇,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站么鹤,受9級特大地震影響终娃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒸甜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一棠耕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柠新,春花似錦窍荧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至憔恳,卻和暖如春瓤荔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喇嘱。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工茉贡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人者铜。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓腔丧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親作烟。 傳聞我的和親對象是個殘疾皇子愉粤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容