2

我正在尝试对各种 3D 结构进行简单的透视投影,定义为多个 3D 多边形(不同的 z),每个多边形都包含多个点。该结构将由我定义的许多不同的相机查看。这些相机是通过将世界相机(眼睛)放置在我的世界坐标中的(0,0,z),look(0,0,0)和up(0,1,0)并将世界轴旋转alpha(约 x 轴)、beta(约 y)和 gamma(约 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(eye-look) x R' x R_zyx x R x T(-(eye-look)) 其中 R' 是 R 的转置,R_zyx 是组合的前向旋转矩阵(世界 => 局部坐标)我然后将正交投影矩阵 (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]?

4

1 回答 1

1

好的,我想我现在已经正确理解了,但欢迎任何评论/建设性批评。

Mv (view Matrix) (定义在这里http://www.cs.uu.nl/docs/vakken/gr/Slides/06-projection.pdf ) = T(eye-look) x R' x R_zyx x R x T(-(eye-look)) x T(-(eye-look)) = [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)

干杯

于 2009-12-03T12:28:28.073 回答