发布网友
共1个回答
热心网友
空间坐标系XYZ,相机坐标系UVN。这时候相机空间的基(以下简称相机)在空间坐标系中围绕各个坐标轴旋转了一定角度<a,b,c>,然后移动了<x,y,z>。对于模型我们可以看作相对于相机的逆运动,即模型旋转了一定角度<-a,-b,-c>,然后移动了<-x,-y,-z>,可以把相机和物体的运动看成两个互逆的变换。这样,可以通过对相机的变换矩阵求逆来得到模型的变换矩阵。下面来具体看一下,如何得到相机变换矩阵,并且求得它的逆矩阵。
首先声明一下,对于一个模型的变换,我们可以给模型矩阵左乘变换矩阵:
M x P = P'
| A B C D | | x | | Ax + By + Cz + D |
| E F G H | | y | | Ex + Fy + Gz + H | x = | I J K L | | z | | Ix + Jy + Kz + L |
| M N O P | | 1 | | Mx + Ny + Oz + P |
也可以右乘变换矩阵:
P^T x M^T = P'^T
| A E I M |
| B F J N || x y z 1| x = |Ax+By+Cz+D Ex+Fy+Gz+H Ix+Jy+Kz+L Mx+Ny+Oz+P| | C G K O |
| D H L P |
可以看出两种变换方式是一个转置关系,结果只是形式上的不同,但这里我们使用后者,即右乘变换矩阵,因为比较普遍。
很显然,相机的变换可以分成两个阶段:旋转和平移。我们先来看旋转。
在空间坐标系中,相机旋转之前世界坐标系xyz和相机坐标系u0v0n0的各个轴向量的方向相同,有关系: | u0 | | x |P = |Pu0 Pv0 Pn0| x | v0 | = |Px Py Pz| x | y |
| n0 | | z |
这里P是空间坐标系中的一个向量。|u0 v0 n0|^T是相机基矩阵,|Pu0 Pv0 Pn0|是P在相机基矩阵下的坐标。|x y z|^T是世界基矩阵,|Px Py Pz|是P在它下面的坐标。有Pu0 = Px, Pv0 =Py, Pn0 = Pz。
相机和向量P都旋转之后,有关系: | u | | x |P' = |Pu0 Pv0 Pn0| x | v | = |Px' Py' Pz'| x | y |
| n | | z |
P'是P同相机一起旋转后的向量。|u v n|^T是相机旋转后的基矩阵,|Pu0 Pv0 Pn0|是P'在它下面的坐标,因为P是和相机一起旋转的,所以坐标不变。|x y z|^T仍为世界基矩阵,|Px' Py' Pz'|是P'在它下面的坐标。
现在看
| u | | x ||Pu0 Pv0 Pn0| x | v | = |Px' Py' Pz'| x | y |
| n | | z |
因为|x y z|^T为一个单位阵,且Pu0 = Px, Pv0 =Py, Pn0 = Pz。 所以得到
| u | |Px Py Pz| x | v | = |Px' Py' Pz'|
| n |
即|Px Py Pz|和相机一起旋转后变成|Px' Py' Pz'|,即P x R = P',而旋转变换矩阵R就是:
| u |
| v |
| n |
写成标准4x4矩阵:
| ux uy uz 0|
| vx vy vz 0|
| nx ny nz 0|
| 0 0 0 1|
平移矩阵T很简单:
| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 |
| x y z 1 |
则相机矩阵就是:
| ux uy uz 0 | | 1 0 0 0 | | vx vy vz 0 | | 0 1 0 0 |C = R x T = x | nx ny nz 0 |1 | | x y z 1 |
它的逆矩阵,即相机的逆变换矩阵为
| 1 0 0 0 | | ux vx nx 0 | | ux vx nx 0 | | 0 1 0 0 | | uy vy ny 0 | | uy vy ny 0 |C^-1 = T^-1 x R^-1 = x = | 0 0 1 0 | | uz nz nz 0 | | uz vz nz 0 | | -x -y -z 1 | | 0 0 0 1 | |-T.u -T.v -T.n 1 |
热心网友
空间坐标系XYZ,相机坐标系UVN。这时候相机空间的基(以下简称相机)在空间坐标系中围绕各个坐标轴旋转了一定角度<a,b,c>,然后移动了<x,y,z>。对于模型我们可以看作相对于相机的逆运动,即模型旋转了一定角度<-a,-b,-c>,然后移动了<-x,-y,-z>,可以把相机和物体的运动看成两个互逆的变换。这样,可以通过对相机的变换矩阵求逆来得到模型的变换矩阵。下面来具体看一下,如何得到相机变换矩阵,并且求得它的逆矩阵。
首先声明一下,对于一个模型的变换,我们可以给模型矩阵左乘变换矩阵:
M x P = P'
| A B C D | | x | | Ax + By + Cz + D |
| E F G H | | y | | Ex + Fy + Gz + H | x = | I J K L | | z | | Ix + Jy + Kz + L |
| M N O P | | 1 | | Mx + Ny + Oz + P |
也可以右乘变换矩阵:
P^T x M^T = P'^T
| A E I M |
| B F J N || x y z 1| x = |Ax+By+Cz+D Ex+Fy+Gz+H Ix+Jy+Kz+L Mx+Ny+Oz+P| | C G K O |
| D H L P |
可以看出两种变换方式是一个转置关系,结果只是形式上的不同,但这里我们使用后者,即右乘变换矩阵,因为比较普遍。
很显然,相机的变换可以分成两个阶段:旋转和平移。我们先来看旋转。
在空间坐标系中,相机旋转之前世界坐标系xyz和相机坐标系u0v0n0的各个轴向量的方向相同,有关系: | u0 | | x |P = |Pu0 Pv0 Pn0| x | v0 | = |Px Py Pz| x | y |
| n0 | | z |
这里P是空间坐标系中的一个向量。|u0 v0 n0|^T是相机基矩阵,|Pu0 Pv0 Pn0|是P在相机基矩阵下的坐标。|x y z|^T是世界基矩阵,|Px Py Pz|是P在它下面的坐标。有Pu0 = Px, Pv0 =Py, Pn0 = Pz。
相机和向量P都旋转之后,有关系: | u | | x |P' = |Pu0 Pv0 Pn0| x | v | = |Px' Py' Pz'| x | y |
| n | | z |
P'是P同相机一起旋转后的向量。|u v n|^T是相机旋转后的基矩阵,|Pu0 Pv0 Pn0|是P'在它下面的坐标,因为P是和相机一起旋转的,所以坐标不变。|x y z|^T仍为世界基矩阵,|Px' Py' Pz'|是P'在它下面的坐标。
现在看
| u | | x ||Pu0 Pv0 Pn0| x | v | = |Px' Py' Pz'| x | y |
| n | | z |
因为|x y z|^T为一个单位阵,且Pu0 = Px, Pv0 =Py, Pn0 = Pz。 所以得到
| u | |Px Py Pz| x | v | = |Px' Py' Pz'|
| n |
即|Px Py Pz|和相机一起旋转后变成|Px' Py' Pz'|,即P x R = P',而旋转变换矩阵R就是:
| u |
| v |
| n |
写成标准4x4矩阵:
| ux uy uz 0|
| vx vy vz 0|
| nx ny nz 0|
| 0 0 0 1|
平移矩阵T很简单:
| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 |
| x y z 1 |
则相机矩阵就是:
| ux uy uz 0 | | 1 0 0 0 | | vx vy vz 0 | | 0 1 0 0 |C = R x T = x | nx ny nz 0 |1 | | x y z 1 |
它的逆矩阵,即相机的逆变换矩阵为
| 1 0 0 0 | | ux vx nx 0 | | ux vx nx 0 | | 0 1 0 0 | | uy vy ny 0 | | uy vy ny 0 |C^-1 = T^-1 x R^-1 = x = | 0 0 1 0 | | uz nz nz 0 | | uz vz nz 0 | | -x -y -z 1 | | 0 0 0 1 | |-T.u -T.v -T.n 1 |