2009-12-02 54 views
2

我正在嘗試執行各種3D結構的簡單透視投影,這些3D結構定義爲多個3D多邊形(不同的z),每個3D多邊形(包含多個點)。該結構將通過我定義的許多不同的相機進行查看。這些相機的定義是在我的世界座標中放置一個世界相機(眼睛)在(0,0,z),看(0,0,0)和向上(0,1,0),並通過阿爾法旋轉世界軸關於x軸),β(約y)和伽瑪(約z),從而爲該特定相機創建本地座標系統。 [我意識到我可以用OpenGL做到這一點,但我想嘗試自己做並理解它,而不是使用黑盒]用於透視投影的相機旋轉

我的全局相機的基礎是使用矢量u,v和w定義的其中w =(眼睛外觀).normalised =(0,0,1); u = up.cross(w)=(1,0,0)和v = w.cross(u)=(0,1,0)

我正在使用齊次座標,所以我的轉換矩陣爲u_dashed, v_dashed,w_dashed看起來如下:

T(px,py,pz)= [1,0,0,px; 0,1,0,py; 0,0,1,pz; 0,0,0 ,1]和R = [U,0; v,0; W,0; 0,0,0,1]

所以把他們放在一起我得到

率Tr = T(眼的樣子)其中R'是R的轉置,並且R_zyx是組合的正向旋轉矩陣(world =>局部座標) 然後,我將正交投影矩陣(O)與透視變換矩陣(P)(http://www.cs.uu.nl/docs/vakken/gr/Slides/06-projection.pdf)來確定組合變換:

C = O X P X [Tr的

最後PROJ =(C X 4Dpoint),並執行透視分割即(proj.x/proj.w,proj.y,pro.w)

或者我會更好地確定每個相機的座標,即R_zyx x [0; 0; z; 1]和u,v和w by Rzyx x [ux,vx,wx,0; uy,vy,wy,0; uz,vz,wz,0; 0,0,0,0]?

+2

...在那裏一個問題嗎? – moonshadow 2009-12-02 13:45:15

+0

耶忘了:它現在在那裏! – 2009-12-02 13:55:49

回答

1

好吧我認爲我現在正確地理解了它,但是會歡迎任何意見/建設性的批評。 ( - (眼睛外觀))×T( - (眼睛外觀))×R'×R_zyx×R×T( - (眼睛外觀))×T( - (眼睛外觀))(視覺矩陣)(這裏定義的http://www.cs.uu.nl/docs/vakken/gr/Slides/06-projection.pdf) = = [U '0; v',0,W '0; 0,0,0,1]' ×T( - (眼的樣子))

C = O X P X [了Mv

然後4Dproj = C X [4點]」和 2Dproj =(4proj.x/4proj.w,4proj.y/4proj.w)

歡呼聲