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도 사용할 수 있습니다.

 

DirectXMath 프로그래밍 가이드