具有透视校正组件的Modelview矩阵

时间:2012-02-10 21:21:55

标签: opengl graphics

我对矩阵实现有了更深入的了解,我在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校正向量的具体应用是什么?使用这样的矩阵(具有透视校正)对变换顶点有什么影响?

1 个答案:

答案 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]通常用于深度缓冲区(尽管它实际上更像是深度的倒数)。