В вычислении , D3DX (Direct3D Extension) является устаревшим высокий уровень API библиотека , которая написана в дополнение Microsoft «s Direct3D графики API. Библиотека D3DX была представлена в Direct3D 7 и впоследствии была улучшена в Direct3D 9.. Он предоставляет классы для общих вычислений векторов, матриц и цветов, вычисления матриц обзора и проекции, сплайн-интерполяции и нескольких более сложных задач, таких как компиляция или сборка шейдеров, используемых для программирования 3D-графики, хранения сжатой скелетной анимации и стеки матриц. Есть несколько функций, которые обеспечивают сложные операции над трехмерными сетками, такие как вычисление касательного пространства, упрощение сетки, предварительно вычисленная передача яркости, оптимизация для удобства кеширования вершин и переупорядочение полос, а также генераторы для трехмерных текстовых сеток. 2D-функции включают классы для рисования линий в экранном пространстве, систем частиц на основе текста и спрайтов . Пространственные функции включают в себя различные процедуры пересечения, преобразование из / в барицентрические координаты и генераторы ограничивающей рамки и сфер.
Библиотека D3DX содержит заранее написанные процедуры для выполнения вещей, общих для большинства 2D / 3D-приложений, таких как игры. Поскольку Direct3D API относительно низкоуровневый, использование библиотеки D3DX обычно намного проще.
В 2012 году Microsoft объявила, что D3DX будет устаревшим в Windows 8 SDK вместе с другими средами разработки, такими как XNA . Эффекты шейдеров, управление текстурами, оптимизация геометрии и модели сеток доступны в виде отдельных источников, опубликованных через GitHub . [1] Математические конструкции D3DX, такие как векторы и матрицы , будут объединены с XNAMath в DirectXMath [2], а математика сферических гармоник предоставляется как отдельный источник. [1]
Интерфейсы
Библиотека D3DX следует объектно-ориентированной модели программирования COM . Доступ к функциональным возможностям осуществляется с помощью интерфейсов, подобных C ++ .
ID3DXEffect
Интерфейс ID3DXEffect используется для компиляции и привязки шейдеров FX (.fx). Он поддерживает автоматическое сопоставление именованных параметров шейдера с аппаратными регистрами констант, пулами параметров, сопоставление текстур с доступными сэмплерами, указание «методов» и изменение состояний рендеринга.
ID3DXFont
Интерфейс ID3DXFont можно использовать для рисования двухмерного текста. См. Также D3DXCreateText, который создает трехмерные сетки текста.
ID3DXLine
Интерфейс ID3DXLine можно использовать для рисования сглаженных линий экранного пространства с помощью шаблона.
ID3DXMesh
Интерфейс ID3DXMesh используется для хранения сеток и оптимизации сетки для обеспечения удобства кеширования вершин и переупорядочения полос. Некоторые функции в D3DX работают с этим интерфейсом. Примером является D3DXComputeTangentFrame для создания кадра касательного пространства для таких эффектов, как отображение нормали и параллакса. Потомком этого класса является ID3DXPMesh, который может упрощать геометрию.
ID3DXPRTEngine
Он используется для Precomputed Radiance Transfer - техники, подобной освещению сферическими гармониками, которое используется для предварительно вычисленного глобального освещения и мягкого окружающего освещения.
ID3DXSprite
Интерфейс ID3DXSprite - это класс C ++, используемый для вывода 2D-изображения на экран, известного как спрайт в компьютерной графике . В DirectX 7 это обычно делалось с помощью API DirectDraw , который устарел.
Программисту обычно достаточно вызвать метод Begin () объекта ID3DXSprite, чтобы настроить состояние рендеринга и мировое преобразование для 2D-рисования, вызвать метод Draw (), чтобы добавить текстуры в список для рисования, и, наконец, вызвать метод End (). для вывода изображений на экран и восстановления исходного состояния графики.
Распространенной критикой D3DXSprite было то, что он был медленным, но эта проблема была решена в Direct3D 9 .
Функции
D3DXComputeTangentFrame
Он вычисляет кадр касательного пространства сетки, которая используется для таких эффектов, как отображение нормалей / рельефа, отображение параллакса и модели анизотропного освещения. Он обрабатывает вершины на разрывах касательного пространства, создавая дубликаты, тем самым решая проблему волосатого шара . Он не обрабатывает перевернутую УФ-намотку лиц, поэтому модели с зеркальным отображением текстуры могут столкнуться с проблемами освещения из-за этого.
Direct3D10
Библиотека утилит D3DX10 для Direct3D 10 была аналогична D3DX для Direct3D 9 по функциональности и включала те же программные кодеки библиотеки D3DXMath и блочного сжатия (BC1-BC5). Основные отличия заключались в том, что Effects for Direct3D 10 был сделан компонентом ОС, компилятор HLSL был перемещен в отдельную DLL D3DCompile, а код загрузки и сохранения изображения текстуры использовал компонент Windows Imaging . Вследствие перехода на использование WIC D3DX10 не поддерживал Truevision TGA , формат изображения RGBE или форматы файлов Portable PixMap , которые поддерживались D3DX. D3DX10 также не включал атласинг текстуры изохартов UVAtlas или API-интерфейсы Precomputed Radiance Transfer .
Все версии D3DX10 объявлены устаревшими согласно Microsoft Docs. [2]
Direct3D11
Библиотека утилит D3DX11 для Direct3D 11 была урезанной версией D3DX10. Он включал в себя код загрузки и сохранения изображения текстуры с использованием WIC и программные кодеки блочного сжатия (BC1-BC7), но мало что еще.
Все версии D3DX11 объявлены устаревшими согласно Microsoft Docs. [2]
Большая часть функциональных возможностей D3DX9, D3DX10 и D3DX11 была перенесена в проекты с открытым исходным кодом для Direct3D 11 или новее: DirectXMath, [3] DirectX Tool Kit, [4] DirectXTex, [5] DirectXMesh, [6] и UVAtlas. [7] Также доступны версии с открытым исходным кодом DXUT [8] и среды исполнения Effects (FX11) [9] .
Direct3D12
Не существует служебной библиотеки D3DX12 на основе DLL. Однако существует заголовок утилиты D3DX12 (весь встроенный код C ++) для некоторых базовых помощников для Direct3D 12, задокументированный в Microsoft Docs [10] и опубликованный на GitHub. [11] Он не включает такие функции, как математика, спрайты, рендеринг шрифтов, трехмерные формы, сетки или загрузка текстур. Существует набор инструментов DirectX для Direct3D 12 [12], который обеспечивает недостающую функциональность.
Рекомендации
- ^ a b «Жизнь без D3DX» . MSDN.
- ^ а б в Microsoft. "Где находится DirectX SDK?" . Microsoft . Проверено 28 июня 2020 .
- ^ «DirectXMath» . GitHub.
- ^ «Набор инструментов DirectX для DX11» . GitHub.
- ^ «Библиотека обработки текстур DirectXTex» . GitHub.
- ^ «Библиотека обработки геометрии DirectXMesh» . GitHub.
- ^ "Библиотека атласинга текстур isochart UVAtlas" . GitHub.
- ^ «DXUT для Direct3D 11» . GitHub.
- ^ «Эффекты для Direct3D 11» . GitHub.
- ^ Microsoft. «Вспомогательные структуры и функции для D3D12» . Microsoft . Проверено 28 июня 2020 .
- ^ «D3DX12» . GitHub.
- ^ «Набор инструментов DirectX для DX12» . GitHub.
Внешние ссылки
- Документация D3DX в Microsoft Docs
- Документация D3DX10 в Microsoft Docs
- Документация D3DX11 в Microsoft Docs
- Жизнь без D3DX (ранее - блоги MSDN)