Конструировать сцену можно и при исполнении программы...
Конструировать сцену можно и при исполнении программы. Это бывает
необходимо для динамических сцен, когда геометрия уровня загружается из
файлов или массивов и постоянно меняется. Инициализировать объекты
GLScene можно в событии OnCreate главной формы, например:
Инициализацию объектов, загрузку моделей и текстур можно выделить в
отдельные процедуры. Скажем, процедура LoadTextures загружает текстуры
в память, а InitGLObjects – создает объекты с помощью метода
AddNewChild.
Состояние сцены, как уже говорилось, изменяется в событии OnProgress
объекта GLCadencer. Здесь не только можно вращать объекты, но и
обрабатывать нажатия клавиш. Если подключить к программе модуль
Keyboard, то функцией IsKeyDown можно фиксировать нажатия и перемещать
камеру:
speed:=0.1;
if IsKeyDown(VK_UP) then
GLCamera1.Translate(speed, 0, speed);
if IsKeyDown(VK_DOWN) then
GLCamera1.Translate(-speed, 0, speed);
События от мыши можно обрабатывать и традиционным для Delphi способом –
на вкладке Events объекта GLSceneViewer или GLFullScreenViewer
перечислены события onclick, ondblclick, onmousedown, onmousemove.
С их помощью можно выбирать 3D-объекты мышью, перемещать их – экранные
координаты в пространственные конвертируются с помощью специальных
функций.
Логику компьютерной игры имеет смысл выделить в
отдельный модуль, в котором через массивы, записи или классы
описываются переменные, массивы и состояния игры, а также, возможно,
выполняется рендеринг. Из главной же формы лишь вызывать
соответствующие методы. Скажем, зафиксировать нажатие кнопки мыши в
объекте можно в событии onmousedown объекта GLSceneViewer, а для обработки действий вызвать специальный метод:
// pick – выбранный объект
GameMap.ShowSpecialFX(pick);
Дополнительная информация об объекте, как правило, передается через
свойство Tag и TagFloat – если ее много, то можно пойти на хитрость и
указать в Tag порядковый номер массива, в котором хранятся детальные
сведения об объекте (его координатах, состоянии и т.п.). Все эти
«хитрости» зависят от сложности игровой программы и используемых в ней
форматов и структур – ведь иногда проще наследовать стандартные объекты
GLScene, реализовав дополнительные методы и свойства для управления
ими…
Как управлять объектами и материалами, добавлять спецэффекты,
отображать надписи и обрабатывать столкновения иллюстрируют следующие
примеры на GLScene. Объектная надстройка на OpenGL умеет многое, хотя,
возможно, и не все. Но зато она находится в постоянном развитии,
неплохо документирован (кроме сайта www.caperaven.co.za, можно побывать
и в разделах general и support news-конференций; ссылка на эти ресурсы
доступна на официальном сайте), включает в себя множество примеров и
пользуется большой популярностью среди Delphi-программистов (а многие
используют GLScene для создания компьютерных игр).