ria pc game
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
18 февраля 2019 5:05
Вход Регистрация Забыли пароль ?

megainformatic - Модуль для регистрации пользователя на сайте
Модуль для регистрации пользователя на сайте Всё течет, всё изменяется ... И рано или поздно Ваш сайт или сервис дорастёт до того, что Вам понадобится регистрировать новых пользователей на сайте. Хорошо, если модуль регистрации уже встроен в вашу cms. Однако тогда, когда Вам потребуется сделать с этим модулем что-то нестанда
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Как создать игру - Веселый Единственный Буквоежка - игровое меню

megainformatic - Как создать игру - Веселый Единственный Буквоежка - движение и анимация героя

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

megainformatic - Примеры моих работ

megainformatic - Музыкальные темы

megainformatic - Уроки Photoshop - Чудеса

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Онлайн Обучение, Репетитор

megainformatic - Уроки Photoshop - Рисуем и Анимируем

megainformatic - Уроки Photoshop - Рисуем и Анимируем - Урок 1 - Старт

megainformatic - Уроки Photoshop - Рисуем и Анимируем на AllSoft.ru

megainformatic - DirectX 9c - Изучаем пример MultAnimation

megainformatic - megainformatic cms Система Управления Контентом

megainformatic - Темы для WordPress

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - Макет дизайна Вашего сайта

скачать megainformatic cms

megainformatic - Итоги 2010 года

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - как создать инсталлятор для собственной cms

megainformatic - Новости - страница 2

Нововведения в megainformatic cms

Web Администрирование

Уроки Верстки

Система автоматизированной е-майл рассылки

Система автоматизированной е-майл рассылки

megainformatic - Выгрузка файла на сайт

megainformatic - выпадающее меню на html и css

megainformatic - Использование checkbox

Краеугольная особенность работы Web-form на примере смены состояния checkbox

Технологии WEB

Технологии WEB - AJAX-запросы

Часто Задаваемые Вопросы

Продукты

Проблемы с кодировками при отображении страниц

игра Нечто: Необъяснимое Нить Накала - "в плену желаний"

Система Автоматизации Доставки Электронных Заказов megainformatic cms e-pro

megainformatic cms e-pro Автоматизация Обработки Уведомлений о Заказах по партнерским программам

megainformatic cms e-pro Автоматизация Обработки Уведомлений о Заказах по партнерским программам

webinformatic: Музыкальная страничка трэкера

megainformatic - Создание музыки и звука

webinformatic: Создание музыки и звука: урок 2

megainformatic - Создание музыки и звука: урок 3 - настройка Impulse Tracker для работы в WinXP

megainformatic - Создание музыки и звука: урок 4 - Введение в Mod Plug Tracker

megainformatic - Создание музыки и звука: урок 5 - Первая композиция в Mod Plug Tracker

megainformatic - Создание музыки в Impulse Tracker 2.14 - урок 6 - Ввод Нот

megainformatic - Создание музыки в Impulse Tracker 2.14 Первая мелодия

megainformatic - Создание музыки в Impulse Tracker 2.14 Настройка параметров сэмплов

megainformatic - Создание музыки и звука: теория и практика создания трэкерской музыки

megainformatic - Инструкция по оплате услуг средствами WebMoney

Основы работы в Microsoft Visual Studio 2008 и DirectX 9 (DX SDK Aug 2008)

Введение в программирование игр на С++ для платформы DirectX 9 - Первый старт

Введение в программирование игр на С++ для платформы DirectX 9 - Меняем иконку приложения

Введение в программирование игр на С++ для платформы DirectX 9 Добавляем другую модель

Введение в программирование игр на С++ для платформы DirectX 9 Программирование игр в directx. Hello, World!

подробнее

     
 

Основы 3D-программирования DirectX8.1 в Delphi 6-7: теоретические и практические основы создания игр

 
     
  [статьи] [как создать игру ну, погоди!] [к содержанию]  
     
 

Подводная лодка и подводный мир

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

Подводные миры
 

- имитировать подводную сцену при помощи тумана;

- использовать вершинные шейдеры для имитации бликов от воды на поверхности морского дна и подводной лодки;

 

Для изучения методик Вам потребуется скачать:

- архив с общим кодом -


[downloads:10]
(если Вы его еще не скачали в предыдущем уроке)

- исходный код данного примера (32 Кб)



[downloads:22]

- медиа-файлы (модели, текстуры, шейдеры) - (676 Кб)



[downloads:23]
 

Краткое описание приложения: данное приложение предсталяет WinAPI-приложение для использования библиотеки DirectX 8.1. Для обращения к функциям библиотеки d3dx8.lib используется ее dll-аналог - D3DX81ab.dll

Файл DXErr81ab.dll представляет дополнительную библиотеку для вывода сообщений об ошибках приложения.

Поскольку Ваше приложение будет обращаться к этим библиотекам, необходимо разместить эти файлы в той же папке, что и исполнимый файл (*.exe) Вашего DirectX-приложения на Delphi.

 

Краткий обзор исходного кода модуля Main.pas:

класс приложения CSubmarineD3DApp производится от CD3DApplication (префикс типа C вместо T - как принято в Delphi - дань традициям заложенным в исходном коде на C++).

В конструкторе constructor CSubmarineD3DApp.Create; инициализируются все основные поля класса приложения, здесь же устанавливается цвет тумана - m_dwFogColor := D3DCOLOR_ARGB(255, 58, 180, 197);

 
Инициализация самого класса CD3DApplication происходит в коде модуля проекта - submarine.dpr путём вызова метода d3dApp.Create_
 

Т.к. класс CD3DApplication описан в модуле D3DApp8.pas, то заглянув в метод function CD3DApplication.Create_ Вы и узнаете какие методы вызываются во время инициализации вашего D3D-приложения:

{... здесь мы опускаем код, необходимый для инициализации Direct3D8, построения списка устройств и создания окна приложения}

// запускается DX-Timer - для организации вызовов периодических процессов D3D-приложения - это основной движущий процесс любого DirectX-приложения!

DXUtil_Timer(TIMER_START);

// первоначальная инициализация сцены Вашего 3D-приложения

OneTimeSceneInit;

// все остальные необходимые инициализации: InitDeviceObjects, RestoreDeviceObjects, InvalidateDeviceObjects,
DeleteDeviceObjects. Также обратите внимание на англоязычные комментарии (Если знаете английский :))

Initialize3DEnvironment;

 

Теперь Вам должно быть понятно откуда вызываются основные методы нашего приложения (InitDeviceObjects, RestoreDeviceObjects, InvalidateDeviceObjects, DeleteDeviceObjects).

Методы Render для отрисовки статичных объектов сцены и метод FrameMove для анимированных объектов вызываются в методе function CD3DApplication.Render3DEnvironment. Этот метод в свою очередь вызывается из function CD3DApplication.Run.

function CD3DApplication.Run вызывается в модуле проекта - submarine.dpr путём вызова d3dApp.Run

 
Обработка сообщений системы (а не событий в классе TForm!!!) производится в методе function CSubmarineD3DApp.MsgProc. Почему? Вспомните - наше приложение WinAPI, т.е. без использования VCL. Именно поэтому!
 

Интерес представляет также содержимое метода d3dApp.Run, заглянув в который Вы увидите

...

// Render a frame during idle time (no messages are waiting)
if (m_bActive and m_bReady) then
begin
if FAILED(Render3DEnvironment) then
SendMessage(m_hWnd, WM_CLOSE, 0, 0);
end;

т.е. метод Render3DEnvironment вызывается во время отсутствия активности пользователя и других сообщений системы.

 
Это был краткий обзор примера.
 
[статьи] [как создать игру ну, погоди!] [к содержанию]
 
 
 
 
 
     
     
     
     
     
подробнее

     
  [Все уроки 3ds max] [Галерея моделей] [назад] [далее]  
     
  Подготовка модели к использованию скелетной анимации  
     
 

Подготовка модели к использованию скелетной анимации включает следующие шаги -

1) создание и текстурирование модели

2) создание скелета для данной модели

3) привязка скелета к текстурированному мешу (Skinned Mesh) при помощи модификатора Skin и настройка степени влияния костей на вершины модели

4) создание анимации

5) экспорт модели в нужный формат (в нашем случае - X).

 
Если Вы новичок в создании и текстурировании моделей в 3Ds Max, то отправляем Вас изучать базовые уроки посвяшенные 3Ds Max. А пока не вдаваясь в подробности моделирования и текстурирования персонажа можете сразу загрузить себе готовые модель и текстуру - nn (108 Кб). Замечание: все предоставленные модели в формате 3ds max 7.0! Это значит что в более ранних версиях (6, 5 и ниже) они открываться не будут!!!
 
модель Fedja (108 Кб)
 
Откройте модель из 3Ds Max 7 (или выше). Если модель появилась в сцене без текстуры, то это объясняется просто - 3Ds Max сохраняет абсолютные пути к файлам текстур. Значит Вам нужно исправить этот путь, т.к. в Вашей системе он естественно иной.
 
Проблема решается следующим образом - откройте редактор материалов Rendering > Material Editor и в открывшемся окне в группе Blinn Basic Parameters напротив цвета Diffuse нажмите кнопочку M (на рисунке обведено красным кружком!)
 
открытие свойств рассеянного света материала в редакторе материалов 3Ds Max7
[изображение "открытие свойств рассеянного света материала в редакторе материалов 3Ds Max7"]
 
В открывшемся окне свойств диффузного цвета в группе Bitmap parameters нажмите кнопку напротив пункта Bitmap и укажите корректный путь к текстуре в вашей системе -
 
коррекция пути к файлу текстуры
[изображение "коррекция пути к файлу текстуры"]
 
выбор файла текстуры для формирования корректного пути к нему в вашей системе
 
Если после этих манипуляций изображение текстуры так и не появилось на поверхности модели, значит оно просто не отображается или не применено. Исправим это.
 
Снова откройте редактор материалов (см. изображение "коррекция пути к файлу текстуры" выше). В поле Diffuse Color из выпадающего списка выберите название материала orig_fedja
 
переход к свойствам материала orig_fedja
 
Это вернет Вас к окну свойств материала orig_fedja в целом (см. изображение "открытие свойств рассеянного света материала в редакторе материалов 3Ds Max7" ).
 
Нажмите кнопку Show Map in Viewport -
 
отображение материала в окне вида
 
И если это не решило проблему - перетащите материал из своего слота в редакторе материалов на изображение модели в окне вида (Viewport) -
 
применение созданного обновленного материала к модели
 

Эту операцию придется повторить для всех объектов из которых состоит модель.

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

 
Теперь приступим к коррекции модели для целей экспорта в формат X. Выберите все объекты модели в сцене, сгруппируйте их в одну группу Group > Group и выбрав инструмент Select and Move задайте нулевые значения положения модели относително центра мировой системы координат (world coordinate system) - X =0,0; Y = 0,0; Z=0,0
 
расположение модели в центре мировой системы координат
 
Эта особенность является важной, т.к. любые смещения относительно центра будут неизбежно приводить к некорректному расположению модели в игровых сценах - она всегда будет смещена.
 
Коррекция масштаба изображения - пока модель сгруппирована можете сразу же отмасштабировать ее до нужных размеров. Это будет необходимо, т.к. приложение SkinnedMesh рассчитано на другой масштаб модели или придется масштабировать модель уже в коде - программным путем. В нашем случае модель уже не нуждается в масштабировании, т.к. размеры были подогнаны, но для пробы можете все же сделать это.
 
Экспортируйте модель в формат X при помощи любого из экспортеров которые были описаны выше.
 
Проверьте результат экспорта в любой из утилит для просмотра мешей или в приложении SkinnedMesh.
 
Это были предварительные шаги для подготовки Вас и Вашей модели к использованию концепции скелетной анимации.
 
Следующий этап - 2 - это создание скелета для модели.
 
Скелет - это набор вспомогательных моделей образующих иерархию. Скелет состоит из костей (Bones). Кости будут в дальнейшем влиять на положение связанных с ними вершин текстурированной модели (Skinned Mesh).
 
Скелет относится к вспомогательным объектам и поэтому в игровой сцене он будет невидим, поэтому его необходимо расположить внутри модели персонажа. И хотя кости скелета относятся к отрисовываемым (rendered) объектам - их можно выводить на rendering в 3ds max, в игровых сценах и приложениях они отрисовываться не будут! Таким образом скелет в виде видимой модели нужен только на этапе его разработки и создания анимации.
 
В игровом приложении скелет отрисовываться не будет, а будет лишь воздействовать своими матрицами трансформации на трансформацию связанных с ним вершин модели персонажа.
 
Поскольку мы сейчас будем внедрять скелет внутрь тела персонажа нам нужно чтобы он был виден, но и не мешал создавать и/или выбирать отдельные кости. Для этого давайте"заморозим" модель и сделаем "сквозной" вид обзора (See-Through).
 
Выделите модель (или все ее составляющие объекты если Вы ее разгруппировали).
 
Щелкните правой кнопкой по модели и выберите пункт меню Properties, в группе Display Properties установите флажок See-Through. Нажмите ОК. При этом модель (все выделенные объекты) станут полупрозрачного серого цвета.
 
установка "сквозного" вида модели
 
Снова щелкните правой кнопкой и выберите Freeze Selection. Это приведет к "заморозке". Для разморозки используйте Unfreeze. Для восстановления нормального вида убирайте флажок See-Through.
 
Теперь когда модель видна, но недоступна для выбора нам ничто не будет мешать и мы свободно можем создавать скелет и размещать его внутри модели.
 
Выберите пункт меню Character > Bone Tools. Перед вами откроется панель создания костей скелета -
 
панель создания костей скелета
 
Отдельные кости мы будем формировать в разных плоскостях, поэтому Вам нужно будет для их размещения включать соответствующий вид - фронтальный (Front), боковой слева или справа (Left, Right) и т.д.
 
Для этого воспользуйтесь кнопкой Maximize Vieport Toggle в нижнем правом углу окна 3ds max -
 
c последующим выбором окна соответствующей проекции и его максимизацией/минимизацией этой же кнопкой.
 
Создадим кости для левой руки. Выполнять это будем в окне фронтальной проекции (Front viewport - см. рис. выше).
 
Левая рука персонажа будет соответствовать правой стороне на экране (потому что с точки зрения персонажа его левая рука, а с вашей точки зрения она расположена в правой части экрана). Т.е. мысленно поставьте себя спиной к персонажу, тогда поймете о чем я говорю.
 
Нажав кнопку Create Bones и щелкая мышью постройте 4 кости идущие от плеча к кисти как показано на рисунке. В конце щелкните правой кнопкой. Пятая концевая кость носит вспомогательный характер и должна выходить за пределы руки персонажа (как и показано на рисунке). Она будет служить концевой точкой прикрепления Анимационного инструмента инверсной кинематики (IK Solver - HI Solver).
 
 
 
[назад] [далее]
 
     
  [Все уроки 3ds max] [Галерея моделей]  
     
     
     
     
подробнее

     
 
Урок 7 2D-анимация
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 1] [далее] [к содержанию]
 

При создании 2D-анимации нужно учитывать следующие моменты:

- покадровое размещение анимированного изображения нужно производить в файле формата bmp, tga или dds. jpg для этих целей не подойдет, т.к. из-за сжатия возможно появление посторонних пикселей в тех местах изображения, где должен быть прозрачный фон;

- текстура обязательно должна быть квадратной и лучше одного из типовых размеров - 32х32, 64х64, 128х128, 256х256, 512х512, 768х768, 1024х1024 пикселя, если не учесть этот момент, то будут наблюдаться сдвиги картинки в кадре;

- если анимируется не один игровой объект, а несколько, то в класс TD3DImage2D или в производный от него класс нужно внести код, рассчитанный на запоминание текущего кадра и индивидуальной скорости анимации для каждого из игровых объектов, иначе все объекты будут выдавать синхронную и очень ускоренную анимацию из-за одновременных обращений к данным одного и того же разделяемого экземпляра класса TD3DImage2D. Далее будет показано как это сделать.

 
Если Вы не совсем понимаете в чём состоит суть создания анимации, то советую сначала прочесть статью Создаем анимацию хотьбы волка в Photoshop и ImageReady
 
Для того, чтобы использовать такие анимированные изображения в игре можно воспользоваться классом TD3DImage2D, в который были добавлены возможности для анимирования.
 

Для использования класса TD3DImage2D нужно выполнить следующие шаги

в секцию uses кода модуля, в котором Вы будете использовать данный класс добавить ссылку на модуль D3DGUI.pas (если Вы её еще не добавили, если же Вы уже используете в коде данный класс, пусть даже не для анимированных изображений, то естественно вторично добавлять ссылку в uses не нужно)

 

 

В папку ресурсов проекта добавляем нужное изображение, например, я это буду делать на примере добавления индикатора в игре "в плену желаний"

в папку Media\Textures\scene1 копирую нужный мне файл adgezio_indicator.tga

описываем имя файла текстуры в виде константы, это можно сделать в любом месте секции интерфейса нужного модуля вашего проекта

const

{...}

DesiresIndicatorTexture = 'Media\Textures\scene1\adgezio_indicator.tga';

В класс D3D-приложения, например TD3DGameApp добавляю новое поле -

DesiresIndicatorImage: TD3DImage2D;

это может происходить не только в классе приложения, но и например, в моём случае я добавляю поле в класс не приложения, а игровой сцены - TGameScene7Title, но суть от этого не меняется.

Далее с этим объектом (для корректного его использования) нужно проделать стандартные шаги, как и аналогичных объектов применяющих данный класс.

В методе конструктора класса (в моем проекте это TGameScene7Title.Create)

DesiresIndicatorImage := nil; //данный шаг необязателен, т.к. в экземпляре класса все указатели первоначально //инициализируются в nil, но данная строка кода явно демонстрирует этот шаг в коде

в методе загрузки объектов игровой сцены (или инициализации класса) выполняем загрузку текстуры из файла -

TGameScene7Title.LoadMiniGame2

{...}

DesiresIndicatorImage := TD3DImage2D.Create(g_d3dApp.m_d3dfmtTexture);
if DesiresIndicatorImage = nil then Exit;
hr := DesiresIndicatorImage.InitDeviceObjects(m_pd3dDevice, DesiresIndicatorTexture);
if Failed(hr) then Exit;

в методах реставрации (Restore), инвалидации (Invalidate) и освобождения (Free) нужно добавить соответствующий код -

TGameScene7Title.RestoreMiniGame2

{...}

if DesiresIndicatorImage <> nil then
DesiresIndicatorImage.RestoreDeviceObjects;

TGameScene7Title.InvalidateMiniGame2

{...}

if DesiresIndicatorImage <> nil then
DesiresIndicatorImage.InvalidateDeviceObjects;

TGameScene7Title.FreeMiniGame2

{...}

SAFE_DELETE(DesiresIndicatorImage);

 

Эти операции относятся к любому объекту класса TD3DImage2D не зависимо от того, будет ли он анимированным или статичным.

Теперь перечислим действия обязательные для того, чтобы анимация заработала, т.е. начали в определенной последовательности и с определенной скоростью меняться кадры анимированного изображения.

в методе загрузки объектов игровой сцены после кода загрузки текстуры нужно добавить ряд параметров, касающихся анимации -

TGameScene7Title.LoadMiniGame2

{...}

DesiresIndicatorImage.Width := 70;
DesiresIndicatorImage.Height := 16;
DesiresIndicatorImage.TextureOffsetX := 0;
DesiresIndicatorImage.TextureOffsetY := 128;
DesiresIndicatorImage.Frame := 0;
DesiresIndicatorImage.FramesPerLine := 3;
DesiresIndicatorImage.Delay := 10;
DesiresIndicatorImage.fMaxFrame := 5;

Эти строки задают размер кадра анимации, смещение до начала анимационной последовательности на текстуре (если таковых несколько), начальный кадр анимации, количество кадров на строку анимационной последовательности, скорость анимации, определяемая временной задержкой в миллисекундах, номер последнего кадра анимационной последовательности.

 

в методе рисования сцены нужно добавить рисование анимированного или статичного изображения -

TGameScene7Title.DrawMiniGame2

{...}

DesiresIndicatorImage.DrawScaled(-1.0, 1.0, 0.9, 0.35, 0.35,
DrawD3DImage2D_Filtered, 255, True);

Обратите внимание, что для анимированных изображений вызывается функция рисования DrawScaled с новым параметром True, который необходим для анимированных изображений и определяет корректную выборку кадров

 

в методе анимирования сцены нужно добавить 2 строки кода -

TGameScene7Title.AnimMiniGame2

{...}

FTimeLapsed := DXUtil_Timer(TIMER_GETELAPSEDTIME);

DesiresIndicatorImage.FrameMove(FTimeLapsed);

первая строка потребует, чтобы Вы объявили FTimeLapsed: Single; внутри класса игровой сцены и производит запрос интервала времени прошедшего с последнего вызова от системного таймера

вторая строка кода передает полученный интервал в метод анимирования изображения. если Вы используете подвижный спрайт, то Вам лучше описать его в виде отдельного класса, а его перемещение по экрану реализовать внутри его метода анимации или так как это выполнено в игре "Ну, Погоди!". В её коде для анимационного ролика создан отдельный модуль GameCartoonScript.pas и отдельный класс TGameCartoon. Внутри него и происходит всё самое интересное касающееся реализации анимации 2D-спрайтов.

 

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

В методе анимации TGameScene7Title.AnimPauseScreen

{...}

for i := 0 to StarsNum-1 do begin
StarsImage.Delay := Stars[i].Delay;
//заносим текущую скорость в экземпляр TD3DImage2D
StarsImage.Frame := Stars[i].Frame;
//а также номер текущего кадра
StarsImage.FrameMove(FTimeLapsed);
//выполняем анимацию
Stars[i].Frame := StarsImage.Frame;
//запоминаем новый текущий кадр в данных игрового объекта
end;

В методе рисования TGameScene7Title.DrawStars;

for i:= 0 to StarsNum-1 do begin
StarsImage.Frame := Stars[i].Frame;
//заносим текущий кадр в экземпляр TD3DImage2D
StarsImage.DrawScaled(Stars[i].vPos.x,
//выполянем рисование данного текущего кадра
Stars[i].vPos.y, 0.9,
Stars[i].Size, Stars[i].Size, DrawD3DImage2D_Filtered,
Stars[i].Alpha, True);
end;

 
Как видите всё достаточно просто, нужно лишь запоминать данные об текущем кадре и скорости анимации в каждом игровом объекте. Для сильно различающихся по свойствам игровых объектов (в частности использующих разные экземпляры TD3DImage2D) конечно же лучше использовать производные классы.
 
В следующем уроке Вы узнаете как реализовать многие из особенностей игрового проекта, которые не имеют прямого отношения к самому игровому процессу, но являются важной частью любого игрового приложения - режимы сохранения/загрузки текущей игры, специфичные режимы игры "Ну, Погоди!", запуск браузера для отображения сайта разработчика или другого интернет-ресурса.
 
 
 
[назад] [страница 1] [далее] [к содержанию]
 
     
     
     
     
подробнее

     
  [Все уроки 3ds max] [Галерея моделей] [назад] [далее]  
     
 
Построение ирерархических связей между объектами и основы 3d анимирования.
 
Чтобы модели не "рассыпались" на составные части при экспорте образуйте из них иерархию путем установления связей (Select And Link) между главными и дочерними объектами. Например, если руки, ноги и голова - отдельные объекты, то тело может стать главным объектом (корневым - root), а к нему будут привязаны эти объекты. Точно также если рука состоит из плеча и предплечья (как отдельных объектов), то плечо может быть родителем (root) для предплечья в иерархической связи между ними. При создании скелета иерархические связи между костями цепочки созданной за один раз устанавливаются автоматически. При этом первая созданная кость цепочки и будет родительским (корневым) объектом, а последующие кости будут связаны между собой точно такими же последовательными связями - от родителя к потомкам: плечевая кость -> кость предплечья -> кости (кость) кисти -> кость (кости) пальцев.
 
В данной цепочке перемещение плечевой кости приведет к перемещениям всей цепочки связанных костей. Это и будет прямая кинематика (forward kinematics или FK). Если рассматривать данную манипуляцию в обратной последовательности - перемещение пальцев, то инверсная кинематика (IK) вызовет соответствующие смещения всех родительских костей - кистевых - предплечья - плеча.
 
Создание анимации
 
Мы с Вами рассмотрим создание анимации на примере объектной, т.е. будет взята модель построенная из отдельных примитивов, а анимация будет основана на простых трансформациях этих примитивов.
 
Скачайте данный архив - object_anim (26 Kb) и откройте модель necto.max из 3ds max 7.0 (или выше).
 
модель Necto
 
Вы увидите модель некоего Некто, полностью построеннную из простых примитивов. Можете посмотреть систему иерархических связей данной модели - Graph Editors > Schematic View
 
иерархические связи модели Necto
 
Все связи сделаны при помощи Select And Link от подчиненного объекта к главному. Как видите корневым (root) объектом является примитив body. Все остальные примитивы напрямую или посредством родителя присоединены к нему.
 
Это даст Вам возможность с одной стороны иметь цельный неразрывный объект (модель), а с другой анимировать каждый из примитивов с использованием простых трансформаций - смещения, вращения, масштабирования.
 
Попробуем анимировать простейшую хотьбу.
 
Расположите модель удобным образом и выберите левую ногу (LLeg).
 
выбор левой ноги (LLeg)
 
Настроим параметры анимации. Пусть наша анимация будет качеством Film (24 кадра в секунду - 24 fps) и длительностью 24 кадра (1 секунду).
 
В панели анимации нажмите кнопку Time Configuration
 
панель анимации и кнопка Time Configuration
 
В открывшемся окне диалога задайте указанные параметры и нажмите ОК -
 
 
Вы увидите теперь, что временная шкала анимации отображает искомые 24 кадра, что нам и нужно.
 
Создадим анимацию движения левой ноги по ключевым кадрам -
 
В панели анимации нажмите кнопку Auto Key для автоматической генерации ключевых кадров -
 
включение режима автоматической генерации ключевых кадров
 
Пусть движение ноги будет происходить за 4 фазы, каждая по 6 кадров. Переместите бегунок анимации на 6 кадр (на рисунке 0/24 - обведен кружком).
 
Выполните перемещение и вращение ноги так, чтобы оформился шаг -
 
некто делает шаг
 
После вращения Вы увидите, что нога отделилась от тела, поэтому переместите ее так, чтобы этого не происходило.
 
Теперь переместите бегунок на 12 кадр и щелкните по нему правой кнопкой. В открывшемся диалоговом окне в поле Source Time введите 0, нажмите ОК
 
создание ключевого кадра - положение ноги в крайнее переднем
 
Это приведет к копированию ключевого кадра из 0 в 12 и к возврату ноги в исходное состояние.
 
Теперь сделайте подобную анимацию, но для движения ноги в противоположном направлении.
 
оложение крайнее заднее
 
Перейдя на 24 кадр скопируйте ключевой кадр из 12 в 24 -
 
последний шаг создания анимации левой ноги
 
Отключите кнопку Auto Key. Попробуйте проиграть анимацию движения левой ноги путем перемещения бегунка или путем нажатия кнопки Play на панели анимации. Пример законченной анимированной модели - necto_go (18 Kb).
 

Для остальных конечностей и тела анимация осуществляется аналогично. Только имейте в виду, что связи типа Link (при помощи Select And Link) работают только односторонне, т. е. перемещая родителя можно переместить и все связанные с ним объекты, но не наоборот. Перемещая дочерний объект Вы не переместите родительский! Ведь это не инверсная кинематика!!!

Созданный анимированный файл легко экспортировать в формат X экспортером PandaDXExport для применения в Direct3D8, Direct3D9 и DXExtensionsMax.gup только для Direct3D9. При экспорте экспортером PandaDXExport на вкладке Animation не забудьте указать верную анимационную цепочку и частоту кадров, возможно даже придется немного поэкспериментировать с параметрами экспорта, чтобы экспорт анимации происходил корректно.

 
Данный тип анимации (как уже было сказано выше) носит название объектной, т.к. осуществляется за счет простых трансформаций отдельных примитивов модели, образующих ирерархию.
 
Как видите он проще для создания, но и менее изящен. Анимация осуществляется с гораздо меньшими вычислительными затратами по сравнению со скелетной. Такой тип анимации применялся например в игре Warcraft III Reign of Chaos, так что можете сами посудить о всех ее достоинствах и недостатках.
 
Технология создания скелетной анимации осуществляется точно таким же образом с тем лишь отличием, что Вы анимируете скелет, который в свою очередь анимирует связанные с ним вершины модели.
 
Особенности подготовки модели к экспорту скелетной анимации мы рассмотрим ниже.
 
Если Вы возьмете файл fedja_anim_go.max из архива skinned_fedja и попробуете экспортировать скелетную анимацию в формат X при помощи экспортера PandaDXExport, то получите примерно такой результат -
 
результат экспорта fedja_anim_go.max
 
Такой результат анимации Вы получите если будете просматривать ее из DirectX Viewer DirectX SDK 9. Приложение SkinnedMesh вообще не сможет ничего показать давая лишь ошибку.
 
Первое что приходит в голову - это то, что виноват экспортер PandaDXExport. Однако это не совсем так и всё еще можно исправить.
 
Всё дело в том, что руки модели персонажа должны быть уже опущены. Соответственно должны быть опущены и кости скелета рук.
 
модель Феди с опущенными руками
 
Щелкнув по рисунку Вы можете скачать архив fedja_transformed (95 Кб). Он содержит скорректированные модель и скелет, а также анимацию. Коррекция состояла в перемещении вершин модели относящихся к рукам в положение показанное на рисунке. Кости скелета также были трансформированы. Архив также содержит файл fedja_transformed_with_skel_go.max содержащий готовую к экспорту скорректированную модель и скелетную анимацию.
 
Следует заметить, что если Вы сами возьмете из архива файл fedja_transformed_with_skel.max и попробуете настроить корректно огибающие (Envelopes) для весов костей, создадите анимацию, то столкнетесь с проблемой настройки весов для отдельных вершин, которые плохо или совсем не охватываются огибающими. Выше уже говорилось, что такую настройку можно выполнить через Таблицу Весов - Weight Table.
 
кнопка вызова Таблицы весов панели параметров модификатора Skin c открытым узлом Envelope
 
Если выбрать определенную вершину (несколько вершин), для этого нужно установить флажок Vertices в окне параметров модификатора Skin с открытым узлом Envelope -
 
выбранная вершина
 
На рисунке кружком отмечена выбранная на модели вершина
 
Данная вершина при анимации как раз плохо охватывалась огибающей, поэтому жмем кнопку Weight Table и выбираем - Selected Vertices (только для выбранных вершин).
 
 
Поскольку мы выбрали только одну вершину, то она и показана в столбце Vertex ID. Данная вершина должна двигаться вместе с костью RLeg_Bone_Clavicle (если вершина выбрана на правой ноге). Прокручиваем нижнюю полосу прокрутки и находим искомую кость. Задаем для нее коэффициент 1,000. Т.е. данная кость будет полностью определять положение данной вершины.
 
Аналогично корректируются веса влияния костей для всех остальных вершин, чья анимация, если Вы заметите, осуществляется некорректно - т.е. кости движутся, а вершины - движутся слабо или вообще остаются на месте.
 
Это было всё, что я хотел Вам рассказать о проблемах создания и экспорта скелетной (и объектной) анимации. Если что-то было Вам не совсем ясно или не получилось - значит нужно еще попрактиковаться. Тема достаточно сложная и обширная, но она стоит того, т.к. без анимации не обходится ни одна игра. Если всё же вы столкнулись с неразрешимыми на ваш взгляд трудностями, то - пишите, постараюсь ответить.
 
     
  [Все уроки 3ds max] [Галерея моделей] [назад] [далее]  
     
     
Содержимое данной страницы доступно только зарегистрированным пользователям.



Пожалуйста войдите на сайт - Вход

или пройдите процедуру регистрации - Регистрация

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,0757