Мега Інформатик Теорія та практика 3D-ігор - Побудова ігрової сцени

[Головна] [Новини] [Статті] [Ігри] [Проекти][Автор]Основи 3D-програмування DirectX8.1 у Delphi 6-7: теоретичні та практичні основи створення ігор.

Продовжуємо серію уроків, присвячених розробці гри Delphi DirectX.

У цьому уроці розповідається про особливості створення анімації простими трансформаціями об'єктів придатною для експорту в DirectX8 та DirectX9-додаток.

[Усі уроки]При розробці проекту Щось: Незрозуміле виникла необхідність створення анімації простими трансформаціями об'єктів.

мега

Ми будемо виконувати цю роботу на прикладі 3Ds Max 7. Але якщо ви використовуватимете 8 або 9 версію, то все описане також можна застосувати до цих версій.Постановка завдання: була створена модель авто, показана на малюнку. Вона складається з кузова та 4 коліс представлених окремими мішами. Потрібно створити анімацію обертових коліс.

Перше що спадає на думку, це просто взяти об'єкти коліс і обертати їх у часі навколо своєї осі. Здавалося б – все просто. Але виявляється, що при цьому, оскільки моделі коліс створені на основі циліндрів (примітив Cylinder) повернених на 90 градусів навколо осі Y, то спроба обертати отримані колеса навколо осі X призводить до складного повороту, що поєднує зміну початкової орієнтації. Іншими словами, потрібну трансформацію створити не вдається.

Крім того, якщо Ви спробуєте експортувати навіть статичну модель цього авто в такому вигляді - кузов і 4 колеса, то колеса чомусь виявляться зовсім не на своїх місцях. Це стосується як експорту експортером DXExport DX9, так і PandaDX для 3Ds Max 7. Крім того, у додатку DX8 анімацію можна коректно використовуватитільки при експорті PandaDX!

Рішення виявляється тривіально простим, якщо використовувати так звані Dummy-об'єкти і побудувати з них ієрархію.

Що таке Dummy?

Це порожній бокс, що не відмальовується, який може грати роль центру трансформацій, а також служити сполучною ланкою в ієрархії об'єктів.

У 3ds Max 7 даний об'єкт знаходиться в панелі Create у групі Helpers -

мега

Якщо Ви уважно подивіться на малюнок авто наведений на початку цієї статті, то побачите ці бокси. Вони розташовані і біля кузова - один великий і біля кожного з коліс.

Як застосувати отриманий об'єкт на вирішення поставленої задачи?

Потрібно створити 1 великий бокс з Dummy-об'єкта та розмістити його по центру кузова авто.

створити об'єкт Dummy, відмасштабувати до потрібного розміру, вирівняти центром щодо кузова (Align).

Далі потрібно створити менший Dummy та вирівняти щодо одного з коліс.

Тепер потрібно здійснити прив'язку (установити ієрархічний зв'язок) міша даного колеса до цього малого Dummy - wheel_Dummy. Це виконується вибором об'єкта колеса (wheel), натисканням на кнопку Select And Link і протягуванням пунктирної лінії зв'язку до батьківського об'єкта wheel_Dummy поки він не буде виділено білим. Після цього wheel_Dummy стає батьківським об'єктом для wheel та обертаючи wheel_Dummy навколо осі X можна отримати необхідне обертання колеса. Коли Ви це зробите - тобто. запишете анімацію обертання даного wheel_Dummy протягом необхідної кількості кадрів, Вам залишається тільки клонувати даний wheel_Dummy ще 3 рази, розмістити копії щодо 3-х коліс, що залишилися, і здійснити прив'язку цих коліс до відповідних їм Dummy-об'єктів.

В результаті всі 4 колеса обертатимуться однаково.

Тепер Вам залишається тільки виконати прив'язку кузова авто до великого Dummy-об'єкту - base_Dummy, і до нього прив'язати Dummy-об'єкти для всіх 4-х коліс.

В результаті у Вас вийде наступна ієрархія об'єктів – GraphEditors > New Schematic View

теорія

А експорт за допомогою PandaDXExporter дасть потрібний результат.