主題:這裡將收集一些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 編碼,所有字串都是 ...