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、 Matrix Ordering」を参照してください。シェーダーで列メジャー マトリックス形式を使用する場合は、DirectXMath マトリックス データを定数バッファー構造に配置するときに入れ替える必要があります)。 オプションですが、DirectXMath ライブラリと D3DXMath ライブラリはどちらも一般的なグラフィックス関連の機能を提供するため、Direct3D プログラミングを行うときに非常に便利です。

Direct3D 9 では受信データ構造に関するアライメントの前提がないため、XMVECTOR* を D3DVECTOR* または XMMATRIX* から D3DMATRIX* にキャストしても安全です。 XMCOLOR を D3DCOLOR にキャストしても安全です。 XMStoreColor() を使用して色の 4 float 表現を 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 半分
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

 

注意

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

 

注意

DirectXMath 用の球面調和関数は個別に使用できます。 ID3DXMatrixStack と同等の DirectXMath も使用できます。

 

DirectXMath プログラミング ガイド