总结了下DXMath库中针对对向量类型XMVECTOR及矩阵XMMATRIX类型(这里XM含义为XNA Math)的相关函数,归纳在下面的代码中,相信有一定线性代数知识的话,就能轻松了解运用
#include
#include
#include
#include
using namespace std;
using namespace DirectX;
using namespace DirectX::PackedVector;
int main()
{
if (!XMVerifyCPUSupport())//是否支持DX的SSE2指令集
{
cout << "DX not supported" << endl;
return 0;
}
//以下为DXMath库中向量的各种获取函数
XMVECTOR xmvE1 = XMVectorZero();//返回零向量
XMVECTOR xmvE2 = XMVectorSplatOne();//返回向量(1,1,1,1)
XMVECTOR xmvE3 = XMVectorSet(1.0f, 2.0f, 3.0f, 0.0f);//Set向量
XMVECTOR xmvE4 = XMVectorReplicate(-2.0f);//返回(-2.0f,-2.0f,-2.0f,-2.0f)向量
XMVECTOR xmvE5 = XMVectorSplatZ(xmvE3);//返回xmvE3的分量Z,(xmvE3.z,xmvE3.z,xmvE3.z,xmvE3.z)向量,剩下的一样的
//以下为DXMath库中向量的各种计算函数
XMVECTOR xmvN = XMVectorSet(0, 0, 0, 0);
XMVECTOR xmvU = XMVectorSet(0, 0, 0, 0);
XMVECTOR xmvA = xmvN + xmvU;
XMVECTOR xmvB = xmvN - xmvU;
XMVECTOR xmvC = 10.0f*xmvU;
XMVECTOR xmvD = XMVector3Length(xmvU);//取模运算
XMVECTOR xmvE = XMVector3Normalize(xmvU);//单位化
XMVECTOR xmvF = XMVector3Dot(xmvN, xmvU);//点乘返回实数,注意这里的XMVECTOR中的4个分量是相同的
XMVECTOR xmvG = XMVector3Cross(xmvN, xmvU);//叉乘返回向量
XMVECTOR projW;
XMVECTOR propW;
XMVector3ComponentsFromNormal(&projW,&propW,xmvW,xmvN);//返回基于n的对W的projW,和propW
bool bEqual = XMVector3Equal(projW + propW, xmvW) != 0;//向量比较
XMVECTOR xmvAngle = XMVector3AngleBetweenVectors(projW, propW);//向量夹角
float fAngleRadians = XMVectorGetX(xmvAngle);//拆解向量一个值,返回float。这里是弧度制
float fAngleDegress = XMConvertToDegrees(fAngleRadians);//弧度变角度
//以下为DXMath库中对矩阵的各种获取函数
XMMATRIX xmmA(1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 2.0f, 0.0f, 0.0f,
0.0f, 0.0f, 4.0f, 0.0f,
1.0f, 2.0f, 3.0f, 1.0f);
XMMATRIX xmmB = XMMatrixIdentity();//单位矩阵
XMMATRIX xmmC = xmmA * xmmB;//矩阵乘法
XMMATRIX xmmD = XMMatrixTranspose(xmmA);//转置矩阵
XMVECTOR xmmDet = XMMatrixDeterminant(xmmA);//行列式
XMMATRIX xmmF = XMMatrixInverse(&xmmDet, xmmA);//逆矩
//以下为DXMath库中变换矩阵的获取,计算函数,为更好看到形参含义下面给出函数声明
/*
XMMATRIX XM_CALLCONV XMMatrixScaling(
float ScaleX,
float ScaleY,
float ScaleY,
float ScaleZ);//构建缩放矩阵,形参为缩放系数
XMMATRIX XM_CALLCONV XMMatrixScalingFromVector(
FXMVECTOR Scale);//构件缩放矩阵,形参为缩放系数组成的向量
XMMATRIX XM_CALLCONV XMMatrixRotationX(
float Angle);//构建旋转变换矩阵,绕X轴顺时针旋转Angle度
XMMATRIX XM_CALLCONV XMMatrixRotationAxis(
FXMVECTOR Axis,
float Angle);//构建旋转变换矩阵,绕任意向量顺时针旋转Angle度
XMMATRIX XM_CALLCONV XMMatrixTranslation(
float OffSetX,
float OffSetY,
float OffSetZ);//构建平移矩阵,形参为平移系数
XMMATRIX XM_CALLCONV XMMatrixTranslationFromVector(
FXMVECTOR OffSet);//构建平移矩阵,平移系数为OffSet3D分量
XMVECTOR XM_CALLCONV XMVector3TransformCoord(
FXMVECTOR V,CXMMATRIX M);//进行向量变换,返回向量与矩阵的乘积VM,此函数针对点变换,V的最后分量为1
XMVECTOR XM_CALLCONV XMVector3TranslationFormNoraml(
FXMVECTOR V,
CXMMATRIX M);//进行向量变换,返回向量与矩阵的乘积VM,此函数针对向量的变换,V的最后分量为0
*/
return 0;
}