directx11 特别推出了一个数学库 用于向量 矩阵的计算,而且使用128位 同时计算4条32位数据 (SIMD)
之前基本是用的directx10math.h这个头文件。 这个数学库既然是新出的,肯定在硬件方便处理起来比以前的快许多,优化了很多。 技术永无止境嘛。推荐用新的
而现在可以单独用 xnamath.h directx9 10 11 都可以用这个库,很方便。 下面的表可以快速从以前的数学库找到替换函数。
对了 昨晚遇到一个坑。解决了很久。原来是由于xnamath 里面的 xmatrix xmvector 等 涉及到一个对齐问题。
如果是 局部变量、全局变量 感觉不到。硬件会自动对齐。 但是如果放在类成员变量,就很容易报错了。 而且你看不出是那的问题。
调试了很久。 所以我们在用这个库的时候,最后尽量避免设为类成员变量。
下一节我将附上,把之前那个封装程序升级为xnamath库的完整源码,并实现了绘制一个三角形。 以后的教程都将在这个源码上演示。
他们的区别快速查询 :
D3DXMath Type DirectXMath Equivalent D3DXFLOAT16 HALF D3DXMATRIXA16 XMMATRIX or XMFLOAT4X4A D3DXQUATERNION D3DXPLANE D3DXCOLOR XMVECTOR is used rather than having unique types, so you will likely need to use an XMFLOAT4 Note D3DXQUATERNION::operator * calls the D3DXQuaternionMultiply function, which multiplies two quaternions. But, unless you explicitly use the XMQuaternionMultiply function, you get an incorrect answer when you use XMVECTOR::operator * on a quaternion. D3DXVECTOR2 XMFLOAT2 D3DXVECTOR2_16F XMHALF2 D3DXVECTOR3 XMFLOAT3 D3DXVECTOR4 XMFLOAT4 (or if you can guarantee the data is 16-byte aligned, XMVECTOR or XMFLOAT4A ) D3DXVECTOR4_16F XMHALF4 Note There is no direct equivalent to D3DXVECTOR3_16F in XNAMath. D3DXMath Macro DirectXMath Equivalent D3DX_PI XM_PI D3DX_1BYPI XM_1DIVPI D3DXToRadian XMConvertToRadians D3DXToDegree XMConvertToDegrees D3DXMath Function DirectXMath Equivalent D3DXBoxBoundProbe BoundingBox::Intersects(XMVECTOR, XMVECTOR, float&) D3DXComputeBoundingBox BoundingBox::CreateFromPoints D3DXComputeBoundingSphere BoundingSphere::CreateFromPoints D3DXSphereBoundProbe BoundingSphere::Intersects(XMVECTOR, XMVECTOR, float&) D3DXIntersectTriFunction TriangleTests::Intersects D3DXFloat32To16Array XMConvertFloatToHalfStream D3DXFloat16To32Array XMConvertHalfToFloatStream D3DXVec2Length XMVector2Length or XMVector2LengthEst D3DXVec2LengthSq XMVector2LengthSq D3DXVec2Dot XMVector2Dot D3DXVec2CCW XMVector2Cross D3DXVec2Add XMVectorAdd D3DXVec2Subtract XMVectorSubtract D3DXVec2Minimize XMVectorMin D3DXVec2Maximize XMVectorMax D3DXVec2Scale XMVectorScale D3DXVec2Lerp XMVectorLerp or XMVectorLerpV D3DXVec2Normalize XMVector2Normalize or XMVector2NormalizeEst D3DXVec2Hermite XMVectorHermite or XMVectorHermiteV D3DXVec2CatmullRom XMVectorCatmullRom or XMVectorCatmullRomV D3DXVec2BaryCentric XMVectorBaryCentric or XMVectorBaryCentricV D3DXVec2Transform XMVector2Transform D3DXVec2TransformCoord XMVector2TransformCoord D3DXVec2TransformNormal XMVector2TransformNormal D3DXVec2TransformArray XMVector2TransformStream D3DXVec2TransformCoordArray XMVector2TransformCoordStream D3DXVec2TransformNormalArray XMVector2TransformNormalStream D3DXVec3Length XMVector3Length or XMVector3LengthEst D3DXVec3LengthSq XMVector3LengthSq D3DXVec3Dot XMVector3Dot D3DXVec3Cross XMVector3Cross D3DXVec3Add XMVectorAdd D3DXVec3Subtract XMVectorSubtract D3DXVec3Minimize XMVectorMin D3DXVec3Maximize XMVectorMax D3DXVec3Scale XMVectorScale D3DXVec3Lerp XMVectorLerp or XMVectorLerpV D3DXVec3Normalize XMVector3Normalize or XMVector3NormalizeEst D3DXVec3Hermite XMVectorHermite or XMVectorHermiteV D3DXVec3CatmullRom XMVectorCatmullRom or XMVectorCatmullRomV D3DXVec3BaryCentric XMVectorBaryCentric or XMVectorBaryCentricV D3DXVec3Transform XMVector3Transform D3DXVec3TransformCoord XMVector3TransformCoord D3DXVec3TransformNormal XMVector3TransformNormal D3DXVec3TransformArray XMVector3TransformStream D3DXVec3TransformCoordArray XMVector3TransformCoordStream D3DXVec3TransformNormalArray XMVector3TransformNormalStream D3DXVec3Project XMVector3Project D3DXVec3Unproject XMVector3Unproject D3DXVec3ProjectArray XMVector3ProjectStream D3DXVec3UnprojectArray XMVector3UnprojectStream D3DXVec4Length XMVector4Length or XMVector4LengthEst D3DXVec4LengthSq XMVector4LengthSq D3DXVec4Dot XMVector4Dot D3DXVec4Add XMVectorAdd D3DXVec4Subtract XMVectorSubtract D3DXVec4Minimize XMVectorMin D3DXVec4Maximize XMVectorMax D3DXVec4Scale XMVectorScale D3DXVec4Lerp XMVectorLerp or XMVectorLerpV D3DXVec4Cross XMVector4Cross D3DXVec4Normalize XMVector4Normalize or XMVector4NormalizeEst D3DXVec4Hermite XMVectorHermite or XMVectorHermiteV D3DXVec4CatmullRom XMVectorCatmullRom or XMVectorCatmullRomV D3DXVec4BaryCentric XMVectorBaryCentric or XMVectorBaryCentricV D3DXVec4Transform XMVector4Transform D3DXVec4TransformArray XMVector4TransformStream D3DXMatrixIdentity XMMatrixIdentity D3DXMatrixDeterminant XMMatrixDeterminant D3DXMatrixDecompose XMMatrixDecompose D3DXMatrixTranspose XMMatrixTranspose D3DXMatrixMultiply XMMatrixMultiply D3DXMatrixMultiplyTranspose XMMatrixMultiplyTranspose D3DXMatrixInverse XMMatrixInverse D3DXMatrixScaling XMMatrixScaling D3DXMatrixTranslation XMMatrixTranslation D3DXMatrixRotationX XMMatrixRotationX D3DXMatrixRotationY XMMatrixRotationY D3DXMatrixRotationZ XMMatrixRotationZ D3DXMatrixRotationAxis XMMatrixRotationAxis D3DXMatrixRotationQuaternion XMMatrixRotationQuaternion D3DXMatrixRotationYawPitchRoll XMMatrixRotationRollPitchYaw (Note the order of parameters is different: D3DXMatrixRotationYawPitchRoll takes yaw, pitch, roll, XMMatrixRotationRollPitchYaw takes pitch, yaw, roll) D3DXMatrixTransformation XMMatrixTransformation D3DXMatrixTransformation2D XMMatrixTransformation2D D3DXMatrixAffineTransformation XMMatrixAffineTransformation D3DXMatrixAffineTransformation2D XMMatrixAffineTransformation2D D3DXMatrixLookAtRH XMMatrixLookAtRH D3DXMatrixLookAtLH XMMatrixLookAtLH D3DXMatrixPerspectiveRH XMMatrixPerspectiveRH D3DXMatrixPerspectiveLH XMMatrixPerspectiveLH D3DXMatrixPerspectiveFovRH XMMatrixPerspectiveFovRH D3DXMatrixPerspectiveFovLH XMMatrixPerspectiveFovLH D3DXMatrixPerspectiveOffCenterRH XMMatrixPerspectiveOffCenterRH D3DXMatrixPerspectiveOffCenterLH XMMatrixPerspectiveOffCenterLH D3DXMatrixOrthoRH XMMatrixOrthographicRH D3DXMatrixOrthoLH XMMatrixOrthographicLH D3DXMatrixOrthoOffCenterRH XMMatrixOrthographicOffCenterRH D3DXMatrixOrthoOffCenterLH XMMatrixOrthographicOffCenterLH D3DXMatrixShadow XMMatrixShadow D3DXMatrixReflect XMMatrixReflect D3DXQuaternionLength XMQuaternionLength D3DXQuaternionLengthSq XMQuaternionLengthSq D3DXQuaternionDot XMQuaternionDot D3DXQuaternionIdentity XMQuaternionIdentity D3DXQuaternionIsIdentity XMQuaternionIsIdentity D3DXQuaternionConjugate XMQuaternionConjugate D3DXQuaternionToAxisAngle XMQuaternionToAxisAngle D3DXQuaternionRotationMatrix XMQuaternionRotationMatrix D3DXQuaternionRotationAxis XMQuaternionRotationAxis D3DXQuaternionRotationYawPitchRoll XMQuaternionRotationRollPitchYaw (Note the order of parameters is different: D3DXQuaternionRotationYawPitchRoll takes yaw, pitch, roll, XMQuaternionRotationRollPitchYaw takes pitch, yaw, roll) D3DXQuaternionMultiply XMQuaternionMultiply D3DXQuaternionNormalize XMQuaternionNormalize or XMQuaternionNormalizeEst D3DXQuaternionInverse XMQuaternionInverse D3DXQuaternionLn XMQuaternionLn D3DXQuaternionExp XMQuaternionExp D3DXQuaternionSlerp XMQuaternionSlerp or XMQuaternionSlerpV D3DXQuaternionSquad XMQuaternionSquad or XMQuaternionSquadV D3DXQuaternionSquadSetup XMQuaternionSquadSetup D3DXQuaternionBaryCentric XMQuaternionBaryCentric or XMQuaternionBaryCentricV D3DXPlaneDot XMPlaneDot D3DXPlaneDotCoord XMPlaneDotCoord D3DXPlaneDotNormal XMPlaneDotNormal D3DXPlaneScale XMVectorScale D3DXPlaneNormalize XMPlaneNormalize or XMPlaneNormalizeEst D3DXPlaneIntersectLine XMPlaneIntersectLine D3DXPlaneFromPointNormal XMPlaneFromPointNormal D3DXPlaneFromPoints XMPlaneFromPoints D3DXPlaneTransform XMPlaneTransform D3DXPlaneTransformArray XMPlaneTransformStream D3DXColorNegative XMColorNegative D3DXColorAdd XMVectorAdd D3DXColorSubtract XMVectorSubtract D3DXColorScale XMVectorScale D3DXColorModulate XMColorModulate D3DXColorLerp XMVectorLerp or XMVectorLerpV D3DXColorAdjustSaturation XMColorAdjustSaturation D3DXColorAdjustContrast XMColorAdjustContrast D3DXFresnelTerm XMFresnelTerm