我对矩阵实现有了更深入的了解,我在OpenSceneGraph矩阵逆计算中发现了这个评论:
We note that this matrix can be split into three matrices.
mat = rot * trans * corr, where rot is rotation part, trans is translation part, and corr is the correction due to perspective (if any).
将模型视图矩阵分解为矩阵旋转和平移似乎是合理的,但校正矩阵让我对...感到好奇......
corr 矩阵是模型视图矩阵重置为除第四行以外的标识(使用OpenGL表示法)。例如:
corr = [ 1 0 0 0
0 1 0 0
0 0 1 0
x y z s ]
通常,向量c=[x y z s]
等于{0 0 0 1}
,实际上它在顶点变换中没有贡献。但是,由于它们涉及到,如何使用校正向量?
c
校正向量的具体应用是什么?使用这样的矩阵(具有透视校正)对变换顶点有什么影响?
答案 0 :(得分:2)
4x4矩阵在3D计算机图形中的工作方式是:在完成所有矩阵变换后,将4向量除以第四个(w
)坐标以获得屏幕坐标:
[ x ] -> [ x/w ]
[ y ] [ y/w ]
[ z ] [ z/w ]
[ w ] [w/w=1]
从下面的简化图中,您可以看到透视投影的几何图形需要除以深度值:
. <- viewpoint: (0,0)
|\
| \
| \
| \
|----+--- <- screen depth = 1 -> projected point on screen: (x/depth, 1)
| \ (due to geometry of similar triangles)
| \
| \
|--------. <- general point: (x,depth)
矩阵的第四行确定结果的w
坐标,以便最终除法可以执行透视投影。值[x/w, y/w]
与实际屏幕坐标成比例,[z/w]
通常用于深度缓冲区(尽管它实际上更像是深度的倒数)。