Вітаю Вас ГостьП'ятниця, 17.05.2024, 12:49

CreateGames
Створення комп'ютерних ігор


Статті

Главная » Статьи » Игровые движки для языков программирования » GLScene для Delphi

Вставка моделей и их анимация
Вставка моделей и их анимация

Пример демонстрирует анимацию *.smd и *.md2 моделей

Поместим на форму GLScene, GLSceneViewer, GLCadencer, GLMaterialLibrary. Cоздадим камеру, источник света, dummyCube, двух актёров (Mesh Objects => Actor), сетку (Special Objects => XYZGird) и 4 кнопки (Бег, Смерть, *.smd, *.md2) и один CheckBox. Камеру направим на DummyCube1, а Актёра2 (Actor2) опустим (так как размеры его модели немного меньше чем размеры модели Актёра1 и его ноги не достают до сетки): y = -6. И не забудем сделать видными текстуры Actor2 => Material => Texture => Disabled = False .

Дальше начинаем кодить, при создании формы задаём исходную папку (оттуда будем брать текстуры, модели…):

SetCurrentDir(ExtractFilePath(Application.ExeName)+'Media');

Далее загружаем модели, анимацию и текстуры для Актёров, включаем видимость скелетной анимации, а так же делаем невидимым второго Актёра и выключаем кнопку SMD(*.smd) :

Код
procedure TForm1.FormCreate(Sender: TObject);
begin
SetCurrentDir(ExtractFilePath(Application.ExeName)+'Media');
Actor1.LoadFromFile('GSG9.smd');
Actor1.AddDataFromFile('run.smd');
Actor1.AddDataFromFile('death1.smd');
Actor1.Animations[1].MakeSkeletalTranslationStatic;
Actor1.OverlaySkeleton:=True;
baseAnimation:='run';
Actor1.SwitchToAnimation(baseAnimation);
Actor2.LoadFromFile('waste.md2');
Actor2.Material.Texture.Image.LoadFromFile('waste.jpg');
Actor2.Animations.LoadFromFile('Quake2Animations.aaf');
SMD.Enabled := False;
Actor2.Visible := False;
end;


baseAnimation – начальная анимация (её актёры будут исполнят сразу после появления); Для Актёра2 (Actor2) мы используем модель формата *.md2 и вся её анимация хранится в одном файле (в нашем случае в Quake2Animations.aaf ), а для формата *.smd приходится загружать анимацию отдельно. Текстуры первому Актёру(Actor1) мы не задали поскольку текстура (у формата *.smd находится автоматически если создана MaterialLibrary).
Далее при нажатии на кнопку “Бег” Актёр должен бежать (проигрываться анимация):

Код
procedure TForm1.BegClick(Sender: TObject);
begin
Actor1.SwitchToAnimation(1, True);
Actor2.SwitchToAnimation ('run', True);
Actor2.AnimationMode:=aamLoop;
end;


А при нажатии на кнопку “Смерть” Актёр должен умирать:

Код
procedure TForm1.SMERTClick(Sender: TObject);
begin
Actor1.SwitchToAnimation(2, True);
Actor2.SwitchToAnimation ('death1', True);
Actor2.AnimationMode:=aamLoop;
end;


При нажатии на ЧекБокс должен быть виден скелет модели (только у *.smd):

Код
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Actor1.OverlaySkeleton:=CheckBox1.Checked;
end;


Ну и старый способ вращения вокруг нашего Актёра:

Код
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
mx:=x; my:=y;
end;
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if Shift<>[] then
begin
GLCamera1.MoveAroundTarget(my-y, mx-x);
mx:=x;
my:=y;
end;
end;


Не забудем про смену формата моделей Актёров:

Код
procedure TForm1.SMDClick(Sender: TObject);
begin
Actor1.Visible := True;
MD2.Enabled := True;
CheckBox1.Enabled := True;
Actor2.Visible := False;
SMD.Enabled := False;
end;

procedure TForm1.MD2Click(Sender: TObject);
begin
Actor2.Visible := True;
Actor1.Visible := False;
CheckBox1.Enabled := False;
SMD.Enabled := True;
MD2.Enabled := False
end;


И новый способ приближения камеры к Актёру(если на мышке есть калёсик):

Код
procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
if GLCamera1.Position.X > 0 then
GLCamera1.Position.X :=GLCamera1.Position.X - 0.5;
if GLCamera1.Position.X < 0 then
GLCamera1.Position.X :=GLCamera1.Position.X + 0.5;
end;

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
if GLCamera1.Position.X < 0 then
GLCamera1.Position.X :=GLCamera1.Position.X - 0.5;
if GLCamera1.Position.X > 0 then
GLCamera1.Position.X :=GLCamera1.Position.X + 0.5;
end;


Что касается формата *.3ds то он вставляется аналогично формату *.md2 (загрузка модели и текстуры), но с анимацией я буду разбираться! =))
Категория: GLScene для Delphi | Добавил: Hacker_xaker (26.05.2009) | Автор: Эдик E W
Просмотров: 3365 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Категорія розділу
GLScene для Delphi [9]

Бесплатный Хостинг

EG Blocking 1.0 EG Blocking
Форма входу
Пошук
Наше опитування
Які мови ви знаєте?
Всього відповідей: 405
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0

Створення комп'ютерних ігор доступно кожному. Всі щоденні новини ІТ технологій лише у нас.
Створи свою комп'ютерну ігру сам, разом із сайтом "Створення ігор" - "CreateGames.do.am". Щоденні новини ІТ технологій лише у нас і лише для вас.

CreateGames.do.am - Створення комп'ютерних ігор. Новини ІТ © 2009 - 2024 р.