BillBaord 矩阵的推导
潘李亮 xheartblue 2005-1-11
(注:我只是展示推导过程和大方向,可能有些符号,比如某一列需要取负等问题,在推导过程中有些疏忽,请自己检查改正)。
Billboard 为面对着摄影机的一种面片,在绘制 BillBoard 的时候,首先都假定 BillBoard 为
一个面对着某个方向的简单的四边形。如图 1,红色的四边形为我们的 BillBoard 没有变换前
的位置。在本文中,我把所有的 BillBoard 的朝向都定为+z。即[0,0,1]。因此,我们可以得到
我们把 图 1 蓝色的三个方向定义为 Billboard 局部坐标系的三个正交基,Xb = [1,0,0] , Yb =
[0,1,0], Zb = [0,0,1].可见,它和世界坐标系的基是一样的。
(图 1) (图 2)
现在我们来计算如何将它旋转到面对着摄影机。如图 2,红色的为我们的 BillBoard。有
圆圈表示的是我们的 Camera,虚线为 Camera 的三个方向(均为单位化向量)。假设我们的变换
矩阵为 M。因为,在这里我们只计算 Billboard 旋转矩阵。则在 BillBoard 坐标系中的点 P1 =
[1,0,0] ,P2= [0,1,0], P3=[0,0,1].经过 M 变换后在世界空间的坐标为:
, , ,(注,因为右手系中,如 openGL,Dir 的方向和+Z 方向
相反,而左手系的 D3D 则刚好相同,所以如果是左手系则为
, , )。所以,很容易得到(L = Left , U = Up , D = Dir):
,所以 ,因为 L,U,D 为三个正
交单位向量,所以,
.。
LeftP =
'
1 UpP =
'
2 DirP −=
'
3
LeftP =
'
1 UpP =
'
2 DirP =
'
3
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=×
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
zDyDxD
zUyUxU
zlyLxL
M
.,.,.
.,.,.
.,.,.
1,0,0
0,1,0
0,0,1
1
.,.,.
.,.,.
.,.,.
1,0,0
0,1,0
0,0,1
−
×
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
M
zDyDxD
zUyUxU
zlyLxL
T
zDyDxD
zUyUxU
zlyLxL
M
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎝
⎛
=
−
.,.,.
.,.,.
.,.,.
1
推导过 View 矩阵的人都看的出来,这个矩阵就是 View 矩阵的左上角 3x3 部分。
因为 Billboard 的 Local 坐标系为世界坐标系,所以 M 就是 Billboard 的旋转矩阵。
即 M = Inverse( Rotation(ViewMatrix)),用这个矩阵,再加上平移矩阵,可以把一个 Billboard
从如图 1 的坐标中变换到观察坐标中。
本文以 OpenGL 为例子,在 D3D 中,只要把第三列取负就可以了。
评论16