OpenGL常識彙總

2021-06-28 01:47:44 字數 2508 閱讀 6086

主題:這裡將收集一些opengl中的常識。在日常生活中,我們積累生活常識越多,我們的生活就會越方便。同樣的道理,如果我們積累的opengl常識越多,我們的開發過程就會越輕鬆。當列舉這些常識的時候,我會盡量找到充分的,權威的資料去證明常識的正確性。通常情況下,我會摘抄經典書籍中的原話作為證據。閒話少數,現在就開始吧。

1.座標系

在計算機圖形學中有關於座標系的內容。常見的三維座標系有兩種:左手座標系和右手座標系。這兩種座標系沒有本質的差別,在具體的應用中,他們的作用完全是一樣的。唯一需要注意的是,不能在乙個系統中同時使用兩個座標系統,這樣會是相當混亂的。常見的錯誤是你使用的圖形庫使用的一種座標系統,而在你頭腦中使用的卻是另外一種座標系統。opengl使用的右手座標系.

2.矩陣

opengl中的矩陣表示是以列優先,而不是c語言的行優先。這裡我們可以用(a1, a2, a3, ... a16)表示4*4矩陣中的16各元素。

在以行優先的情況下,(a1,a2,a3,a4)表示的是第一行的四個元素,(a5,a6,a7,a8)表示的是第二行的四個元素,其他的與此類推。具體的矩陣可以表示為:

(a1,    a2,    a3,    a4 )

(a5,    a6,    a7,    a8 )

(a9,    a10, a11,   a12)

(a13,   a14, a15, a16)

在以列優先的情況下,(a1,a2,a3,a4)表示的是第一列的四個元素,(a5,a6,a7,a8)表示的是第二列的四個元素,其他的與此類推。具體的矩陣可以表示為:

(a1,    a5,    a9,     a13)

(a2,    a6,    a10,   a14)

(a3,    a7,    a11,   a15)

(a4,    a8,     a12,   a16)

和座標系一樣,在opengl中注意不要把行優先和列優先混在乙個用。opengl中的矩陣是以列優先的形式排列的。

3.矩陣的左乘和右乘

在計算機圖形學中,矩陣通常被用來描述geometrical transformation,而矩陣的乘可以被看作是geometrical transformation的乙個應用,乘積的結果表示的是變化後的結果。由矩陣的乘法規則我們可以看出,對於乙個點p:

1. 如果p寫成行的形式,即(x,y,z,1),對p的變換應該使用矩陣右乘:p' = (x,y,z,1)tm

2.如果p寫成列的形式,即(x,y,z,1)t,對p的變換應該使用矩陣左乘:p' = m(x,y,z,1)t

由於opengl中的矩陣是以列優先的形式排列的,為了能夠按順序獲取矩陣中的每一項,我們最好使用矩陣右乘的形式:

x' = x*a1 + y*a2 + z*a3 + 1*a4;

y' = x*a5 + y*a6 + z*a7 + 1*a8;

z' = x*a9 + y*a10 + z*a11 + 1*a12;

所以opengl中應該將點(或者向量)寫成行的形式並且在變換的過程中使用矩陣的右乘。

ps:對於這個問題,我又進行了一些思考。其實,

左乘和右乘都不重要,也不需要死記硬背,我們只要在使用的過程中明確以下兩點:

1.從數學的角度,矩陣的乘法運算需要滿足矩陣運算的法則。不是任何兩個矩陣m,n都可以進行乘法預算,它們的維數要滿足一定的條件。

2.從計算機圖形學角度,我們需要明確矩陣代表的實際意義。在計算機影象學中,矩陣可以用來表示各種各樣的變換,其中最常見的就是幾何變換;同時矩陣也可以被用來表示基(或者說座標系)的變換。

4.世界座標系原點

在學習計算機圖形學的初期,我一直在試圖尋找世界座標系原點的初始位置。在視視窗的左下角?在視視窗的中間?這個問題困擾了我很長一段時間,直到後來我才認識到:世界座標系原點的初始位置和視視窗沒有任何關聯,問題的關鍵僅在於視點(即"攝像機")相對於世界座標系原點的位置

我們可以把我們的眼睛想像成"視點",把我們周圍的物體看作是"世界座標系"中的物體,在現實世界中,

我們從來就不會去關心世界座標系原點在那裡,我們只關心什麼物體能夠呈現在我們的眼睛了,同樣的道理一樣也適用於計算機模擬出來的"虛擬世界"。

5.視點的初始位置和方向

伴隨著前乙個問題的解決衍生出乙個新的問題:視點的初始位置和方向是什麼樣的?視點的初始位置應該是相對於世界座標系原點,不同的api有不同的設定,在opengl中:

1) 視點的初始位置位於世界座標系的原點

2) 視點的初始視方向和z軸負方向一致

3) 視點的初始向上方向和y軸的正方向一致

4) 視點的初始x方向和x軸的正方向一致

ps:由於opengl採用右手座標系,所以視點的初始視方向垂直於螢幕指向螢幕的內部。

opengl矩陣堆疊的常識

1,實際上在opengl中對於乙個已經存在的矩陣 m 此時在畫點 c 旋轉 r 都是 mc 或者 mr在glmultmatrixf t 中也是已經存在的矩陣 m t 2 在opengl中有時需要獲取乙個矩陣內容而返回的是乙個指標,但是這個指標指向的記憶體轉為二維陣列時,與c或者c 中一維陣列轉二維陣...

OpenGL學習中遇到的問題彙總

本文將我自己在mfc框架下 學習opengl中遇到的問題彙總 前車之鑑 不斷更新 希望看到的人能盡快解決遇到的問題 q 基於對話方塊的程式無法顯示繪製的影象 但是基於文件檢視的程式可以顯示,對話方塊中的 全是直接拷貝文件檢視裡面的 a 解決方法 請新增wm create訊息,在該訊息中新增gl的初始...

python常識 python小常識

python 規範 python 官方提供有一系列 pep python enhancement proposals 文件,其中第 8 篇文件專門針對 python 的 格式給出了建議,也就是俗稱的 pep8。指定編碼格式 預設情況下,python 3 原始碼檔案以 utf 8 編碼,所有字串都是 ...