Программирование 3D-игр в DirectX на Delphi
 
         
    [Главная] [Новости] [Статьи] [Игры] [Проекты] [Автор]  
         
    [Архив новостей]    
         
  [Форум] на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы  
         
  Основы 3D-программирования DirectX9 в Delphi 2006: теоретические и практические основы создания игр.  
     
     
Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...]
 
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi]
[Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX]
 
Что такое Delphi DirectX ?
     
  [назад] [далее] [к содержанию]  
     
 

Мы рассмотрим некоторые особенности, которые могут встретиться в примерах

delphi_dx9\samples\DirectX90\Direct3D

предполагается, что папка delphi_dx9 это та самая папка, куда Вы распаковали содержимое архива delphi_dx9.rar

 
     
 

Прежде чем компилировать любой пример исходного кода в Delphi 2006 (или другой версии, которую Вы используете) нужно

1) Проверить настройки открытого проекта Project > Options > Directories/Conditionals > Search path

Вот пути, которые Вам нужно использовать в том случае, если Вы используете код примеров из папки Direct3D архива delphi_dx9.rar

..\..\..\..\dx9_headers\Borland_D9
..\..\Common

Если пути к папкам с библиотеками исходного кода delphi directx 9 заданы неверно, то Вы получите ошибки компиляции

2) Перед запуском созданного exe-файла скопируйте в папку проекта файлы

D3DX9sab.dll

DXErr9ab.dll

Если пример использует какие-либо ресурсы (модели, текстуры, звуковые файлы), то Вы должны позаботиться о том, чтобы приложение могло найти их. Должна быть корректно установлена последняя версия DX SDK в Вашей системе, либо Вы должны модифицировать пути к ресурсам в исходном коде так, чтобы разместить их внутри папки данного проекта в отдельной папке, например внутри подпапки Media

В противном случае Вы получите ошибки при исполнении приложения

 
     
 

В данном уроке мы попробуем разобраться в работе примера MultiAnimation

Основное, что нас будет интересовать в первую очередь - это особенности использования своих собственных анимированных 3D-моделей, содержащих несколько цепочек анимации в приложениях Delphi DirectX 9

 
     
 

Модели можно создать и анимировать средствами 3ds max. Об этом рассказано в отдельных статьях - посвященных вопросам работы в 3ds max

Там же рассмотрены некоторые вопросы создания анимированных моделей и рассказано об их экспорте в формат X, а также об экспортерах, которые можно использовать для этих целей.

 
     
 

Базовая задача этого урока:

создать простую анимированную модель с 4мя анимациями и внедрить ее в пример MultiAnimation

 
     
  Когда я открыл код примера MultiAnimation из Delphi 2006 и попробовал откомпилировать то получил множество предупреждений (warnings), exe-файл при этом был создан, но хотелось бы от них избавиться.  
     
 

И вот каким образом.

в модуле D3DApp.pas

EWin32Error нужно заменить на EOSError т. к.

EOSError replaces EWin32Error, which is now deprecated

procedure RaiseLastOSError;
var
LastError: Integer;
//Error: EWin32Error;
Error: EOSError;
begin
LastError := GetLastError;
if LastError <> 0 then
{Error := EWin32Error.CreateResFmt(@SOSError, [LastError,
SysErrorMessage(LastError)])}

Error := EOSError.CreateResFmt(@SOSError, [LastError,
SysErrorMessage(LastError)])
else
//Error := EWin32Error.CreateRes(@SUnkOSError);
Error := EOSError.CreateRes(@SUnkOSError);

Error.ErrorCode := LastError;
raise Error;
end;

 
     
 

добавить DXTypes в секцию interface пункт uses в модулях

D3DFont.pas, Tiny.pas, MultiAnimationUnit.pas,

 
     
   
     
 

После этого всё будет ОК, и никаких ошибок и предупреждений! И это хорошо!

Теперь наша задача: создать собственную анимированную модель в 3ds max, такую, чтобы она работала в данном примере без изменений в коде или с минимальным количеством таких изменений.

Следует сразу же заметить, что модель должна быть анимирована с использованием анимации вида SkinnedMesh, т. е. скелетной анимации.

Об этом рассказывается в отдельной статье - Основы 3d-анимации, экспорт скелетной анимации

Если Вы используете 3ds max самых последних версий (2008, 2009), то для экспорта анимации лучше всего подойдет экспортер kwXport, о нём немного рассказано в статье Особенности экспорта моделей и анимации экспортером kWXPort080719 из 3ds max 2009

 
     
 

возьмем за основу модель roboo.rar создав четыре простейшие анимации и экспортируем в формат X

Анимационные последовательности должны быть с теми же именами, что и у модели tiny_4anim.x

т.е. -

Loiter, Walk, Jog, Wave

Почему? Откройте Блокнотом файл tiny_4anim.x и выполните поиск по ключевому слову AnimationSet

Вы найдете внутри файла именно такие имена анимационных последовательностей, а они как раз и используются в коде примера MultiAnimation

Поэтому чтобы пока избежать изменений кода нужно использовать именно такие анимации и в такой последовательности

В нашем примере

Loiter 0-20 кадры, Walk 20-40, Jog 40-60, Wave 60-80

Именно эти анимационные последовательности нужно задать при экспорте roboo экспортером kwXport

Причем добавлять анимационные последовательности нужно с конца - сначала Wave, затем Jog, потом Walk и Loiter

 
     
 

Самое главное, что потребуется сделать прежде чем выполнять экспорт анимированной модели - из всех объектов представляющих персонаж собрать объект Character. Для этого нужно выбрать модель, все элементы скелета, иерархию связанных объектов (dummy и IK-Chain) - т. е. все элементы представляющие персонаж как единое целое. После этого нужно выполнить команду Create Character

Поскольку команда может отсутствовать в меню 3ds max, то ее нужно туда сначала добавить, например добавим эту команду в раздел меню Animation

Customize > Customize User Interface > Menus > выбрать Category: Character > нажать New > ввести имя, например Create a Character > в правой части окна открыть узел Animation и перетащить в неё из левой части пункт Create a Character

 
     
   
     
  Теперь нужно нажать кнопку Save и сохранить изменения в файле настроек интерфейса 3ds max  
     
  После этого в меню Animation появится новый пункт Create a Character - это и есть та самая команда которую нужно выполнить выбрав все элементы персонажа  
     
  После этого можно выполнить экспорт созданной анимированной модели в формат X используя указанные анимационные последовательности начиная с конца, а затем проверить результат работы с данной моделью в приложении MultiAnimation.exe  
     
   
     
 

Для использования модели roboo.x в коде модуля MultiAnimationUnit.pas нужно строку

Result := DXUtil_FindMediaFileCch(sXFile, MAX_PATH, 'tiny_4anim.x');

заменить на

Result := DXUtil_FindMediaFileCch(sXFile, MAX_PATH, 'Media\Models\roboo.x');

в данном примере модель я расположил внутри указанной папки, которая находится в папке примера MultiAnimation

Если модель использует текстуру, а текстура размещена например в папке Media\Textures, то нужно открыть текстовый файл roboo.x найти в нём строку TextureFileName содержащую ссылку на имя файла текстуры и задать данный относительный путь, т.е.

 

 
     
   
     
   
     
  Если модель состоит из нескольких мешей, то такую замену нужно выполнить для каждого из них выполнив последовательный поиск по всему файлу.  
     
  После этого наличие текстуры на модели гарантировано.  
     
 

Модель содержащую готовый к экспорту персонаж можно скачать с архивом roboo_4anim.rar

Внутри данного архива содержатся две модели в формате 3ds max 2009

roboo_anim_go_4animset.max - еще не содержащая добавления объекта Character

и

roboo_anim_go_4animset_refine.max - содержащая объект Character, включающий всю иерархию объектов принадлежащих данному персонажу

 
     
 

Если попытаться экспортировать модель roboo_anim_go_4animset.max

то экспортированный результат roboo.x будет давать ошибку в приложении, из-за отсутствия корневого объекта Character

модель roboo_anim_go_4animset_refine.max позволит решить эту проблему и экспортированный результат прекрасно работает в приложении MultiAnimation

 
     
 

Заметка по поводу пересохранения модели в двоичный формат X.

После того, как работа с X-файлом анимированной модели проверена, Вам захочется пересохранить эту модель в двоичном формате X-файла. Такой формат является более компакнтым, но его уже нельзя будет редактировать как обычный текстовый файл.

Для пересохранения проверенной в работе модели из текстового формата X в двоичный формат можно использовать утилиту mview.exe из DX SDK 8. Если у Вас под рукой этой утилиты нет, то я Вам могу ее предоставить. Также можно обратиться к документации по DirectX к разделу DirectX Graphics > Direct3D 9 > Programming Guide > Getting Started > X Files (Legacy) > Loading an X File, Saving to an X File

где подробно описано как происходит работа с X-файлами.

Я попробовал использовать анимированную модель в двоичном формате X, но использование ее в приложении MultiAnimation приводит к ошибке. Позже нужно будет разобраться какую особенность нужно учитывать, чтобы загружать анимированную модель в двоичном формате.

 
     
     
     
  Как видим, барьер преодолен и можно смело двигаться дальше - создавать более сложные модели и анимации персонажей и внедрять их в свои приложения Delphi DirectX 9  
     
  В следующем уроке Мы займемся изучением кода примера MultiAnimation и перейдем к написанию собственного класса для работы с анимированными 3D-моделями  
     
  [назад] [далее] [к содержанию]  
       
 

Обновления и новости о развитии Delphi DirectX проекта
смотри на сайтах:

http://www.megainformaticsite.pochta.ru

http://www.megainformatic.boom.ru

http://www.megainformatic.narod.ru

 

   
       
     
 

по всем вопросам пишите на megainformatic@mail.ru или оставьте сообщение на форуме

 
     
   Обмен ссылками  
     
     
             
 
 
         
(с) МЕГА ИНФОРМАТИК 2006-2009

 

Hosted by uCoz