D3DXMath の操作

D3DXMath は、Direct3D アプリケーション用の数学ヘルパー ライブラリです。 D3DXMath は長年使用されており、D3DX 9 および D3DX 10 に含まれており、DirectX の古いバージョンにも遡ります。

Note

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 が小さい構造体であるという事実の両方により、これは安全でない操作になります。

Note

D3DX (および D3DXMath) はレガシと見なされており、Windows 8 で実行される Windows ストア アプリでは使用できず、デスクトップ アプリ用の Windows 8 SDK にも含まれていません。

 

Direct3D での DirectXMath の使用

Direct3D を使用する場合、DirectXMath と D3DXMath はどちらも省略可能です。 Direct3D 9 では、(現在はレガシとなっている) 固定機能パイプラインをサポートするために、Direct3D API の一部として D3DMATRIX と D3DCOLOR が定義されていました。 D3DX9 の D3DXMath は、一般的なグラフィックス演算を使用して、これらの Direct3D 9 型を拡張します。 Direct3D 10.x および Direct3D 11 の場合、API はプログラム可能なパイプラインのみを使用するため、マトリックスまたはカラー値に対して API 固有の構造はありません。 新しい API でカラー値が必要な場合は、明示的な float 値の配列、または HLSL シェーダーによって解釈される定数データの汎用バッファーが使用されます。 HLSL自体は行優先または列優先のマトリックス形式をサポートできるため、レイアウトは完全にユーザーの責任です (詳細については、HLSL、「マトリックスの順序」を参照してください。シェーダーで列優先のマトリックス形式を使用する場合は、定数バッファー構造に配置するときに DirectXMath マトリックス データを入れ替える必要があります。 省略可能ではありますが、DirectXMath ライブラリと D3DXMath ライブラリはどちらも一般的なグラフィックス関連の機能を提供するため、Direct3D プログラミングを行うときに非常に便利です。

Direct3D 9 では、受信データ構造に関する配置の想定が行われないため、XMVECTOR* を D3DVECTOR* に、または XMMATRIX* を D3DMATRIX* にキャストしても安全です。 XMCOLOR を D3DCOLOR にキャストしても安全です。 XMStoreColor() を介して 4 浮動小数点数のカラー表現を XMCOLOR に変換し、D3DCOLOR と同等の 8: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 HALF
D3DXMATRIX XMFLOAT4X4
D3DXMATRIXA16 XMMATRIX または XMFLOAT4X4A
D3DXQUATERNION
D3DXPLANE
D3DXCOLOR
XMVECTOR は一意の型ではなく使用されるため、多くの場合 XMFLOAT4 を使用する必要があります。注: **D3DXQUATERNION::operator *** を使用して、2 つの四元数を乗算する D3DXQuaternionMultiply 関数を呼び出します。 ただし、XMQuaternionMultiply 関数を明示的に使用しない限り、四元数で **XMVECTOR::operator *** を使用すると、不正な回答が得られます。
D3DXVECTOR2 XMFLOAT2
D3DXVECTOR2_16F XMHALF2
D3DXVECTOR3 XMFLOAT3
D3DXVECTOR4 XMFLOAT4 (または、データが 16 バイトでアラインされていることを保証できる場合は、XMVECTOR または XMFLOAT4A)
D3DXVECTOR4_16F XMHALF4

 

Note

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 はヨー、ピッチ、ロールを受け取り、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 は ヨー、ピッチ、ロールを受け取り、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

 

Note

DirectXMath 関数の球面調和関数は個別に使用できます。 ID3DXMatrixStack に相当する DirectXMath も使用できます。

 

DirectXMath プログラミング ガイド