2009-12-02 80 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)

欢呼声