D3DXMath 사용
D3DXMath는 Direct3D 애플리케이션을 위한 수학 도우미 라이브러리입니다. D3DXMath는 오래 전부터 D3DX 9 및 D3DX 10에 포함되어 있으며 이전 버전의 DirectX로도 거슬러 올라갑니다.
참고 항목
D3DX 유틸리티 라이브러리(D3DX 9, D3DX 10 및 D3DX 11)는 Windows 8에서는 사용되지 않으므로 D3DXMath를 사용하는 대신 DirectXMath로 마이그레이션하는 것이 좋습니다.
DirectXMath는 D3DXMath에서 동일한 기능의 대부분을 공유하며 내부적으로 D3DXMath에는 여러 프로세서별 최적화가 포함되어 있습니다. 주요 차이점은 D3DXMath가 D3DX9*에서 호스트된다는 것입니다. DLL 및 D3DX10*. DLL 및 일부 함수는 인라인 처리됩니다. DirectXMath 라이브러리 호출 규칙은 명시적으로 SIMD에 친숙한 반면 D3DXMath는 SIMD 최적화를 구현하기 위해 부하 및 저장 변환을 수행해야 합니다.
DirectXMath 및 D3DXMath 혼합
D3DX11에는 D3DXMath가 포함되어 있지 않으며, 일반적으로 DirectXMath를 대신 사용하는 것이 좋습니다. 그러나 애플리케이션에서 D3DX9 및/또는 D3DX10에 계속 연결할 수 있으므로 D3DXMath를 계속 사용하거나 애플리케이션에서 D3DXMath와 DirectXMath를 동시에 사용할 수 있습니다.
일반적으로 XMVECTOR*를 D3DXVECTOR4*를 사용하는 함수로 캐스팅하거나 XMMATRIX*를 D3DXMATRIX*를 사용하는 함수로 캐스팅하는 것이 안전합니다. 그러나 XMVECTOR 및 XMMATRIX는 16 바이트 정렬되어야 하지만 D3DXVECTOR4 및 D3DXMATRIX 이러한 요구 사항은 없으므로 일반적으로 안전하지는 않습니다. 이 요구 사항을 준수하지 않으면 런타임에 잘못된 맞춤 예외가 발생할 수 있습니다.
XMVECTOR*를 D3DXVECTOR2* 또는 D3DXVECTOR3*를 사용하는 함수로 캐스팅해도 안전하지만 그 반대의 경우도 마찬가지입니다. 맞춤 문제와 D3DXVECTOR2 및 D3DXVECTOR3 더 작은 구조체라는 사실은 이 작업을 안전하지 않은 작업으로 만듭니다.
참고 항목
D3DX(따라서 D3DXMath)는 레거시로 간주되며 Windows 8에서 실행되고 데스크톱 앱용 Windows 8 SDK에 포함되지 않은 Windows 스토어 앱에서는 사용할 수 없습니다.
Direct3D에서 DirectXMath 사용
Direct3D로 작업할 때 DirectXMath와 D3DXMath는 모두 선택 사항입니다. Direct3D 9는 (현재 레거시) 고정 함수 파이프라인을 지원하기 위해 Direct3D API의 일부로 정의된 D3DMATRIX 및 D3DCOLOR. D3DX9의 D3DXMath는 일반적인 그래픽 수학 연산을 사용하여 이러한 Direct3D 9 형식을 확장합니다. Direct3D 10.x 및 Direct3D 11의 경우 API는 프로그래밍 가능한 파이프라인만 사용하므로 행렬 또는 색 값에 대한 API 관련 구조가 없습니다. 최신 API에 색 값이 필요한 경우 HLSL 셰이더에서 해석되는 상수 데이터의 일반 버퍼 또는 부동 소수 자릿수 값의 명시적 배열을 사용합니다. HLSL 자체는 행 주 행렬 또는 열 주 행렬 형식을 지원할 수 있으므로 레이아웃은 전적으로 사용자에게 달려 있습니다(자세한 내용은 HLSL, 행렬 순서를 참조하세요. 셰이더에서 열 주 행렬 형식을 사용하는 경우 상수 버퍼 구조에 배치할 때 DirectXMath 행렬 데이터를 변환해야 합니다). 선택 사항이지만 DirectXMath 및 D3DXMath 라이브러리는 모두 일반적인 그래픽 관련 기능을 제공하므로 Direct3D 프로그래밍을 수행할 때 매우 편리합니다.
Direct3D 9는 들어오는 데이터 구조에 대한 맞춤 가정을 하지 않으므로 XMVECTOR*를 D3DVECTOR* 또는 XMMATRIX*를 D3DMATRIX*로 캐스팅해도 안전합니다. 또한 XMCOLOR를 D3DCOLOR 캐스팅해도 안전합니다. XMStoreColor()를 통해 4-float 색 표현을 XMCOLOR로 변환하여 D3DCOLOR 해당하는 8:8:8 32비트 DWORD를 가져올 수 있습니다.
Direct3D 10.x 또는 Direct3D 11로 작업하는 경우 일반적으로 DirectXMath 형식을 사용하여 각 상수 버퍼에 대한 구조를 빌드하며, 이러한 경우 맞춤을 제어하여 효율적으로 만들거나 XMSTore*() 작업을 사용하여 XMVECTOR 및 XMMATRIX 데이터를 올바른 데이터 형식으로 변환하는 기능에 따라 크게 달라집니다. 색 값의 float[4] 배열이 필요한 Direct3D 10.x 또는 Direct3D 11 API를 호출하는 경우 색 데이터가 포함된 XMVECTOR* 또는 XMFLOAT4*를 캐스팅할 수 있습니다.
D3DXMath에서 포팅
D3DXMath 형식 | DirectXMath 해당 항목 |
---|---|
D3DXFLOAT16 | 반 |
D3DXMATRIX | XMFLOAT4X4 |
D3DXMATRIXA16 | XMMATRIX 또는 XMFLOAT4X4A |
D3DXQUATERNION D3DXPLANE D3DXCOLOR |
XMVECTOR는 고유한 형식이 아닌 사용되므로 두 개의 쿼터니언을 곱하는 D3DXQuaternionMultiply 함수를 호출하는 XMFLOAT4 참고: **D3DXQUATERNION::operator ***를 사용해야 합니다. 그러나 XMQuaternionMultiply 함수를 명시적으로 사용하지 않는 한 쿼터니언에서 **XMVECTOR::operator ***를 사용할 때 잘못된 대답을 얻을 수 있습니다. |
D3DXVECTOR2 | XMFLOAT2 |
D3DXVECTOR2_16F | XMHALF2 |
D3DXVECTOR3 | XMFLOAT3 |
D3DXVECTOR4 | XMFLOAT4(또는 데이터가 16 바이트 정렬, XMVECTOR 또는 XMFLOAT4A 보장 할 수 있는 경우) |
D3DXVECTOR4_16F | XMHALF4 |
참고 항목
XNAMath의 D3DXVECTOR3_16F 직접 해당하는 것은 없습니다.
D3DXMath 매크로 | DirectXMath 해당 항목 |
---|---|
D3DX_PI | XM_PI |
D3DX_1BYPI | XM_1DIVPI |
D3DXToRadian | XMConvertToRadians |
D3DXToDegree | XMConvertToDegrees |
D3DXMath 함수 | DirectXMath 해당 항목 |
---|---|
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 또는 XMVector2LengthEst |
D3DXVec2LengthSq | XMVector2LengthSq |
D3DXVec2Dot | XMVector2Dot |
D3DXVec2CCW | XMVector2Cross |
D3DXVec2Add | XMVectorAdd |
D3DXVec2Subtract | XMVectorSubtract |
D3DXVec2Minimize | XMVectorMin |
D3DXVec2Maximize | XMVectorMax |
D3DXVec2Scale | XMVectorScale |
D3DXVec2Lerp | XMVectorLerp 또는 XMVectorLerpV |
D3DXVec2Normalize | XMVector2Normalize 또는 XMVector2NormalizeEst |
D3DXVec2Hermite | XMVectorHermite 또는 XMVectorHermiteV |
D3DXVec2CatmullRom | XMVectorCatmullRom 또는 XMVectorCatmullRomV |
D3DXVec2BaryCentric | XMVectorBaryCentric 또는 XMVectorBaryCentricV |
D3DXVec2Transform | XMVector2Transform |
D3DXVec2TransformCoord | XMVector2TransformCoord |
D3DXVec2TransformNormal | XMVector2TransformNormal |
D3DXVec2TransformArray | XMVector2TransformStream |
D3DXVec2TransformCoordArray | XMVector2TransformCoordStream |
D3DXVec2TransformNormalArray | XMVector2TransformNormalStream |
D3DXVec3Length | XMVector3Length 또는 XMVector3LengthEst |
D3DXVec3LengthSq | XMVector3LengthSq |
D3DXVec3Dot | XMVector3Dot |
D3DXVec3Cross | XMVector3Cross |
D3DXVec3Add | XMVectorAdd |
D3DXVec3Subtract | XMVectorSubtract |
D3DXVec3Minimize | XMVectorMin |
D3DXVec3Maximize | XMVectorMax |
D3DXVec3Scale | XMVectorScale |
D3DXVec3Lerp | XMVectorLerp 또는 XMVectorLerpV |
D3DXVec3Normalize | XMVector3Normalize 또는 XMVector3NormalizeEst |
D3DXVec3Hermite | XMVectorHermite 또는 XMVectorHermiteV |
D3DXVec3CatmullRom | XMVectorCatmullRom 또는 XMVectorCatmullRomV |
D3DXVec3BaryCentric | XMVectorBaryCentric 또는 XMVectorBaryCentricV |
D3DXVec3Transform | XMVector3Transform |
D3DXVec3TransformCoord | XMVector3TransformCoord |
D3DXVec3TransformNormal | XMVector3TransformNormal |
D3DXVec3TransformArray | XMVector3TransformStream |
D3DXVec3TransformCoordArray | XMVector3TransformCoordStream |
D3DXVec3TransformNormalArray | XMVector3TransformNormalStream |
D3DXVec3Project | XMVector3Project |
D3DXVec3Unproject | XMVector3Unproject |
D3DXVec3ProjectArray | XMVector3ProjectStream |
D3DXVec3UnprojectArray | XMVector3UnprojectStream |
D3DXVec4Length | XMVector4Length 또는 XMVector4LengthEst |
D3DXVec4LengthSq | XMVector4LengthSq |
D3DXVec4Dot | XMVector4Dot |
D3DXVec4Add | XMVectorAdd |
D3DXVec4Subtract | XMVectorSubtract |
D3DXVec4Minimize | XMVectorMin |
D3DXVec4Maximize | XMVectorMax |
D3DXVec4Scale | XMVectorScale |
D3DXVec4Lerp | XMVectorLerp 또는 XMVectorLerpV |
D3DXVec4Cross | XMVector4Cross |
D3DXVec4Normalize | XMVector4Normalize 또는 XMVector4NormalizeEst |
D3DXVec4Hermite | XMVectorHermite 또는 XMVectorHermiteV |
D3DXVec4CatmullRom | XMVectorCatmullRom 또는 XMVectorCatmullRomV |
D3DXVec4BaryCentric | XMVectorBaryCentric 또는 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 (매개 변수 순서가 다릅니다. D3DXMatrixRotationYawPitchRoll은 yaw, 피치, 롤, XMMatrixRotationRollPitchYaw 는 피치, 요, 롤을 취합니다). |
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 (매개 변수 순서가 다릅니다. D3DXQuaternionRotationYawPitchRoll은 yaw, 피치, 롤, XMQuaternionRotationRollPitchYaw 가 피치, 요, 롤을 취합니다). |
D3DXQuaternionMultiply | XMQuaternionMultiply |
D3DXQuaternionNormalize | XMQuaternionNormalize 또는 XMQuaternionNormalizeEst |
D3DXQuaternionInverse | XMQuaternionInverse |
D3DXQuaternionLn | XMQuaternionLn |
D3DXQuaternionExp | XMQuaternionExp |
D3DXQuaternionSlerp | XMQuaternionSlerp 또는 XMQuaternionSlerpV |
D3DXQuaternionSquad | XMQuaternionSquad 또는 XMQuaternionSquadV |
D3DXQuaternionSquadSetup | XMQuaternionSquadSetup |
D3DXQuaternionBaryCentric | XMQuaternionBaryCentric 또는 XMQuaternionBaryCentricV |
D3DXPlaneDot | XMPlaneDot |
D3DXPlaneDotCoord | XMPlaneDotCoord |
D3DXPlaneDotNormal | XMPlaneDotNormal |
D3DXPlaneScale | XMVectorScale |
D3DXPlaneNormalize | XMPlaneNormalize 또는 XMPlaneNormalizeEst |
D3DXPlaneIntersectLine | XMPlaneIntersectLine |
D3DXPlaneFromPointNormal | XMPlaneFromPointNormal |
D3DXPlaneFromPoints | XMPlaneFromPoints |
D3DXPlaneTransform | XMPlaneTransform |
D3DXPlaneTransformArray | XMPlaneTransformStream |
D3DXColorNegative | XMColorNegative |
D3DXColorAdd | XMVectorAdd |
D3DXColorSubtract | XMVectorSubtract |
D3DXColorScale | XMVectorScale |
D3DXColorModulate | XMColorModulate |
D3DXColorLerp | XMVectorLerp 또는 XMVectorLerpV |
D3DXColorAdjustSaturation | XMColorAdjustSaturation |
D3DXColorAdjustContrast | XMColorAdjustContrast |
D3DXFresnelTerm | XMFresnelTerm |
참고 항목
DirectXMath에 대한 구형 하모닉 함수는 별도로 사용할 수 있습니다. ID3DXMatrixStack에 해당하는 DirectXMath도 사용할 수 있습니다.
관련 항목