GLScene - Космосим на GLScene
Автор: Daddy
WEB-сайт: http://daddy.mirgames.ru
Часть 1. Основа.
Создание неподвижного корабля.
После установки GLScene всем (надеюсь) известным способом приступим к знакомству с компонентами:
- GLScene. Пожалуй самый важный компонент, так как именно он осуществляет работу с объектами, источниками света и камерой.
- GLSceneViewer. Также очень важный компонент, на нем мы и видим всё происходящее, так как область этого компонента происходит рендеринг объектов GLScene.
- GLMemoryViewer. В общем-то я не нашел ничего полезного с этим компонентом, разве что он используется при создании теней.
- GLFullScreenViewer. Служит для полноэкранного режима.
- GLMaterialLibrary. Из названия понятно, что это библиотека материалов.
- GLCadencer. Нечто похожее на таймер, но он работает с максимально возможной скоростью и появляется переменная DeltaTime – в ней указывается сколько времени прошло с исполнения предыдущего тика таймера.
- Таймер. Поход на DXTimer в DelphiX, но позволяет задать приоритет исполнения от самого низкого до максимально высокого.
- CollisionManager. Компонент для проверки столкновении.
- GLFireFX. Компонент для создания эффектов пламени, основанного на частицах.
- GLThorFX. Для создания эффекта молнии, но основан на спрайтах.
- GLPolygonPFXManager, GLPointLightPFXManager. Для создания эффектов на частицах.
- BitmapFont. Необходим при использовании графических шрифтов.
- GLBitmapHDS, GLCustomHDS. Даже не знаю…
- AnimationControler. Контролер анимации модели.
- Joystick. Для работы с джостиком.
- ScreenSaver. Полезен при создании скринсейверов (хранителей экрана).
- GLSoundLibrary. Библиотека звуков.
- GLSMWaveOut. Проигрыватель звуокв.
- GLNavigator. Полезен при создании шутеров или игр с управлением мышью.
- GLUserInterface. Аналогично предыдущей компоненте (смотреть мышью, чувствительность мыши и пр.)
- GLAviRecorder. Для записи видео формата *.avi из анимации вашей сцены.
- GLTimeEventsMGR. Для создания временных событий.
Из всех этих компонент для создания космосима нам потребуются: GLScene, GLSceneViewer, GLCadencer, GLFireFX, GLThorFX.
Ну что ж приступим. Создадим новый unit (модуль). В разделе interface пишем: uses Windows,GLScene, GLVectorFileObjects, GLObjects, GLCadencer, GLWin32Viewer, GLMisc, GLTexture, jpeg, Graphics, GLThorFX,GLFireFX,Geometry,VectorTypes,keyboard;
Далее создадим новый класс – класс корабля:
type
TCustomShip = class
private
public
end;
Какие свойства должны быть у него? Полагаю для начала ему потребуется модель и процедура загрузки модели и текстуры из файлов: type TCustomShip=class
private
fmodel: TFreeForm;
public
property model: TFreeForm read fmodel write fmodel;
procedure LoadModel(path: string);
procedure LoadTexture(path: string);
constructor Create(cadencer: TGLCadencer);
end;
Я использовал TFreeForm, так как он хорошо подходит для наших целей, он позволяет загружать модель из файла.
В разделе implementation пишем:
procedure TCustomShip.LoadModel(path: string);
begin
fmodel.LoadFromFile(path);
end;
procedure TCustomShip.LoadTexture(path: string);
begin
fmodel.Material.Texture.Image.LoadFromFile(path);
fmodel.Material.Texture.TextureMode := tmModulate;
fmodel.Material.Texture.Enabled := True;
end;
constructor TCustomShip.Create(cadencer: TGLCadencer);
begin
fmodel := TFreeForm(cadencer.Scene.Objects.AddNewChild(TFreeForm));
fmodel.Scale.Scale(0.01);
end;
Теперь более подробно о загрузке текстуры и конструкторе Create. При загрузке текстуры я установил TextureMode как tmModulate для того, чтобы на наш космический корабль воздействовали источники света. А в конструкторе я использовал Cadencer для обращения к GLScene. Использование Cadencer-a потребуется впоследствии для создания эффектов огня и лазера.
Сохраним этот Unit как engine.pas. Создадим новый проект и дописываем обращение к engine.pas в Unit1 в раздел uses:
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, engine;
Далее кидаем на форму GLScene и GLSceneViewer, GLCadencer:
Два раза кликаем по GLScene и получаем вот такое окошко:
Клакаем на Cameras и нажимаем на кнопочку ставшую активной.
Далее нажимаем на GLCamera1 и в Object Inspector переходим во вкладку Properties. Нажимаем на кнопку с тремя точками правее Position:
Указываем X, Y, Z axis как показано на рисунке:
Кликаем на OK. В окнеGLSceneEditor: GLScene1 нажимаем на SceneObject, после чего нажимаем на четвертую кнопку слева:
Выбираем первый пункт – LightSource (Источник света). Потом зыжимаем мышь на появившемся GLLightSource1 и перетаскиваем его на GLCamera1.
Далее нажимаем на GLCadencer1 и переходим в его свойства:
В пункте Scene выбираем GLScene1. Жмем на GLSceneViewer1 и в свойствах в пункте Camera выбираем GLCamera1:
После нажимаем на свободное место на форме, в Object Inspector переходим во вкладку Events и два раза кликаем на поле ввода OnCreate:
В полученную процедуру TForm1.FormCreate пишем: Ship1:=TCustomShip.Create(GLCadencer1);
Ship1.LoadModel('shark.3ds');
Ship1.LoadTexture('tex.bmp');
GLCamera1.TargetObject:=Ship1.Model;
В раздел var добавляем строку Ship1:TCustomShip:
Скачиваем модели и текстуру из этого файла, переписываем их в папку с проектом (обычно в Delphi6/Bin) и порядок.
Компилируем, получаем на экране модель корабля:
Далее можно зайти в Buffer в свойствах GLSceneViewer1, в BackGroundColor установить любой черный цвет:
После комипляции получим на экране уже вот такую картину:
Ну, еще можно поэкспериментировать с положением камеры, с источником света и пр.
Вот исходный файл урока…
|