视点矩阵

对于一个坐标系统,其原点位置O1,三个基坐标U1,V1,W1,则该坐标系下的点P(x1,y1,z1),实际P=x1*U1+y1*V1+z1*W1+O1

对于另外一个一个坐标系统,其原点位置O2,三个基坐标U2,V2,W2,则该坐标系下的点P(x2,y2,z2),实际P=x1*U1+y1*V1+z1*W1+O1=x2*U2+y2*V2+z2*W2+O2



View矩阵用于将物体从世界空间(World Space)转换到摄像机空间(Eye Space),下面我们将进行公式的推导,首先通过函数指定我们的需要的三个向量  
CONST D3DXVECTOR3 *pEye,
 CONST D3DXVECTOR3 *pAt,
 CONST D3DXVECTOR3 *pUp
我们指定视觉空间的三个基向量为xaxisyaxiszaxis 。那么zaxis是我们视线的方向,所以zaxis = normal(Eye - At),我们知道朝上为Up,并且向量Up属于yz平面(通过平移,向量与位置无关),所以可以求得xaxis,通过求叉积。那么xaxis = normal(cross(Up, zaxis)),这下我们再求出yaxis = cross(zaxis, xaxis)
注意:up方向相当于你的头顶,你把头仰望着,但是你的上方仍然是你的正上方,但是你的头顶指向的方向就相当于摄像机空间的yaxis
xaxis = (xaxis.x,xaxis.y,xaxis.z,1); //用齐次坐标表示
yaxis = (yaxis.x,yaxis.y,yaxis.z,1);
zaxis = (zaxis.x,zaxis.y,zaxis.z,1);
 
世界空间的基坐标为x = (1,0,0,0), y = (0,1,0,0), z = (0,0,1,0);
写成矩阵表示为 ,那么必定有一个矩阵使得
  (当他们在同一个原点时)
 
因为我们知道eye摄像机的位置了,所以
u = (xaxis.x + eye.x, xaxis.y + eye.y, xaxis.z + eye.z);
v = (yaxis.x + eye.x, yaxis.y + eye.y, yaxis.z + eye.z);
n = (zaxis.x + eye.x, zaxis.y + eye.y, zaxis.z + eye.z);
 
相当于eye + xaixs, eye + yaxis, eye + zaxis一个点加一个向量(方向)。
 
那么 这里是错的!!!
 
 
因为向量是绝对的,在任何坐标系下面是一样的。
 
证明:
 
 P是我们的基变换矩阵,这里就是上面的M.
 
那么是原来坐标系的基是后来坐标系的基
所以 
 
得到 。那么变换后的坐标 
注意P是基变换矩阵。
 
那么我们就要求M的逆矩阵了。
 
 



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值