Delphi World - GLScene - Космосим на GLScene
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
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 установить любой черный цвет:


После комипляции получим на экране уже вот такую картину:


Ну, еще можно поэкспериментировать с положением камеры, с источником света и пр.

Вот исходный файл урока…

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования