唧唧歪歪之OpenGL坐標系

鯊魚小猫 2022-01-07 22:17:51 阅读数:790

唧唧 歪歪 opengl

不懂坐標系,死在第一步…

  • (1)剛開始繪制一個物體,代碼設置這個物體的坐標是針對屏幕(屏幕不是計算機的整個屏幕,這裏的屏幕是開辟的窗口)的中心建立坐標系而言(說白了就是針對世界坐標系建模,世界坐標系的原點在屏幕中心)

  • (2)然後對物體進行模型變化(平移,旋轉等),而設置的代碼可以2種理解:假定我們是先進行一次平移、然後進行一次旋轉,那麼我們設置的平移、旋轉代碼可以理解:
    ①把物體放在世界坐標系中先平移、再旋轉(注意物體變化了,那麼物體自身的局部坐標系相對原來局部坐標系也是變化的),也就是說設置的代碼仍然是針對世界坐標系(也可以說全局坐標系)。
    ②代碼是爭對物體的局部坐標系,但是!!!是在局部坐標系中先旋轉,在平移。得到的最終效果和上面的(1)是一樣的。同時需要注意Opengl中實際上進行模型變換時候就是針對局部坐標系,(當然寫代碼時候,還是理解成這些代碼爭對世界坐標系,好理解一點)

  • (3)視點坐標系(又稱為眼坐標系、相機坐標系),也就是我們使用的gluLookAt函數(當然這個是視點變換,不是坐標系),我們進行視點變換,也是基於世界坐標系而言,把眼睛放在哪裏。得到的效果完全可以理解為與模型變化一樣。一個是眼睛不動,物體動。一個是眼睛動,物體不動。唯一的區別就是視點坐標系動的是眼睛,所以物體沒有變,所以物體仍然在以前世界坐標系中的老比特置,並且物體的局部坐標系針對之前的局部坐標系沒有變。

  • (4)投影變換就是從視點(就是前面照相機的比特置)出發進行投影,然後投影到一個窗口中,這個窗口稱為投影窗口,(沒有變換過的視點,默認在這個投影窗口的原點,也就是中心),沒有進行視點變換時候(也就是從來沒移動眼睛的時候),視點默認是與世界坐標系的中心(原點)重合。所以綜上,沒有進行視點變換時候,進行投影,投影的窗口的原點,與世界坐標系的原點重合。

  • (5)視口變換,就是在我們的窗口中開辟一個視口,開辟這個視口時候,是針對屏幕(就是我們實驗課黑黑的窗口)而言,並且視口坐標系的原點與我們這個黑窗口的左下角重合。把我們投影窗口的內容,放進去。當2個窗口不成比例,但是就會變形!你應該能想象的,上學期的圖形學附錄也有解釋。這個時候解釋一下為什麼(4)中投影窗口放在世界坐標系中不變型呢,要注意前者是把有限的內容(投影窗口)放在一個窗口,然後把窗口放在一個無線的坐標系中,當然不變型,後者是把有限的內容(投影窗口)放在另外一個有限的窗口,不成比例,當然會變形。

  • 綜上,總結:寫的變換方面代碼(平移、旋轉等)理解為爭對屏幕(開辟的窗口)的中心而言。一但進行視點坐標系、投影變換、視口變換,腦袋中要時刻想象出這幾個坐標系就好。

版权声明:本文为[鯊魚小猫]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201072217509908.html