[Главная] [Новости] [Статьи] [Игры] [Проекты] | [Автор] | |||
[Архив новостей] | ||||
[Форум] | на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы | |||
Основы 3D-программирования DirectX9 в Delphi 2006: теоретические и практические основы создания игр. | ||||
Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...] | ||||||
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi] | ||||||
[Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX] | ||||||
Что такое Delphi DirectX ? |
[назад] [далее] [к содержанию] | ||
16/05/2009 | ||
Перейдем к изучению кода примера MultiAnimation в среде Delphi DirectX 9 | ||
Сразу же хочу заметить, что пример MultiAnimation является новым для DirectX SDK 9. В DX SDK 8.1 такой пример отсутствовал. Но это Вас нисколько не должно пугать, наоборот - можно только порадоваться тому, что работа с анимацией 3D-персонажей была выведена на новый, более качественный уровень. Теперь не потребуется писать специальные приложения для экспорта анимации из 3ds max, кроме того, сама работа с анимированной моделью проходит более эффективно. Итак, будем полагать, что всё у нас получится и мы действительно сможем выполнить всё задуманное. |
||
Если Вы только начинаете изучать DirectX (на С++ или на Delphi - неважно, т.к. проблемы будут одни и те же), то пример MultiAnimation сразу после уроков из Tutorials может показаться Вам несколько сложноватым. Во-первых код разбит на несколько модулей, используется много особенностей: камера, звук, шейдеры и целый ряд классов. Во-вторых, сам код насыщен новыми особенностями. Но не торопитесь с выводами. Пример конечно трудный для начала, но последовательно осваивая его и не отступая перед трудностями Вы реализуете главное, что является основой любой современной компьютерной игры: работа с анимированными 3d-моделями. Причем сделать это надо будет на уровне моделирования в 3ds max, затем разобраться с особенностями экспорта (если Вы еще до конца не разобрались с ними) и после этого переходить к написанию кода для работы с анимированными моделями. Ну а уж после того, как Вы преодолеете указанные трудности, всё остальное Вам покажется уже гораздо более ясным. |
||
MultiAnimationUnit.pas Начинается всё как обычно - основой приложения является класс CD3DApplication использующий интерфейсы DirectX9, от него производится класс CMyD3DApplication, в котором описываются меш для пола матрица для пола материал и текстура для пола шрифт камера соотношение длины и ширины рабочей области окна d3d-приложения (m_fAspectRatio) звук объект для работы с анимированной моделью, содержащей набор анимаций список персонажей в сцене и ряд других параметров, которые будут ясны из дальнейшего повествования |
||
Замечу, что пример MultiAnimation - множественная анимация назван так по причине демонстрации использования множества наборов анимаций для 3d-модели, а не потому что таких моделей в сцене будет показано много. Это лишь хорошее дополнение к описанию первой возможности. Так что как видите, освоив этот пример на уровне создания собственного класса для работы с анимированными моделями Вы научитесь сразу же и тому как использовать множественные анимации, и как сделать так, чтобы в сцене был не один, а много персонажей. |
||
constructor CMyD3DApplication.Create; Содержит начальную инициализацию всех используемых объектов - классы создаются, переменные инициализируются. в недрах метода Destroy происходит обратное - классы уничтожаются, освобождая память и другие используемые ресурсы метод function CMyD3DApplication.ConfirmDevice полезен тем, что внутри него проверяются возможности имеющегося в системе пользователя DirectX - версия шейдера и поддержка текстур формата 32 бит, в противном случае метод возвращает ошибку и приложение будет завершено с сообщением о том, что на данной системе пример работать не будет, т. е. ему нужен DirectX посвежее, да видеокарточка и видеорежим помощнее. К счастью современным компьютерам это уже по силам. Может быть и такая ситуация, что всё это есть, но пример увы не работает. Самая распространенная причина - Windows недавно переустанавливали, а вот драйвера для видеокарты установить забыли, а те, что ставятся по-умолчанию, естественно не дают нужного результата. Это и приводит к ошибке. В таком случае нужно проверить: а работают ли на данном компьютере игрушки требующие DirectX вообще? И если нет, то нужно установить драйвера для видеокарты, имеющейся в системе. |
||
Если Вам не совсем ясно в каком направлении и последовательности происходит работа примера MultiAnimation откройте файл проекта MultiAnimation.bdsproj и сами всё увидите Сначала Create, затем AppCreate, потом уже Run, а в конце Free Именно внутри реализации данных методов и нужно искать ответ на данный вопрос Они уведут Вас в глубь модуля D3DApp.pas, но там Вы воочию увидите чем же таким особенным отличается DirectX 9 от DirectX 8.1, т. е. что нужно учитывать при портировании существующих приложений ориентированных на DirectX 8.1 при переходе на DX 9 |
||
Из всего, что есть внутри метода function CD3DApplication.AppCreate для нас интерес пока будет представлять лишь вызов OneTimeSceneInit и Initialize3DEnvironment > InitDeviceObjects, которые реализованы в модуле MultiAnimationUnit.pas Там Вы и увидите как осуществляется загрузка всех ресурсов, используемых данным примером: текстура, модель, шейдер, привязка звуков к событиям в анимированной модели |
||
Напомним общую структуру функционирования типового DirectX-приложения | ||
В примере MultiAnimation роль метода WinMain выполняют логические скобки begin...end. в модуле MultiAnimation.bdsproj Create > AppCreate > Run > Free Т. е. на схеме Create_ заменяется на AppCreate (Create вызывается до него внутри WinMain), далее внутри метода Initialize3DEnvironment вызываемого внутри AppCreate после OneTimeSceneInit вызываются все необходимые методы для создания необходимых объектов и загрузки ресурсов (т. е. что-то аналогичное цепочке CreateInputObjects, CreateSoundObjects, CreateDisplayObjects и т.д.) Всё остальное - подобно тому, что представлено на схеме Данная схема взята из урока посвященного описанию полноценного примера игры Donuts3D для Delphi DirectX 8.1. Познакомившись с особенностями работы в Delphi DirectX 9 Вы легко сможете портировать данный пример на новую платформу (у меня еще пока руки не дошли). После этого Вы получите в своё распоряжение полноценную основу для создания будущей 2D или 3D-игры. Все исходники прилагаются. |
||
Итак, теперь Вам должна быть ясна общая картина работы примера MultiAnimation, а это значит, что пришла пора перейти к описанию непосредственно тех особенностей, которые касаются использования анимированных 3d-моделей с несколькими наборами анимаций. | ||
function CMyD3DApplication.InitDeviceObjects //
set up MultiAnim
AH:= CMultiAnimAllocateHierarchy.Create; //объект
для загрузки иерархии элементов внутри файла анимированной модели
Result := m_MultiAnim.Setup(m_pd3dDevice, sXFile, sFXFile, AH); //загружаем
модель и файл эффекта (fx)
// get device caps
// Select the technique that fits the shader version.
// Restore steps for tiny instances //вызов
метода Restore для всех персонажей игровой сцены
// If there is no instance, make sure we have at least one. //если
персонажей 0 создаем хотя бы одного
Result := pTiny.Setup(m_MultiAnim, m_v_pCharacters, m_DSound, 0.0); //подготовка
персонажа к старту анимации |
||
В заключение Вам остается рассмотреть реализацию методов FrameMove и Render В методе FrameMove анимируются персонажи и обновляется положение камеры, а внутри Render происходит собственно процесс отрисовки игровой сцены и персонажей. Более подробно об этом мы поговорим на следующей страничке данного урока |
||
[назад] [далее] [к содержанию] |
Обновления
и новости о развитии Delphi DirectX проекта http://www.megainformaticsite.pochta.ru http://www.megainformatic.boom.ru http://www.megainformatic.narod.ru
|
|||||||||
по всем вопросам пишите на megainformatic@mail.ru или оставьте сообщение на форуме |
|||||||||
Обмен ссылками | |||||||||
|
|||||||||
(с) МЕГА ИНФОРМАТИК 2006-2009 |