MVP矩阵之V矩阵详解

2025-11-30 06:50:56
Avatar for adminadmin

本该在大二就熟练掌握的知识点,拖到现在才差不多理解,算是给自己的懒惰买个单吧。具体学习是通过games101和《unity Shader入门精要》而学习的,二者都是图形学不可多得的宝藏学习资源!

MVP矩阵是用于将物体从物体空间转换到裁剪空间以便后续将三维数据转换到屏幕NDC坐标上做准备。M矩阵是将模型由模型坐标(也就是以物体自己为原点的坐标系,比如创建一个球体,该球体圆心就是它自己模型坐标系的原点)转换到世界坐标系的矩阵,V矩阵是将模型由世界坐标系转换到摄像机坐标系下的矩阵,P矩阵是透视投影矩阵,分为两种,正交矩阵和透视矩阵。

我们是在OpenGL的基础下解释这些概念的,注意OpenGL是右手坐标系,,而摄像机默认是看向-z轴的。

M矩阵很好理解,就是把这个物体摆放到世界的某个确定的地方。拍照的时候总得把要拍的东西摆放到合适的地方吧?M矩阵就是干这个的,它一般有平移,缩放,旋转等操作;

在学习V矩阵之前,我们先解决一个问题。我们现在有父坐标空间P以及一个子坐标空间C,我们知道父坐标空间中子坐标空间的原点坐标Oc以及子坐标空间的三个单位坐标轴xc,yc,zc,现在有一个子坐标空间的点坐标Pc,我们如何把它转换到父坐标空间下为Pp?

我们有一种思路,那就是既然已经知道父坐标空间下的子坐标空间的原点坐标和子坐标空间的三个单位轴,而子坐标空间下的点坐标假设为Pc(a,b,c),那么这个点在父空间坐标系下其实可以表示为从Oc出发,沿xc正方向移动a单位长度,yc正方向移动b单位长度,zc正方向移动c单位长度,用公式表达就是:

Pp = Oc + axc + byc + czc

我们便求出了点p在父坐标空间下的坐标Pp。

而我们又知道,有了子坐标空间转换到父坐标空间的变换矩阵Mc->p,对于任意在子空间坐标系下的点Pc,我们有 Pp = Mc->p Pc。而恰好,Pc就是子空间中的一个点,所以上面的表达式就是Mc->p!自此,我们获得了从子空间转换到父空间的变换矩阵。

以上内容是《Unity Shader入门精要》中第四章的相关知识,我把公式变为矩阵的过程放到这里了,大家有兴趣可以去看原著,讲得十分清晰透彻!

现在让我们来推导V矩阵,V矩阵实际上就是从世界坐标(可以看作上文我们的子坐标)转换到摄像机坐标系(可以看作上文我们的父坐标)的矩阵。我们完全可以套用上面的思路,因为我们知道摄像机的坐标Ocamera和三个单位坐标轴(t穹顶向量,g观察向量,g叉乘t获得右向量)(废话,我们自己设定的摄像机参数!),但是有一个问题,那就是我们套用上面公式,需要摄像机坐标系(对应父坐标系)下世界坐标系的x,y,z三个单位轴的表示,不好算啊!但是(没错,还有反转),我们要知道摄像机坐标系是三条正交向量组成的矩阵!而正交矩阵的逆矩阵=转置矩阵,而且更美妙的是,Mc->p 就是 Mp->c的逆矩阵,所以我们求出世界坐标系下的摄像机坐标系就很简单,套用上方思路便是:

再把世界坐标系原点在摄像机坐标系下的坐标(列向量形式)加到上述矩阵的转置矩阵的第四列就万事大吉了!

Copyright © 2088 龙战世纪玩家中心_MMORPG活动_跨服竞技 All Rights Reserved.
友情链接