Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
D3DXMath — это библиотека математических вспомогательных приложений Direct3D. D3DXMath является давним, включается в D3DX 9 и D3DX 10, а также относится к более старым версиям DirectX.
Примечание.
Библиотека служебной программы D3DX (D3DX 9, D3DX 10 и D3DX 11) не рекомендуется использовать для Windows 8, поэтому мы настоятельно рекомендуем перейти на DirectXMath, а не использовать D3DXMath.
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, работающих в Windows 8 и не включенных в пакет SDK windows 8 для классических приложений.
Использование DirectXMath с Direct3D
DirectXMath и D3DXMath являются необязательными при работе с Direct3D. Direct3D 9 определяет D3DMATRIX и D3DCOLOR в качестве части API Direct3D для поддержки конвейера фиксированной функции (в настоящее время устаревший). D3DXMath в D3DX9 расширяет эти типы Direct3D 9 с общими математическими операциями графики. Для Direct3D 10.x и Direct3D 11 API использует только программируемый конвейер, поэтому для матриц или значений цвета не существует конкретной структуры API. Если для новых API требуется значение цвета, они принимают явный массив значений с плавающей запятой или универсальный буфер константных данных, интерпретируемых шейдером HLSL. HLSL может поддерживать форматы матрицы с основными строками или столбцами, поэтому макет полностью зависит от вас (дополнительные сведения см. в разделе HLSL, Matrix Ordering; если в шейдерах используются форматы матрицы с основными столбцами, необходимо транспонировать данные матрицы DirectXMath по мере его размещения в постоянных буферных структурах). Хотя это необязательно, библиотеки DirectXMath и D3DXMath предоставляют общие функции, связанные с графикой, и поэтому очень удобны при программировании Direct3D.
Безопасно выполнять приведение XMVECTOR* к D3DVECTOR* или XMMATRIX* к D3DMATRIX*, поскольку в Direct3D 9 отсутствуют предположения относительно выравнивания структуры входящих данных. Безопасно также преобразование XMCOLOR в D3DCOLOR. Можно преобразовать 4-плавающее представление цвета в XMCOLOR с помощью XMStoreColor(), чтобы получить 8:8:8:8 32-разрядное DWORD, эквивалентное D3DCOLOR.
При работе с Direct3D 10.x или Direct3D 11 вы обычно используете типы DirectXMath для создания структуры каждого буфера констант, и в этих случаях эффективность во многом зависит от способности управлять выравниванием или использовать операции XMStore*() для преобразования данных XMVECTOR и XMMATRIX в правильные типы данных. При вызове API Direct3D 10.x или Direct3D 11, требующих массива значений цвета float[4], можно привести XMVECTOR* или XMFLOAT4* с данными цвета.
Перенос из D3DXMath
| Тип D3DXMath | Эквивалент DirectXMath |
|---|---|
| D3DXFLOAT16 | ПОЛОВИНА |
| D3DXMATRIX | XMFLOAT4X4 |
| D3DXMATRIXA16 | XMMATRIX или XMFLOAT4X4A |
| D3DXQUATERNION D3DXPLANE D3DXCOLOR |
XMVECTOR используется вместо уникальных типов, поэтому вам, скорее всего, потребуется использовать XMFLOAT4 Примечание:**D3DXQUATERNION::operator *** вызывает функцию 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 | XMVector2Cros |
| 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 | XMVector4Cros |
| 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 |
Примечание.
Функции spherical Harmonics для DirectXMath доступны отдельно. Также доступен эквивалент DirectXMath для ID3DXMatrixStack.
Связанные темы