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 も使用できます。
関連トピック