3D数学基础:图形与游戏开发笔记1
程序员文章站
2022-03-26 14:41:31
...
3D数学基础:图形与游戏开发——关于向量
向量 | 运算 |
---|---|
行向量 | 加减乘除都是各分量的加减乘除 |
列向量 | 点积和叉积 |
1.点积:
点积盘返回一个标量(普通数字),
若是点积=0,则两向量正交(垂直)
若是点积>0,则两向量夹角小于90
若是点积>0,则两向量夹角大于90
公式:u·v=(u1 * v1)+(u2 * v2)+(u3 * v3)=s
幸运的是,有相关函数进行生成:
FLAOT D3DXVec3Dot(
const D3DXVECTOR3* pV1,
const D3DXVECTOR3* pV2,
);
所以点积判断角度
2.叉积
叉积返回向量
返回的向量与参与叉积运算的两个向量正交
PS:两向量叉积的顺寻决定了产生向量的方向
公式较繁琐,直接用函数:
D3DXVECTOR3* D3DXVec3Cross(
D3DXVECTOR3* pOut,
CONST D3DXVECTOR3* pV1,
CONST D3DXVECTOR3* pV2,
);
3.向量的模(长度)
各个分量平方和的二次方根,(的确就是那个距离公式。。。)
4.向量的规范化
就是将各个分量除以向量的模。
一开始并不明白这有什么用,反而改变了向量。
然而向量拥有方向和大小两个属性,也只有着两个属性。
规范化的意义在于使其变成单位向量(舍弃大小,只要方向),指出方向就行了。
而且很多的D3DX函数都是需要规范化后的向量的。
幸运的是,有专门的函数进行向量规范化:
D3DXVECTOR3 * D3DXVec3Normalize(
D3DXVECTOR3* pOut,
CONST D3DXVECTOR3* pV
);
其实,个人而言,向量代表着某种变换。
而点与向量在DirectX中都是用4D向量的,如何区别两者呢?
点w分量为1——确保点的平移变换顺利进行
向量w分量为0——防止对向量进行平移变换