D3DX
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2020 г. ) |
В вычислительной технике D3DX ( расширение Direct3D) представляет собой библиотеку API высокого уровня , написанную в дополнение к Microsoft от графическому API Direct3D . Библиотека D3DX была представлена в Direct3D 7 и впоследствии была улучшена в Direct3D 9 . Он предоставляет классы для общих вычислений с векторами, матрицами и цветами, расчета матриц просмотра и проекции, сплайн-интерполяции и нескольких более сложных задач, таких как компиляция или сборка шейдеров, используемых для программирования 3D-графики, хранения сжатой скелетной анимации и стеков матриц. Существует несколько функций, которые обеспечивают сложные операции над 3D-сетками, такие как вычисление касательного пространства, упрощение сетки, предварительно вычисленная передача яркости, оптимизация удобства кэша вершин и переупорядочение полос, а также генераторы для 3D-текстовых сеток. 2D-функции включают классы для рисования линий экранного пространства, системы частиц на основе текста и спрайтов . Пространственные функции включают в себя различные процедуры пересечения, преобразование из/в барицентрические координаты, а также генераторы ограничивающих рамок и сфер.
Библиотека D3DX содержит заранее написанные процедуры для выполнения задач, общих для большинства 2D/3D-приложений, таких как игры. Поскольку Direct3D API является относительно низкоуровневым, использование библиотеки D3DX обычно намного проще.
В 2012 году Microsoft объявила, что D3DX 9, D3DX 10 и D3DX 11 будут устаревшими в Windows 8 SDK. [1] наряду с другими средами разработки, такими как XNA . Эффекты шейдеров, управление текстурами, оптимизация геометрии и модели сеток доступны в виде отдельных источников, опубликованных на GitHub . [2] Математические конструкции D3DX, такие как векторы и матрицы , будут объединены с помощью XNAMath в DirectXMath. [3] а математические расчеты сферических гармоник представлены в виде отдельного источника. [2]
Интерфейсы
[ редактировать ]Библиотека D3DX следует COM модели объектно-ориентированного программирования . Доступ к функциональности осуществляется с помощью интерфейсов, подобных C++ .
ID3DXEffect
[ редактировать ]Интерфейс ID3DXEffect используется для компиляции и привязки шейдеров FX (.fx). Он поддерживает автоматическое сопоставление именованных параметров шейдера с регистрами аппаратных констант, пулами параметров, сопоставление текстур с доступными сэмплерами, определение «методов» и изменение состояний рендеринга.
ID3DXFont
[ редактировать ]Интерфейс ID3DXFont можно использовать для рисования 2D-текста. См. также D3DXCreateText, который создает трехмерные сетки текста.
ID3DXLine
[ редактировать ]Интерфейс ID3DXLine можно использовать для рисования сглаженных линий экранного пространства с узором.
ID3DXMesh
[ редактировать ]Интерфейс ID3DXMesh используется для хранения сеток и оптимизации сеток для удобства кэширования вершин и переупорядочения полос. Некоторые функции D3DX работают через этот интерфейс. Примером является D3DXComputeTangentFrame для создания кадра касательного пространства для таких эффектов, как отображение нормалей и параллакса. Потомком этого класса является ID3DXPMesh, который может выполнять упрощение геометрии.
ID3DXPRTEДвигатель
[ редактировать ]Он используется для предварительно вычисленной передачи излучения — метода, аналогичного освещению со сферическими гармониками, который используется для предварительно рассчитанного глобального освещения и мягкого окружающего освещения.
ID3DXСпрайт
[ редактировать ]Интерфейс ID3DXSprite — это класс C++, используемый для вывода на экран двухмерного изображения, известного как спрайт в компьютерной графике . В DirectX 7 это обычно делалось с помощью API DirectDraw , который устарел.
Программисту обычно нужно только вызвать метод Begin() объекта ID3DXSprite, чтобы настроить состояние рендеринга и преобразование мира для 2D-рисования, вызвать метод Draw(), чтобы добавить текстуры в список, который нужно отрисовать, и, наконец, вызвать метод End(). для вывода изображений на экран и восстановления исходного состояния графики.
Распространенной критикой D3DXSprite было то, что он был медленным, но эта проблема была решена в Direct3D 9 .
Функции
[ редактировать ]D3DXComputeTangentFrame
[ редактировать ]Он вычисляет кадр касательного пространства сетки, который используется для таких эффектов, как отображение нормалей/выпуклостей, отображение параллакса и моделей анизотропного освещения. Он обрабатывает вершины на разрывах касательного пространства, создавая дубликаты, тем самым решая проблему волосатого шара . Он не обрабатывает обратную УФ-намотку граней, поэтому модели с зеркальным наложением текстур могут из-за этого столкнуться с проблемами освещения.
Директ3D10
[ редактировать ]Утилитная библиотека D3DX10 для Direct3D 10 была аналогична D3DX для Direct3D 9 по функциональности и включала ту же библиотеку D3DXMath и программные кодеки сжатия блоков (BC1-BC5). Ключевые различия заключались в том, что эффекты для Direct3D 10 были сделаны компонентом ОС, компилятор HLSL был перенесен в отдельную D3DCompile DLL, а код загрузки и сохранения изображения текстуры использовал компонент Windows Imaging Component . В результате перехода на использование WIC D3DX10 не поддерживал форматы изображений Truevision TGA , RGBE или Portable PixMap , которые поддерживались D3DX. D3DX10 также не включал атлас текстур изокарт UVAtlas или API-интерфейсы Precomputed Radiance Transfer .
Согласно Microsoft Docs, все версии D3DX10 устарели. [3]
Директ3D11
[ редактировать ]Библиотека утилит D3DX11 для Direct3D 11 представляла собой урезанную версию D3DX10. Он включал в себя код загрузки и сохранения изображений текстур с использованием WIC и программные кодеки блочного сжатия (BC1-BC7), но не более того.
Согласно Microsoft Docs, все версии D3DX11 устарели. [3]
Большая часть функций D3DX9, D3DX10 и D3DX11 была перенесена в проекты с открытым исходным кодом для Direct3D 11 или более поздних версий: DirectXMath, [4] Набор инструментов DirectX, [5] ДиректХтекс, [6] ДиректXМеш, [7] и УВАтлас. [8] Существуют также версии DXUT с открытым исходным кодом. [9] и эффекты (FX11) [10] доступное время выполнения.
Директ3D12
[ редактировать ]Утилита D3DX12 на основе DLL отсутствует. Однако существует заголовок утилиты D3DX12 (весь встроенный код C++) для некоторых базовых помощников для Direct3D 12, описанных в Microsoft Docs. [11] и опубликован на GitHub. [12] Он не включает в себя такие функции, как математические вычисления, спрайты, рендеринг шрифтов, 3D-фигуры, сетки или загрузку текстур. Существует набор инструментов DirectX для Direct3D 12. [13] который обеспечивает недостающую функциональность.
Ссылки
[ редактировать ]- ^ «Функции D3DX (графика Direct3D 11)» . Майкрософт.
- ^ Jump up to: а б «Жизнь без D3DX» . MSDN. 20 августа 2013 г.
- ^ Jump up to: а б с Майкрософт. «Где DirectX SDK?» . Майкрософт . Проверено 28 июня 2020 г.
- ^ «ДиректХМатематика» . Гитхаб. 17 февраля 2022 г.
- ^ «Набор инструментов DirectX для DX11» . Гитхаб. 18 февраля 2022 г.
- ^ «Библиотека обработки текстур DirectXTex» . Гитхаб. 16 февраля 2022 г.
- ^ «Библиотека обработки геометрии DirectXMesh» . Гитхаб. 18 февраля 2022 г.
- ^ «Библиотека атласа текстур изокарт UVAtlas» . Гитхаб. 15 февраля 2022 г.
- ^ «DXUT для Direct3D 11» . Гитхаб. 12 февраля 2022 г.
- ^ «Эффекты для Direct3D 11» . Гитхаб. 12 февраля 2022 г.
- ^ Майкрософт. «Вспомогательные структуры и функции для D3D12» . Майкрософт . Проверено 28 июня 2020 г.
- ^ «D3DX12» . Гитхаб.
- ^ «Набор инструментов DirectX для DX12» . Гитхаб. 18 февраля 2022 г.