Läs på engelska

Dela via


Arbeta med D3DXMath

D3DXMath är ett matematiskt hjälpbibliotek för Direct3D-program. D3DXMath är långvarigt, ingår i D3DX 9 och D3DX 10 och går tillbaka till äldre versioner av DirectX också.

Anteckning

D3DX-verktygsbiblioteket (D3DX 9, D3DX 10 och D3DX 11) är inaktuellt för Windows 8, så vi rekommenderar starkt att du migrerar till DirectXMath i stället för att använda D3DXMath.

 

DirectXMath delar mycket av samma funktioner i D3DXMath, och internt innehåller D3DXMath ett antal processorspecifika optimeringar. Den viktigaste skillnaden är att D3DXMath finns i D3DX9*. DLL:er och D3DX10*. DLL:er och mycket få av funktionerna är inlindade. Anropskonventionen för DirectXMath-biblioteket är uttryckligen SIMD-vänlig, medan D3DXMath måste utföra belastnings- och lagringskonverteringar för att implementera SIMD-optimering.

Blanda DirectXMath och D3DXMath

D3DX11 innehåller inte D3DXMath, och i allmänhet rekommenderar vi att du använder DirectXMath i stället. Du kan dock fortsätta att länka till D3DX9 och/eller D3DX10 i ditt program, och därför kan du fortsätta att använda D3DXMath eller använda både D3DXMath och DirectXMath i ditt program samtidigt.

Det är i allmänhet säkert att kasta en XMVECTOR* till en funktion som tar D3DXVECTOR4* eller att kasta en XMMATRIX* till en funktion som tar D3DXMATRIX*. Inversen är dock generellt sett inte säker eftersom XMVECTOR och XMMATRIX behöver justeras till 16 byte, medan D3DXVECTOR4 och D3DXMATRIX inte har något sådant krav. Om du inte följer det här kravet kan det leda till ogiltiga justeringsundantag vid körning.

Det är säkert att omvandla en XMVECTOR* till en funktion som tar D3DXVECTOR2* eller D3DXVECTOR3*, men inte tvärtom. Både anpassningsproblem och det faktum att D3DXVECTOR2 och D3DXVECTOR3 är mindre strukturer gör detta till en osäker åtgärd.

Anteckning

D3DX (och därmed D3DXMath) anses vara äldre och är inte tillgängligt för Windows Store-appar som körs på Windows 8 och som inte ingår i Windows 8 SDK för skrivbordsappar.

 

Använda DirectXMath med Direct3D

Både DirectXMath och D3DXMath är valfria när du arbetar med Direct3D. Direct3D 9 definierade D3DMATRIX och D3DCOLOR som en del av Direct3D-API:et till stöd för (nu äldre) pipelinen för fast funktion. D3DXMath i D3DX9 utökar dessa Direct3D 9-typer med vanliga grafikmatematikåtgärder. För Direct3D 10.x och Direct3D 11 använder API:et endast den programmerbara pipelinen så det finns ingen API-specifik struktur för antingen matriser eller färgvärden. När de nyare API:erna kräver ett färgvärde tar de en explicit matris med flyttalvärden eller en allmän buffert med konstanta data som tolkas av HLSL-skuggningen. Själva HLSL kan ha stöd för matrisformat med radhuvud- eller kolumnhuvudnamn, så layouten är helt upp till dig (mer information finns i HLSL, Matrisordning; om du använder kolumnmatrisformat i skuggorna måste du transponera DirectXMath-matrisdata när du placerar dem i dina konstanta buffertstrukturer). Även om det är valfritt tillhandahåller DirectXMath- och D3DXMath-biblioteken både vanliga grafikrelaterade funktioner och är därför mycket praktiska när du gör Direct3D-programmering.

Det är säkert att omvandla en XMVECTOR* till en D3DVECTOR* eller XMMATRIX* till D3DMATRIX* eftersom Direct3D 9 inte gör några anpassningsantaganden om den inkommande datastrukturen. Det är också säkert att kasta XMCOLOR till D3DCOLOR. Du kan konvertera en 4-flyts representation av färg till XMCOLOR via XMStoreColor() för att få 8:8:8:8 32-bitars DWORD som är ekvivalent med D3DCOLOR.

När du arbetar med Direct3D 10.x eller Direct3D 11 använder du vanligtvis DirectXMath-typer för att skapa en struktur för var och en av dina konstanta buffertar, och i dessa fall beror det till stor del på din förmåga att kontrollera justeringen för att göra dessa effektiva, eller för att använda XMStore*()-åtgärder för att konvertera XMVECTOR- och XMMATRIX-data till rätt datatyper. När du anropar Direct3D 10.x- eller Direct3D 11-API:er som kräver en flyttal[4] matris med färgvärden kan du omvandla en XMVECTOR* eller XMFLOAT4* som innehåller färgdata.

Portning från D3DXMath

D3DXMath-typ DirectXMath-motsvarighet
D3DXFLOAT16 HALV
D3DXMATRIX XMFLOAT4X4
D3DXMATRIXA16 XMMATRIX- eller XMFLOAT4X4A
D3DXQUATERNION
D3DXPLANE
D3DXCOLOR
XMVECTOR- används istället för att ha unika typer, så du kommer troligtvis behöva använda en XMFLOAT4-Obs!**D3DXQUATERNION::operator *** anropar funktionen D3DXQuaternionMultiply, som multiplicerar två kvaternioner. Men om du inte uttryckligen använder funktionen XMQuaternionMultiply får du ett felaktigt svar när du använder **XMVECTOR::operator *** på en quaternion.
D3DXVECTOR2 XMFLOAT2
D3DXVECTOR2_16F XMHALF2
D3DXVECTOR3 XMFLOAT3
D3DXVECTOR4 XMFLOAT4(eller om du kan garantera att data är 16-byte justerade, XMVECTOR eller XMFLOAT4A )
D3DXVECTOR4_16F XMHALF4

 

Anteckning

Det finns ingen direkt motsvarighet till D3DXVECTOR3_16F i XNAMath.

 

D3DXMath-makro DirectXMath-motsvarighet
D3DX_PI XM_PI
D3DX_1BYPI XM_1DIVPI
D3DXToRadian XMConvertToRadians
D3DXToDegree XMConvertToDegrees

 

D3DXMath-funktion DirectXMath-motsvarighet
D3DXBoxBoundProbe BoundingBox::Intersects(XMVECTOR, XMVECTOR, float&)
D3DXComputeBoundingBox BoundingBox::CreateFromPoints
D3DXComputeBoundingSphere BoundingSphere::CreateFromPoints
D3DXSphereBoundProbe BoundingSphere::Intersects(XMVECTOR, XMVECTOR, float&)
D3DXIntersectTriFunction TriangelTest::Skär
D3DXFloat32To16Array XMConvertFloatToHalfStream
D3DXFloat16To32Array XMConvertHalfToFloatStream
D3DXVec2Length XMVector2Length eller XMVector2LengthEst
D3DXVec2LengthSq XMVector2LengthSq
D3DXVec2Dot XMVector2Dot
D3DXVec2CCW XMVector2Cross
D3DXVec2Lägg till XMVectorLägg till
D3DXVec2Subtract XMVectorSubtract
D3DXVec2Minimize XMVectorMin
D3DXVec2Maximize XMVectorMax
D3DXVec2Scale XMVectorScale
D3DXVec2Lerp XMVectorLerp eller XMVectorLerpV
D3DXVec2Normalize XMVector2Normalize eller XMVector2NormalizeEst
D3DXVec2Hermite XMVectorHermite eller XMVectorHermiteV
D3DXVec2CatmullRom XMVectorCatmullRom eller XMVectorCatmullRomV
D3DXVec2BaryCentric XMVectorBaryCentric eller XMVectorBaryCentricV
D3DXVec2Transform XMVector2Transform
D3DXVec2TransformCoord XMVector2TransformCoord
D3DXVec2TransformNormal XMVector2TransformNormal
D3DXVec2TransformArray XMVector2TransformStream
D3DXVec2TransformCoordArray XMVector2TransformCoordStream
D3DXVec2TransformNormalArray XMVector2TransformNormalStream
D3DXVec3Length XMVector3Length eller XMVector3LengthEst
D3DXVec3LengthSq XMVector3LengthSq
D3DXVec3Dot XMVector3Dot
D3DXVec3Cross XMVector3Cross
D3DXVec3Lägg till XMVectorLägg till
D3DXVec3Subtract XMVectorSubtract
D3DXVec3Minimize XMVectorMin
D3DXVec3Maximize XMVectorMax
D3DXVec3Scale XMVectorScale
D3DXVec3Lerp XMVectorLerp eller XMVectorLerpV
D3DXVec3Normalize XMVector3Normalize eller XMVector3NormalizeEst
D3DXVec3Hermite XMVectorHermite eller XMVectorHermiteV
D3DXVec3CatmullRom XMVectorCatmullRom eller XMVectorCatmullRomV
D3DXVec3BaryCentric XMVectorBaryCentric eller XMVectorBaryCentricV
D3DXVec3Transform XMVector3Transform
D3DXVec3TransformCoord XMVector3TransformCoord
D3DXVec3TransformNormal XMVector3TransformNormal
D3DXVec3TransformArray XMVector3TransformStream
D3DXVec3TransformCoordArray XMVector3TransformCoordStream
D3DXVec3TransformNormalArray XMVector3TransformNormalStream
D3DXVec3Project XMVector3Project
D3DXVec3Unproject XMVector3Unproject
D3DXVec3ProjectArray XMVector3ProjectStream
D3DXVec3UnprojectArray XMVector3UnprojectStream
D3DXVec4Length XMVector4Length eller XMVector4LengthEst
D3DXVec4LengthSq XMVector4LengthSq
D3DXVec4Dot XMVector4Dot
D3DXVec4Lägg till XMVectorLägg till
D3DXVec4Subtract XMVectorSubtract
D3DXVec4Minimize XMVectorMin
D3DXVec4Maximize XMVectorMax
D3DXVec4Scale XMVectorScale
D3DXVec4Lerp XMVectorLerp eller XMVectorLerpV
D3DXVec4Cross XMVector4Cross
D3DXVec4Normalize XMVector4Normalize eller XMVector4NormalizeEst
D3DXVec4Hermite XMVectorHermite eller XMVectorHermiteV
D3DXVec4CatmullRom XMVectorCatmullRom eller XMVectorCatmullRomV
D3DXVec4BaryCentric XMVectorBaryCentric eller 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 (Observera att ordningen på parametrarna skiljer sig: D3DXMatrixRotationYawPitchRoll tar yaw, pitch, roll, medan XMMatrixRotationRollPitchYaw tar 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 (Observera att ordningen på parametrarna skiljer sig: D3DXQuaternionRotationYawPitchRoll tar yaw, pitch, roll, XMQuaternionRotationRollPitchYaw tar pitch, yaw, roll)
D3DXQuaternionMultiply XMQuaternionMultiply
D3DXQuaternionNormalize XMQuaternionNormalize eller XMQuaternionNormalizeEst
D3DXQuaternionInverse XMQuaternionInverse
D3DXQuaternionLn XMQuaternionLn
D3DXQuaternionExp XMQuaternionExp
D3DXQuaternionSlerp XMQuaternionSlerp eller XMQuaternionSlerpV
D3DXQuaternionSquad XMQuaternionSquad eller XMQuaternionSquadV
D3DXQuaternionSquadSetup XMQuaternionSquadSetup
D3DXQuaternionBaryCentric XMQuaternionBaryCentric eller XMQuaternionBaryCentricV
D3DXPlaneDot XMPlaneDot
D3DXPlaneDotCoord XMPlaneDotCoord
D3DXPlaneDotNormal XMPlaneDotNormal
D3DXPlaneScale XMVectorScale
D3DXPlaneNormalize XMPlaneNormalize eller XMPlaneNormalizeEst
D3DXPlaneIntersectLine XMPlaneIntersectLine
D3DXPlaneFromPointNormal XMPlaneFromPointNormal
D3DXPlaneFromPoints XMPlaneFromPoints
D3DXPlaneTransform XMPlaneTransform
D3DXPlaneTransformArray XMPlaneTransformStream
D3DXColorNegative XMColorNegative
D3DXColorLägg till XMVectorLägg till
D3DXColorSubtract XMVectorSubtract
D3DXColorScale XMVectorScale
D3DXColorModulate XMColorModulate
D3DXColorLerp XMVectorLerp eller XMVectorLerpV
D3DXColorAdjustSaturation XMColorAdjustSaturation
D3DXColorAdjustContrast XMColorAdjustContrast
D3DXFresnelTerm XMFresnelTerm

 

Anteckning

Sfäriska harmonier funktioner för DirectXMath är separat tillgängliga. Det finns även en DirectXMath-motsvarighet till ID3DXMatrixStack.

 

Programmeringsguide för DirectXMath