OpenGL_01_基礎和數學知識(上)

/*

從前學線代的時候沒認真,現在回過頭再看看吧。

學習書籍的名字:OpenGL圖形開發快速入門。機械工業出版社,楊柏林編寫。

*/

一.OpenGL全稱爲:OpenGraphics Library,開放式圖形庫,爲開發人員提供了圖形硬件接口,是一個底層的3d圖形函數庫,跨平臺,兼容主流操作系統。

一.數學相關

a)        點

                        i.             就是傳統的橫軸x、縱軸y的座標系,(x,y),

                       ii.             兩點座標公式P1P2 = 根號下(兩點x之差的平方+兩點y之差的平方),3d場景同樣適用,加個y。

·                      

 

                      iii.             OpenGL採用右手座標系。

在空間直角座標系中,讓右手拇指指向x軸的正方向,食指指向y軸的正方向,如果中指能指向z軸的正方向,則稱這個座標系爲右手直角座標系.

b)        向量

                         1.             向量的大小

向量既有方向又有大小,。我們計算向量的大小就是求響亮的長度或者模。我們可以吧向量n的長度記做: |N|。在3d空間該數值的計算如下:

                             |N| = 根號下(三個N的x、y、z三個方向分量的平方和)

                         2.             向量的歸一化

有很多向量,我們只關心他的方向而不關心大小,比如求某個平面的法線方向,這種情況下,使用單位向量就很方便。單位向量就是大小爲1的向量,我們稱其爲標準化向量。

求一個向量的單位向量的過程,叫做向量的歸一化,運算法則:(圖)

                                               V= V/|V| 

                         3.             向量的加法和減法

可以向對標量一樣,對向量進行數學運算。但是要求是參與運算的向量維度都是一樣的,即都是一維、二位、或者三維等。向量加法就是將兩個向量的各自分量相加就可以了,比如向量A+向量B,得到向量C:

         (Ax+Bx,Ay+By,Az+Bz)

兩個向量相減也是一樣,直接分量相減:

         (Ax-Bx,Ay-By,Az-Bz)

                         4 .            向量與標量的乘法運算

雖然向量和標量不能加減,但是可以相乘,結果得到一個向量,他與原向量平行,長度不同或者方向相反。例如,用標量2乘以一個向量,結果爲一個向量,其方向與向量N的方向一致,其長度變爲原來的2倍。相似的用-1乘以一個向量,得到的結果向量大小和原向量相等,方向相反。

                         5.             點乘運算

向量和向量相乘有兩種不同的類型,在這裏我們首先介紹: 點乘(也叫作內積).

術語點乘來自於:a·b 中的點,標量乘法可以省略點號,但是向量乘法運算不可以省略。

向量點乘就是對應分量乘積的和,結果是一個標量,比如在2d和3d中的運算公式爲:

A·B = AxBx + AyBy

A·B = AxBx + AyBy + AzBz

一般來說,點乘的結果描述了兩個向量的“相似程度”,結果越大兩個向量越相近。點乘等於向量大小與向量夾角的餘弦值的積:

A·B = |A| |B| cosα(應該是希特)

                                     由上面兩個可知,兩個向量之間的夾角:

                                               cosα = A·B / |A| |B|

這就明顯簡化了性質:

                                     A·B =0,說明A和B之間的夾角爲90度

                                     A·B> 0,說明A和B之間的夾角小於90度

A·B< 0,說明A和B之間的夾角大於90度

6. 叉乘運算

另一種向量乘法乘坐叉乘或叉積。叉乘僅可用於3D場景,和點乘不一樣的是,叉乘得到的是一個向量。AxB = -(BxA),任意兩個3d向量都可以確定一個平面。

AxB的另一個公式:

AxB=(AyBz-AzBy,AzBx-AxBz,AxBy-Ay,Bx)

c)        矩陣

矩陣是3d數學的重要基礎,在這裏討論矩陣的性質和運算。

我們用m x n定義一個矩陣,他表示該矩陣m行n列。

兩種特殊矩陣:

1.      方陣和對角矩陣

§  行數和列數相同的矩陣稱作方陣

§  除了左上角到右下角都是0的,稱這種矩陣爲對角矩陣。例如

【    

        1  0    0

    0  -3   0

   0   0    2

2.      單位矩陣:

單位矩陣是一種特殊的對角矩陣。他是nxn的矩陣,對角元素爲1。

1  0    0

  0    1   0

  0    0   1

}

如果用一個矩陣和單位矩陣相乘,結果還是原來的矩陣。

3.      矩陣的加法和減法:

前提是:確定參加運算的矩陣具有相同的階數,否則運算無法進行。

然後,將對應位置上的的元素進行相加減,其結果作爲結果矩陣在該位置上的值。

4. 矩陣的乘法運算分爲三種:

標量和矩陣相乘

標量k 和矩陣M相乘,其結果是一個和M維數相同的矩陣,其元素值爲k乘以M中的每一個元素。公式如下:


實例:

§  向量和矩陣相乘

向量可以看作是一行或者是一列矩陣,因此向量可以和矩陣相乘。在這裏只有兩種情況是允許的,即行向量左乘矩陣時,結果是行向量;列向量右乘矩陣,結果是列向量。其中行向量的列數要和矩陣的行數相等,列向量的行數要和矩陣的列數相等。


§  矩陣和矩陣相乘

比如乘法AB
一、1)用A的第1行各個數與B的第1列各個數對應相乘後加起來,就是乘法結果中第1行第1列的數;
2
)用A的第1行各個數與B的第2列各個數對應相乘後加起來,就是乘法結果中第1行第2列的數;
3
)用A的第1行各個數與B的第3列各個數對應相乘後加起來,就是乘法結果中第1行第3列的數;
依次進行,
(直到)用A的第1行各個數與B的第末列各個數對應相乘後加起來,就是乘法結果中第1行第末列的的數,
二、1)用A的第2行各個數與B的第1列各個數對應相乘後加起來,就是乘法結果中第2行第1列的數;
2
)用A的第2行各個數與B的第2列各個數對應相乘後加起來,就是乘法結果中第2行第2列的數;
3
)用A的第2行各個數與B的第3列各個數對應相乘後加起來,就是乘法結果中第2行第3列的數;
依次進行,
(直到)用A的第2行各個數與B的第末列各個數對應相乘後加起來,就是乘法結果中第2行第末列的的數,
依次進行,
三、1)用A的第末行各個數與B的第1列各個數對應相乘後加起來,就是乘法結果中第末行第1列的數;
2
)用A的第末行各個數與B的第2列各個數對應相乘後加起來,就是乘法結果中第末行第2列的數;
3
)用A的第末行各個數與B的第3列各個數對應相乘後加起來,就是乘法結果中第末行第3列的數;
依次進行,
(直到)用A的第末行各個數與B的第末列各個數對應相乘後加起來,就是乘法結果中第末行第末列的的數.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章