Своими руками все делать, конечно, в чем-то правильно. Но разделение труда придумали не вчера, и придумали совершенно по делу — производительность труда резко возросла. Да и применение, скажем, топора неконвенционным способом может резко усложнить жизнь как применяющему, так и всем окружающим.
В компьютерном мире роль курса обучения выполняют SDK — Software Development Kit, тщательно отобранный разработчиком набор примеров. Разумеется, такие примеры тоже могут содержать ошибки — сам натыкался, но в большинстве случаев программировать, отталкиваясь от них, гораздо легче.
Итак, встречайте — DirectX SDK!
Совсем немного истории
Первое время после выхода Windows’95 платформа не пользовалась особой популярностью среди игроделов. И тому были веские причины.
Во-первых, под однозадачный DOS писать было гораздо привычнее — все ресурсы доступны, при желании можно напрямую обращаться к какому угодно устройству, и не надо ожидать конкуренции со стороны других программ — их нет по определению.
Полистаем. Обратите внимание на группировку примеров. |
Во-вторых, было куда труднее добиваться нужной производительности — такой оказалась плата за унификацию интерфейсов доступа. Для решения этой проблемы и был разработан DirectX, изначально ориентированный на разработку игр. Первоначальное название — WinG, на это откровенно намекавшее, уже всеми забыто.
Увековечим любимый журнал. |
Новые версии DirectX выходили с появлением у аппаратуры каких-либо новых возможностей — так, в версии 7 ключевой была поддержка свежевышедшей тогда видеокарты Nvidia GeForce, первой из линейки видеокарт, выполнявших расчет преобразований и освещения моделей самостоятельно. В одной из ближайших версий такой ключевой функциональностью обязательно станет поддержка аппаратных ускорителей игровой физики.
Свежие версии SDK выпускаются раз в несколько месяцев. На момент написания этой статьи последняя выпущена в августе 2006 года, занимает 500 мегабайт (в установленном виде — вдвое больше) и всерьез заставила задуматься мой компьютер при установке. Когда установка кончилась, можно было начинать знакомство.
В этой поставке есть, как видно из меню, и примеры по программированию под Xbox, и некоторые предварительные версии того, что войдет в DirectX 10.
Я уж не знаю, что это... |
В этой статье я расскажу более подробно о примерах работы с трехмерной графикой — скриншоты звуковых программ все-таки не настолько наглядны. Еще данная версия поддерживает как отдельное API работу с различными устройствами ввода типа джойстиков.
... но треугольник из-под курсора никуда не денется! |
Разбираться с примерами удобно по нарастанию сложности — просто инициализация всех необходимых объектов, рисование треугольника, добавление подсветки и текстурирование, наконец, работа с моделями и работа с текстом. Это все не очень интересно. А вот работа с управляющими элементами — гораздо интересней...
А вот и мой любимый пример — как водится, потому, что решение этой задачи попортило мне много крови. Определение, куда мы попали мышкой. Вот, посмотрите: модель, достаточно неудобная для того, чтобы считать ее при выборе параллелепипедом или сферой, — и безошибочно выбранный треугольник!
Красавец-воин... |
Но пора переходить к более сложным примерам. Как все помнят, если увеличивать детализацию — то есть, в первом приближении, количество треугольников в модели, — то можно существенно улучшить (за счет падения производительности, разумеется) представление картинки. И наоборот, когда итоговая картинка имеет размер в несколько пикселей на экране, модель можно упростить — технология Level-Of-Details, LOD.
... но треугольник из-под курсора никуда не денется! |
Какая современная трехмерная игра мыслима без теней! И хотя, в отличие от скриншота, в помещениях все-таки не встречаются самолеты, но пример ShadowMap демонстрирует достаточно эффективную технику их наложения. Правда, эта техника адекватнее всего подходит для того случая, когда ваш персонаж носит с собой фонарик. А вот воин, вполне для помещения адекватный (разве что текстуру можно было бы подобрать более ориентальную), освещен двумя источниками где-то под потолком.
Кто пустил биплан в помещение? |
Впрочем, если отсутствие теней простительно, например, для вампира, то отсутствие анимации скорее всего не простят никому. И вот, пожалуйста, дама гордо шагает в том направлении, которое вы выберете. А если, как сделал я, повернуть ее так, чтобы увидеть спину, то станет видно, что спина украшена логотипом DirectX.
Песня шагом, шагом... |
Как всегда (лет 6 в компьютерном мире — это на данный момент «всегда»), присутствуют примеры на отражение. И — опять как всегда — отражаться окружающему миру приходится в начищенном до блеска чайнике. DirectX 9 позволяет отображать более реалистичные цвета, чем его предшественники.
Одна из проблем, мешающих построить по-настоящему реалистичное изображение на мониторе, — то, что все объекты, вне зависимости от расстояния до них в игровом
Чайник. Начищенный до блеска чайник. |
Очень много примеров ориентировано на работу с технологией HDR (High Dynamic
Тигры (нет, не танки), идущие строем. |
К сожалению, не все примеры легко адекватно оценить по скриншотам. А еще — к отдельному сожалению тех, чьим видеокартам уже несколько лет, — красоту части примеров оценить вообще не удастся: ме-е-е-едлен-н-н-но!
Примеры, которые мы потеряли
За те несколько лет, которые я наблюдаю за развитием DirectX SDK, состав примеров многократно менялся. Новые примеры появлялись, естественно, вместе с развитием новых технологий. Перестала быть экзотикой всяческая градиентная прозрачность — и нас тут же покинул соответствующий пример. Не очень интересным оказалось текстурирование видеофайлами, хотя какое-то применение для него, безусловно, есть.
Технология HDR: освещенное будущее? |
Основная идея технологии HDR — отказ от привычной нам модели RGB с 256 градациями каждого цвета. Предполагается, что модель описывается физическими величинами освещенности и цвета освещения, а соотношение этих величин для изображения должно опять-таки соответствовать соотношению в реальности. Целыми числами при этом обойтись уже не получится: будет видна дискретность изображения, да и одного байта на канал не хватит. Конечно, нам никуда не деться от ограничений монитора — но кто знает, какими будут эти ограничения лет через 5? Впрочем, я надеюсь, что в ближайших номерах появится более подробная, чем эта врезка, статья, описывающая технологию HDR. |
Я очень скорблю о утрате примера, который хотя и не представлял ничего сложного с точки зрения программирования графики, давал неплохую поведенческую модель стаи голубей. И еще один пример, который я очень люблю, — отображение деревьев как плоской картинки, всегда повернутой лицом к камере: математика там достаточно несложная, но самому ее выводить не очень хочется.
Дано не каждому
Уже знакомый воин. Источников света можно и побольше, чем два... |
Программистам достается гораздо больше всего хорошего: в частности, интегрированный в Visual Studio .NET отладчик эффектов, исходный код всех упомянутых и большого количества неупомянутых примеров и, разумеется, документация. Документация описывает работу как на C++, так и на .NET и Visual Basic. Еще нужно упомянуть неоценимую утилиту, преобразующую код ошибки DirectX во внятное описание. А еще — но это и простым смертным пригодится — утилиты для просмотров файлов трехмерных моделей и эффектов (.x и .fx соответственно).
Художники тоже не в обиде: плагины к Adobe Photoshop, DirectX Extensions for Autodesk 3ds Max и Alias Maya упростят сохранение текстур и трехмерных моделей в форматах, пригодных для работы с DirectX.
И напоследок
Раньше я скептически рассматривал версию о переходе на Vista. Но в августовскую поставку DirectX SDK включили примеры, которые будут работать под этой операционной системой, и только под ней. Судя по скриншотам (к сожалению, в журнал их поместить не получится — слишком маленькие), нас ждут еще невиданные по красоте эффекты.