在opengl es中,總共會有五種的坐標系統(tǒng),如下所示:
Local space (or Object space):本地坐標系,即模型本身的坐標系
World space:世界坐標系
View space (or Eye space):視圖坐標系
Clip space:裁剪坐標系
Screen space:屏幕坐標系
下圖展示了如何從本地坐標系經過一系列的矩陣變換(模型矩陣model matrix,視圖矩陣view matrix,投影矩陣projetion matrix等)菇民,轉換到了屏幕坐標系的過程。
首先從本地坐標系開始,表示一個模型當前開始的坐標第练。
通過模型矩陣將本地坐標轉換到世界坐標當中阔馋,世界坐標可以包含很多的模型。
在世界坐標中通過視圖轉換轉換到視圖坐標中娇掏,視圖坐標可以理解成我們從相機中看到的視角呕寝。
在視圖坐標中通過投影變換(orthographic projection matrix[正交投影矩陣] or a perspective projection matrix[透視投影矩陣])轉換到裁剪坐標當中,裁剪坐標的區(qū)間在于[-1.0,1.0]婴梧。
最后將裁剪坐標轉換到屏幕坐標中下梢,這一步通過glViewport()方法進行。
如何理解這些坐標系呢塞蹭?
首先孽江,本地坐標系很好理解,每個模型都是一個坐標系番电,中心點位于(0,0,0)點岗屏。
對于世界坐標系而言,假設不用世界坐標系漱办,則如何把模型集合到一起呢这刷?例如要在客戶端展示兩個不同位置立方體,所以才提出了世界坐標系的概念娩井。通過模型矩陣(旋轉暇屋,平移,放大或者縮小)洞辣,我們可以很容易把模型展示在不同的位置的世界坐標系上面咐刨。
對于視圖坐標系(known as camera space or eye space)而言,就是通過攝像機視角觀察的坐標系屋彪,由世界坐標系通過視圖矩陣轉換而來所宰。
裁剪坐標系的意義在于裁剪掉超出可觀察范圍的視圖绒尊,通過投影變換畜挥,轉換成NDC(規(guī)范化設備坐標)。最終裁剪坐標系會調用glViewport()轉換成設備坐標系完成顯示婴谱。
投影矩陣介紹
在從視圖坐標系轉換到裁剪坐標系時候蟹但,會通過投影矩陣轉化,投影矩陣的主要作用就是將三維降成二維谭羔,以便顯示在屏幕上华糖。
投影矩陣分為兩種,一種是
1: 正交投影矩陣
2: 透視投影矩陣瘟裸。