我试图执行各种3D结构的简单透视投影,定义为多个3D多边形(不同的z),每个多边形包括多个点。该结构将由我定义的许多不同的相机观看。通过将世界相机(眼睛)放置在我的世界坐标中的(0,0,z),外观(0,0,0)和向上(0,1,0)并通过alpha旋转世界轴来定义这些相机(关于x轴),β(约为y)和伽马(约为z),从而为该特定相机创建我的局部坐标系。 [我意识到我可以用OpenGL做到这一点,但我想尝试自己做并理解它,而不是使用黑盒子]
我的全局相机的基础是使用向量u,v和w来定义的,其中w =(eye-look).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(眼睛看)x R'x R_zyx x R x T( - (眼睛看))其中R'是R的转置,R_zyx是组合的正向旋转矩阵(world => local坐标) 然后我将正交投影矩阵(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由Rzyx x [ux,vx,wx,0; uy,vy,wy ,0; UZ,VZ,WZ,0; 0,0,0,0]
答案 0 :(得分:1)
好吧我想我现在已经正确地理解了它,但欢迎任何评论/建设性的批评。
Mv(查看矩阵)(如此处所定义http://www.cs.uu.nl/docs/vakken/gr/Slides/06-projection.pdf) = T(眼睛看)x R'x R_zyx x R x T( - (眼睛看))x T( - (眼睛看)) = [u',0; v',0,w',0; 0,0,0,1]'x T( - (眼睛看))
C = O x P x Mv
然后4Dproj = C x [4Point]'和 2Dproj =(4proj.x / 4proj.w,4proj.y / 4proj.w)
欢呼声