D3D 的D3DXMatrixLookAtLH矩阵的计算过程

1.      线性空间,向量,基三者之间的关系:

线性空间是由向量的集合组成的。在维度为n的向量空间中,基就是由n个互相垂直的向量组成,并且在这个线性空间中的任何一个向量都能表示为基中n个向量的线性组合。

 

2.      维数为3的向量空间的定义:

维度为3的线性空间具有几何意义,它的定义是:所有在三维空间中以原点为起始点的向量的集合。这里需要注意的是这里的向量的定义都是以原点为起点。

 

3.      叉积

因为D3D里面是左手坐标系,所以这里澄清叉积具体规则:

Ex:  a× b

“正确”的向量由向量空间的方向确定,即按照给定直角坐标系 (i, j, k) 的左右手定则。若 (i, j, k) 满足右手定则,则 (a, b, a × b) 也满足右手定则;或者两者同时满足左手定则

 “右手定则”的结果向量的方向的方法是这样的:若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。

“左手定则”的结果向量的方向的方法是这样的:若坐标系是满足左手定则的,当左手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。

 

 

4.下面给出D3D视图矩阵的计算方式:

D3DXMATRIX *D3DXMatrixLookAtLH(
            D3DXMATRIX*pOut,
            CONSTD3DXVECTOR3* pEye,
            CONSTD3DXVECTOR3* pAt,
            CONSTD3DXVECTOR3* pUp
        );

eye:相机所在的位置
at:目标点的位置。at – eye 的向量刚好构成眼睛的方向。
up:向上的方向向量,书中介绍时为[0,1,0],而很多地方用[0,-1,0]
观察坐标系的z轴为:zaxis = normal(at -eye)
观察坐标系的x轴为:xaxis =normal(cross(up,zaxis))
观察坐标系的y轴为:yaxis =cross(zaxis,xaxis)
其中:normal为使单位向量化,cross为求两向量的法向量(单位向量)
dot为:轴 * eye.x + 轴 * eye.y + 轴 * eye.z
创建的矩阵为
-----------------------------------------------------------------------------------------------------
xaxis.x yaxis.x zaxis.x  0
xaxis.yyaxis.y zaxis.y  0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis,eye) -dot(yaxis,eye) -dot(zaxis,eye) 1

 

注意:用过渡矩阵求出来的点的坐标是以世界坐标系的原点为起点的坐标,所以还需要一个平移操作才能是最后的结果。

 

 

4.      D3D中的左手坐标系就是以Z轴方向为眼睛的方向,右手坐标系就是以Z轴的反方向为眼睛的方向。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值