欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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——防止对向量进行平移变换

相关标签: 3D Direct3D