Bekerja dengan D3DXMath
D3DXMath adalah pustaka pembantu matematika untuk aplikasi Direct3D. D3DXMath berdurasi lama, disertakan dalam D3DX 9 dan D3DX 10, dan juga tanggal kembali ke versi DirectX yang lebih lama.
Catatan
Pustaka utilitas D3DX (D3DX 9, D3DX 10, dan D3DX 11) tidak digunakan lagi untuk Windows 8, jadi kami sangat menyarankan Anda bermigrasi ke DirectXMath daripada menggunakan D3DXMath.
DirectXMath berbagi banyak fungsionalitas yang sama di D3DXMath, dan secara internal D3DXMath mencakup sejumlah pengoptimalan khusus prosesor. Perbedaan utamanya adalah bahwa D3DXMath dihosting di D3DX9*. DLL dan D3DX10*. DLL, dan sangat sedikit fungsi yang sebaris. Konvensi panggilan Pustaka DirectXMath secara eksplisit ramah SIMD, sedangkan D3DXMath harus melakukan konversi beban dan penyimpanan untuk mengimplementasikan pengoptimalan SIMD.
Mencampur DirectXMath dan D3DXMath
D3DX11 tidak berisi D3DXMath, dan secara umum sebaiknya gunakan DirectXMath sebagai gantinya. Namun, Anda bebas untuk terus menautkan ke D3DX9 dan/atau D3DX10 di aplikasi Anda, dan oleh karena itu Anda dapat terus menggunakan D3DXMath atau menggunakan D3DXMath dan DirectXMath di aplikasi Anda secara bersamaan.
Secara umum aman untuk mentransmisikan XMVECTOR* ke fungsi yang membutuhkan D3DXVECTOR4* atau untuk mentransmisikan XMMATRIX* ke fungsi yang membutuhkan D3DXMATRIX*. Inversinya adalah, bagaimanapun, umumnya tidak aman karena XMVECTOR dan XMMATRIX harus selaras 16 byte, sementara D3DXVECTOR4 dan D3DXMATRIX tidak memiliki persyaratan tersebut. Kegagalan untuk mematuhi persyaratan ini dapat mengakibatkan pengecualian perataan yang tidak valid pada runtime.
Aman untuk mentransmisikan XMVECTOR* ke fungsi yang membutuhkan D3DXVECTOR2* atau D3DXVECTOR3*, tetapi tidak sebaliknya. Kekhawatiran penyelarasan dan fakta bahwa D3DXVECTOR2 dan D3DXVECTOR3 adalah struktur yang lebih kecil menjadikan ini operasi yang tidak aman.
Catatan
D3DX (dan oleh karena itu D3DXMath) dianggap warisan, dan tidak tersedia untuk aplikasi Windows Store yang berjalan pada Windows 8 dan tidak termasuk dalam Windows 8 SDK untuk aplikasi desktop.
Menggunakan DirectXMath dengan Direct3D
DirectXMath dan D3DXMath bersifat opsional saat bekerja dengan Direct3D. Direct3D 9 mendefinisikan D3DMATRIX dan D3DCOLOR sebagai bagian dari API Direct3D untuk mendukung alur fungsi tetap (sekarang warisan). D3DXMath di D3DX9 memperluas jenis Direct3D 9 ini dengan operasi matematika grafis umum. Untuk Direct3D 10.x dan Direct3D 11, API hanya menggunakan alur yang dapat diprogram sehingga tidak ada struktur khusus API untuk matriks atau nilai warna. Ketika API yang lebih baru memerlukan nilai warna, API tersebut mengambil array eksplisit nilai float atau buffer generik data konstan yang ditafsirkan oleh shader HLSL. HLSL sendiri dapat mendukung format matriks row-major atau column-major, sehingga tata letak sepenuhnya terserah Anda (untuk informasi selengkapnya, lihat HLSL, Matrix Ordering; jika Anda menggunakan format matriks utama kolom di shader Anda, Anda perlu mengubah data matriks DirectXMath saat Anda menempatkannya ke dalam struktur buffer konstan Anda). Meskipun opsional, pustaka DirectXMath dan D3DXMath keduanya menyediakan fungsionalitas terkait grafis umum, dan oleh karena itu sangat nyaman saat melakukan pemrograman Direct3D.
Aman untuk mentransmisikan XMVECTOR* ke D3DVECTOR* atau XMMATRIX* ke D3DMATRIX* karena Direct3D 9 tidak membuat asumsi penyelarasan tentang struktur data masuk. Anda juga dapat melemparkan XMCOLOR ke D3DCOLOR. Anda dapat mengonversi representasi warna 4-float ke XMCOLOR melalui XMStoreColor() untuk mendapatkan DWORD 8:8:8:8 32-bit yang setara dengan D3DCOLOR.
Saat bekerja dengan Direct3D 10.x atau Direct3D 11, Anda biasanya akan menggunakan jenis DirectXMath untuk membangun struktur untuk setiap buffer konstan Anda, dan dalam kasus tersebut sebagian besar tergantung pada kemampuan Anda untuk mengontrol keselarasan agar efisien ini, atau menggunakan operasi XMStore*() untuk mengonversi data XMVECTOR dan XMMATRIX ke jenis data yang benar. Saat memanggil API Direct3D 10.x atau Direct3D 11 yang memerlukan array nilai warna float[4], Anda dapat mentransmisikan XMVECTOR* atau XMFLOAT4* yang berisi data warna.
Porting dari D3DXMath
Tipe D3DXMath | Setara DirectXMath |
---|---|
D3DXFLOAT16 | SETENGAH |
D3DXMATRIX | XMFLOAT4X4 |
D3DXMATRIXA16 | XMMATRIX atau XMFLOAT4X4A |
D3DXQUATERNION D3DXPLANE D3DXCOLOR |
XMVECTOR digunakan daripada memiliki jenis unik, jadi Anda mungkin perlu menggunakan Catatan XMFLOAT4: **D3DXQUATERNION::operator *** memanggil fungsi D3DXQuaternionMultiply, yang mengalikan dua kuaternion. Tetapi, kecuali Anda secara eksplisit menggunakan fungsi XMQuaternionMultiply , Anda mendapatkan jawaban yang salah ketika Anda menggunakan **XMVECTOR::operator *** pada quaternion. |
D3DXVECTOR2 | XMFLOAT2 |
D3DXVECTOR2_16F | XMHALF2 |
D3DXVECTOR3 | XMFLOAT3 |
D3DXVECTOR4 | XMFLOAT4(atau jika Anda dapat menjamin data selaras 16 byte, XMVECTOR atau XMFLOAT4A ) |
D3DXVECTOR4_16F | XMHALF4 |
Catatan
Tidak ada yang setara langsung dengan D3DXVECTOR3_16F di XNAMath.
Makro D3DXMath | Setara DirectXMath |
---|---|
D3DX_PI | XM_PI |
D3DX_1BYPI | XM_1DIVPI |
D3DXToRadian | XMConvertToRadians |
D3DXToDegree | XMConvertToDegrees |
Fungsi D3DXMath | Setara 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 atau XMVector2LengthEst |
D3DXVec2LengthSq | XMVector2LengthSq |
D3DXVec2Dot | XMVector2Dot |
D3DXVec2CCW | XMVector2Cross |
D3DXVec2Tambahkan | XMVectorAdd |
D3DXVec2Subtract | XMVectorSubtract |
D3DXVec2Minimize | XMVectorMin |
D3DXVec2Maximize | XMVectorMax |
D3DXVec2Scale | XMVectorScale |
D3DXVec2Lerp | XMVectorLerp atau XMVectorLerpV |
D3DXVec2Normalize | XMVector2Normalize atau XMVector2NormalizeEst |
D3DXVec2Hermite | XMVectorHermite atau XMVectorHermiteV |
D3DXVec2CatmullRom | XMVectorCatmullRom atau XMVectorCatmullRomV |
D3DXVec2BaryCentric | XMVectorBaryCentric atau XMVectorBaryCentricV |
D3DXVec2Transform | XMVector2Transform |
D3DXVec2TransformCoord | XMVector2TransformCoord |
D3DXVec2TransformNormal | XMVector2TransformNormal |
D3DXVec2TransformArray | XMVector2TransformStream |
D3DXVec2TransformCoordArray | XMVector2TransformCoordStream |
D3DXVec2TransformNormalArray | XMVector2TransformNormalStream |
D3DXVec3Length | XMVector3Length atau XMVector3LengthEst |
D3DXVec3LengthSq | XMVector3LengthSq |
D3DXVec3Dot | XMVector3Dot |
D3DXVec3Cross | XMVector3Cross |
D3DXVec3Tambahkan | XMVectorAdd |
D3DXVec3Subtract | XMVectorSubtract |
D3DXVec3Minimize | XMVectorMin |
D3DXVec3Maximize | XMVectorMax |
D3DXVec3Scale | XMVectorScale |
D3DXVec3Lerp | XMVectorLerp atau XMVectorLerpV |
D3DXVec3Normalize | XMVector3Normalize atau XMVector3NormalizeEst |
D3DXVec3Hermite | XMVectorHermite atau XMVectorHermiteV |
D3DXVec3CatmullRom | XMVectorCatmullRom atau XMVectorCatmullRomV |
D3DXVec3BaryCentric | XMVectorBaryCentric atau XMVectorBaryCentricV |
D3DXVec3Transform | XMVector3Transform |
D3DXVec3TransformCoord | XMVector3TransformCoord |
D3DXVec3TransformNormal | XMVector3TransformNormal |
D3DXVec3TransformArray | XMVector3TransformStream |
D3DXVec3TransformCoordArray | XMVector3TransformCoordStream |
D3DXVec3TransformNormalArray | XMVector3TransformNormalStream |
D3DXVec3Project | XMVector3Project |
D3DXVec3Unproject | XMVector3Unproject |
D3DXVec3ProjectArray | XMVector3ProjectStream |
D3DXVec3UnprojectArray | XMVector3UnprojectStream |
D3DXVec4Length | XMVector4Length atau XMVector4LengthEst |
D3DXVec4LengthSq | XMVector4LengthSq |
D3DXVec4Dot | XMVector4Dot |
D3DXVec4Tambahkan | XMVectorAdd |
D3DXVec4Subtract | XMVectorSubtract |
D3DXVec4Minimize | XMVectorMin |
D3DXVec4Maximize | XMVectorMax |
D3DXVec4Scale | XMVectorScale |
D3DXVec4Lerp | XMVectorLerp atau XMVectorLerpV |
D3DXVec4Cross | XMVector4Cross |
D3DXVec4Normalize | XMVector4Normalize atau XMVector4NormalizeEst |
D3DXVec4Hermite | XMVectorHermite atau XMVectorHermiteV |
D3DXVec4CatmullRom | XMVectorCatmullRom atau XMVectorCatmullRomV |
D3DXVec4BaryCentric | XMVectorBaryCentric atau 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 (Perhatikan urutan parameter berbeda: D3DXMatrixRotationYawPitchRoll mengambil yaw, pitch, roll, XMMatrixRotationRollPitchYaw mengambil pitch, yaw, roll) |
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 |
D3DXMatrixOrthoffCenterRH | XMMatrixOrthographicOffCenterRH |
D3DXMatrixOrthoffCenterLH | 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 (Perhatikan urutan parameter berbeda: D3DXQuaternionRotationYawPitchRoll mengambil yaw, pitch, roll, XMQuaternionRotationRollPitchYaw mengambil pitch, yaw, roll) |
D3DXQuaternionMultiply | XMQuaternionMultiply |
D3DXQuaternionNormalize | XMQuaternionNormalize atau XMQuaternionNormalizeEst |
D3DXQuaternionInverse | XMQuaternionInverse |
D3DXQuaternionLn | XMQuaternionLn |
D3DXQuaternionExp | XMQuaternionExp |
D3DXQuaternionSlerp | XMQuaternionSlerp atau XMQuaternionSlerpV |
D3DXQuaternionSquad | XMQuaternionSquad atau XMQuaternionSquadV |
D3DXQuaternionSquadSetup | XMQuaternionSquadSetup |
D3DXQuaternionBaryCentric | XMQuaternionBaryCentric atau XMQuaternionBaryCentricV |
D3DXPlaneDot | XMPlaneDot |
D3DXPlaneDotCoord | XMPlaneDotCoord |
D3DXPlaneDotNormal | XMPlaneDotNormal |
D3DXPlaneScale | XMVectorScale |
D3DXPlaneNormalize | XMPlaneNormalize atau XMPlaneNormalizeEst |
D3DXPlaneIntersectLine | XMPlaneIntersectLine |
D3DXPlaneFromPointNormal | XMPlaneFromPointNormal |
D3DXPlaneFromPoints | XMPlaneFromPoints |
D3DXPlaneTransform | XMPlaneTransform |
D3DXPlaneTransformArray | XMPlaneTransformStream |
D3DXColorNegative | XMColorNegative |
D3DXColorAdd | XMVectorAdd |
D3DXColorSubtract | XMVectorSubtract |
D3DXColorScale | XMVectorScale |
D3DXColorModulate | XMColorModulate |
D3DXColorLerp | XMVectorLerp atau XMVectorLerpV |
D3DXColorAdjustSaturation | XMColorAdjustSaturation |
D3DXColorAdjustContrast | XMColorAdjustContrast |
D3DXFresnelTerm | XMFresnelTerm |
Catatan
Fungsi Spherical Harmonics untuk DirectXMath tersedia secara terpisah. DirectXMath yang setara dengan ID3DXMatrixStack juga tersedia.
Topik terkait