3D相关的简单数学知识

三维坐标系:

向量的模:向量起点到终点的距离

FLOAT D3DXVec3Length( // Returns the magnitude.

CONST D3DXVECTOR3* pV // The vector to compute the length of.

);

向量标准化(规范化)将向量的长度缩放至1

D3DXVECTOR3 *D3DXVec3Normalize(

D3DXVECTOR3* pOut, // Result.

CONST D3DXVECTOR3* pV // The vector to normalize.

);

向量加减:

D3DXVECTOR3 u(2.0f, 0.0f, 1.0f);

D3DXVECTOR3 v(0.0f, -1.0f, 5.0f);

D3DXVECTOR3 sum = u + (-)  v; // = (2.0f, -1.0f, 6.0f)

D3标量与向量的乘积:

 

D3DXVECTOR3 u(1.0f, 1.0f, -1.0f);

D3DXVECTOR3 scaledVec = u * 10.0f;

点积(结果为标量):

 

u · v =|u||v|cosθ

通过u*v的结果判断两向量的夹角,0垂直,<0大于90度,>0小于90度

 

float dot = D3DXVec3Dot( &u, &v );

叉积(结果是另一个向量):

长度为两向量的模乘以夹角的正弦值,在什么坐标系就用什么坐标系的定则去判断叉积的方向。

方向:按照第一个向量指向第二个向量

 

D3DXVec3Cross

 

矩阵乘法:

 

 

逆矩阵:

方阵才有逆矩阵,且不一定有

ppR 并且假设我们知道pR可以p

D3DMatrixIverse

转置:

D3DMatrixTranspose

几何变换:

齐次坐标(用n+1维坐标去表示n维坐标):

3*3的变换矩阵具有一定的局限性,无法完成平移透视投影等基本的集合变换,因此需要将三维的点和向量的坐标扩展为4维的齐次坐标

点的齐次坐标:(x,y,z,1)

向量的齐次坐标:(x,y,z,0)w值为0可以保证向量不受平移变换的影响,这样对于同一个图形中的点和向量,无需对其进行区分,只需使用一个变换矩阵对其进行几何变换

平移变换矩阵:

D3DXMATRIX *D3DXMatrixTranslation(

D3DXMATRIX* pOut, // 返回平移后的矩阵.

FLOAT x, // x轴移动的单位

FLOAT y, // y轴移动的单位

FLOAT z // z轴移动的单位

);

 

缩放:

D3DXMATRIX *D3DXMatrixScaling(

D3DXMATRIX* pOut, // 返回缩放后的矩阵

FLOAT sx, // x轴缩放的比例

FLOAT sy, // y轴缩放的比例

FLOAT sz // z轴缩放的比例.

);

 

旋转:

D3DXMATRIX *D3DXMatrixRotationX(

D3DXMATRIX* pOut, // 返回旋转后的矩阵

FLOAT Angle // Angle是旋转的弧度

);

发布了107 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/love_phoebe/article/details/101642300