Что такое DirectX?
Пока в природе не существовало DirectX, большинство игровых программ для персональных компьютеров работали под управлением Ms Dos.
Чтобы запустить такие игры, пользователям приходилось бороться, в прямом смысле этого слова, с конфигурационными файлами системы, такими, как AUTOEXEC.BAT, CONFIG.SYS, и с настройками драйверов типа EMM386.EXE и т.д. лишь ради того, чтобы получить несколько дополнительных свободных байт из доступных 640Кб базовой памяти, даже если на компьютере установлено 16Мб оперативной памяти.
Жизнь разработчиков программного обеспечения была не сахар, потому что для преодоления ограничения в 640Кб приходилось использовать различные драйверы для каждой разновидности видеоадаптеров и звуковых карт.
С выходом в свет технологии компании Microsoft DirectX для Windows 95 все указанные выше проблемы становятся историей.
Теперь разработчики могут использовать аппаратно независимый интерфейс программирования, с помощью которого создаются новые игры, для участия в которых пользователю достаточно лишь вставить в устройство чтения компакт-диск с данными и наслаждаться игрой. Теперь писать игры и играть в них стало гораздо приятнее.
Но разработка игр с использованием DirectX остается все еще непростой задачей. Иногда все еще достаточно трудно найти грамотную документацию, и начинающие разработчики тратят много времени на поиск знаний о том, как использовать такие новшества, как DirectDraw, Z-буферы или DirectSound, а также многие другие сложные, но полезные инструменты.
Цель этой статьи — помочь разработчикам, использующим DirectX, несколькими советами, основанными на моем собственном опыте написания программ. Обычные пользователи смогут получить из этого обзора общее представление о том, что такое DirectX.
Что такое DirectX ?
DirectX представляет собой набор из нескольких API (application programming interface — интерфейс программирования приложений), позволяющих разработчикам игр и других интерактивных приложений получать доступ к специфическим функциям аппаратного обеспечения без необходимости написания аппаратнозависимого программного кода. DirectX основан на наборе интерфейсов COM или классов. COM расшифровывается, как Component Object Model (Компонентная Модель Объектов), и представляет собой спецификацию интерфейса, в котором функции вызываются через указатели. Таким образом, объекты COM могут описываться такими языками программирования, как C/C++, Delphi или даже Basic. Все примеры, ссылка на которые была выше, написаны на C++, т.к. я пользуюсь именно этим языком. Интерфейс COM используется не только в DirectX, но и на уровне операционной системы в качестве модели объектов и является сердцем одной из самой широко применяемой технологии — OLE (Objects Linking and Embedding — связывание и встраивание объектов).
- DirectDraw — обеспечивает доступ к аппаратным средствам, отвечающим за изображение. Предлагается возможность работать с двумерной графикой и напрямую управлять видеопамятью, оверлеями и сменой видеостраниц.
- DirectSound — как видно из названия, этот компонент обеспечивает аппаратнонезависимый интерфейс воспроизведения звука. DirectSound позволяет приложениям полностью использовать возможности аппаратных компонентов, обеспечивающих работу со звуком, например, микширование без временных задержек.
- DirectInput — Обеспечивает аппаратнонезависимый ввод данных в систему в режиме реального времени. События, обрабатываемые DirectInput, формируются клавиатурой, мышкой и джойстиком.
- DirectPlay — представляет собой независимый протокол для осуществления связи между компьютерами. Может применяться для многопользовательских игр, связь в которых осуществляется через Интернет, локальную сеть или прямое последовательное соединение с помощью кабеля. Интерфейс, именуемый DirectPlay Lobby, позволяет создавать онлайновые места встреч в интернете, попадая в которые множество людей могут объединяться и совместно участвовать в играх.
- Direct3D — это подсистема создания трехмерных графических изображений. Состоит из API низкого уровня, который обеспечивает несколько базовых возможностей создания изображения, и API высокого уровня, который осуществляет комплекс операций, образующих изображение.
DirectX 5.0 SDK (Software Development Kit — Набор разработчика программ), доступен для загрузки с сайта Microsoft.
Справочник по DirectX для начинающих
Если Вы не являетесь разработчиком игровых программ, но Вам нравиться играть на персональном компьютере, Вы точно должны были слышать о DirectX. Почему?
Потому что DirectX широко используется в современном поколении компьютерных игр. Каждая игрушка, имеющая логотип «for Windows 95«, прежде, чем запуститься на Вашем компьютере, требует наличия установленного в системе DirectX. Вот почему DirectX это не просто «нечто для программистов», это принципиально необходимое нечто для игроков.
В тоже время если какая-то из таких современных игр установленна на Вашем компьютере, значит, DirectX тоже установлен, и Вы можете узнать об этом, обратив внимание на несколько новых файлов, которые появились в директории WindowsSystem, например DDRAW.DLL или DPLAY.DLL. Это компоненты DirectX, которые используются всеми играми, установленными в Вашей системе и работающими через интерфейс DirectX.
DirectX используется для обработки событий, которые должны совершаться в каждой игре, таких, как вывод изображения на экран или считывание входных данных с клавиатуры, мыши или джойстика.
- Улучшенные многопользовательские игры
Причина, почему хороших многопользовательских игр не так много, в том, что они очень сложны в создании. DirectPlay делает создание таких игр менее болезненной проблемой и упрощает их установку. Вот почему мы вправе ожидать увеличения количества новых классных многопользовательских игр. - Завораживающие 3D-игры
Вы знаете, почему трехмерные игры идут на Вашем компьютере так медленно? Причина в том, что изображение 3D-объектов на плоском экране требует огромного количества математических вычислений. Если эти вычисления осуществляются центральным процессором системы, то такие процессы обсчитываются слишком медленно, так как процессор выполняет еще и другие системные операции. Одним из решением этой проблемы является возложение задач по обработке трехмерных процессов на специальные 3D-видеоакселераторы.
Такие карты имеются в продаже, но многие игры не используют аппаратные возможности специализированных плат, потому что создатели игры должны написать соответствующий драйвер, а иногда бывает проблематично переписать заново целые фрагменты кода для того, чтобы использовать преимущества аппаратной обработки 3D. Компонент Direct3D, впервые включенный во вторую версию DirectX, обеспечивает стандарт на использование видеоадаптеров, обеспечивающих аппаратную 3D-акселлерацию, и его применение, несомненно, заставит трехмерные игрушки работать быстрее.
Начало работы с Direct3D
Direct3D — это низкоуровневый API для рисования примитивов с помощью конвейера отрисовки или для выполнения параллельных операций с помощью шейдера вычислений.
Что такое Direct3D?
Direct3D — это низкоуровневый API, который можно использовать для рисования треугольников, линий или точек на кадре, а также для запуска операций с высокой степенью параллелизма на GPU.
- Скрывает различные реализации GPU за согласованной абстракцией. Но вам все равно нужно знать, как рисовать трехмерную графику.
- Предназначен для управления отдельным графическим процессором. Новые GPU имеют сотни или тысячи параллельных процессоров.
- Подчеркивает параллельную обработку. Вы настраиваете множество состояний отрисовки или вычислений, а затем запускаете операцию. Вы не ждете немедленной обратной связи от операции. Вы не смешиваете операции ЦП и GPU.
Какие API Direct3D можно использовать?
Выбранные API Direct3D зависят от стиля приложения, которое вы хотите написать.
- Если вы хотите написать приложение UWP, используйте подмножество API Direct3D 11, DXGI и HLSL. Список этих API см. в статье Api Win32 и COM для приложений UWP. Сведения о создании приложения Direct3D 11 из Магазина Windows см. в статье Создание трехмерной графики с помощью DirectX.
- При написании классического приложения можно использовать полный набор API Direct3D 11, DXGI и HLSL.
- Начиная с Windows 8, мы больше не поддерживаем платформу XNA для классических приложений. Но приложения Магазина Windows, приложения UWP и классические приложения могут использовать полный набор API XAudio2 и DirectXMath . Классические приложения могут использовать полный набор API XInput , в то время как приложения Магазина Windows и приложения UWP могут использовать большинство API XInput; Дополнительные сведения см. в разделе Версии XInput.
Какая версия Direct3D?
Выбранная версия API Direct3D зависит от операционной системы и уровня оборудования, на который вы хотите ориентироваться.
- Если вы хотите использовать Windows 8 и более поздних версий, используйте API Direct3D 11.
- Используйте API Direct3D 9 в Windows XP и более поздних версий. Все оборудование поддерживает API Direct3D 9, даже более новое оборудование Уровня Direct3D 11.
- Используйте API Direct3D 10 с Windows Vista и более поздних версий. Api Direct3D 10 поддерживает только оборудование Direct3D 10 и более поздних версий.
- Используйте API Direct3D 10.1 и Direct3D 11 в Windows 7 и более поздних версий. Api Direct3D 10.1 и Direct3D 11 также можно использовать в Windows Vista с пакетом обновления 2 (SP2).
Конвейер отрисовки Direct3D
В конвейере отрисовки Direct3D данные поступают из нескольких источников, таких как притоки реки.
- Некоторые части потока программируются.
- Некоторые части имеют ручки и циферблаты.
- Источниками данных являются либо последовательные потоки пакетов (вершины), либо индексируемые массивы (ресурсы шейдера).
- Вершины и ресурсы шейдеров перетекают в примитивы, которые можно усилить.
- Примитивы и ресурсы шейдеров передаются в пиксельные операции.
Шейдер вычислений Direct3D
При использовании шейдера вычислений Direct3D все процессоры GPU выполняются параллельно. Таким образом, вычислительный шейдер ведет себя больше как пруд, чем река.
Обратная связь
Были ли сведения на этой странице полезными?
При подготовке материала использовались источники:
https://www.ixbt.com/video/dirxfaq.html
https://learn.microsoft.com/ru-ru/windows/win32/getting-started-with-direct3d