Сайт клана G-ROW |  Официальный сайт
Навигация
Чат кричалка
 
500
Наш опрос
Стоит нам добавлять уроки Photoshop?
Всего ответов: 31
Наши друзья
Главная » Статьи » Мои статьи

Тонкая работа с GLScene
Конструировать сцену можно и при исполнении программы...


Конструировать сцену можно и при исполнении программы. Это бывает необходимо для динамических сцен, когда геометрия уровня загружается из файлов или массивов и постоянно меняется. Инициализировать объекты GLScene можно в событии OnCreate главной формы, например:

GLCameraMain:=TGLCamera(GLDummyCube1.AddNewChild(TGLCamera));

GLCameraMain.DepthOfView:=1000;

GLCameraMain.FocalLength:=100;

GLCameraMain.Direction.SetVector(0,0,-1);

GLCameraMain.Position.SetPoint(0,128,0);

GLCameraMain.Pitch(-45);

GLLightMain:=TGLLightSource(GLCameraMain.AddNewChild(TGLLightSource));

GLLightMain.Position.SetPosition(5,15,-15);

Инициализацию объектов, загрузку моделей и текстур можно выделить в отдельные процедуры. Скажем, процедура 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 для создания компьютерных игр).
Категория: Мои статьи | Добавил: Alex (06.10.2009)
Просмотров: 3043 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 2
2 Mlex  
0
аффтар умер?

1 Mlex  
0
Хотелось бы рабочий пример создание редактора карт. не полноценного а хотя бы что бы было выделение объектов и перемещение по карте.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Главная | Регистрация | Добавить новость | Добавить файл | Статистка | Вход/Выход
Техническое обслуживание сайта выполнил Aspire |
Тонкая работа с GLScene - Мои статьи - Каталог статей - Создание игр
Главная » Статьи » Мои статьи

Тонкая работа с GLScene
Конструировать сцену можно и при исполнении программы...


Конструировать сцену можно и при исполнении программы. Это бывает необходимо для динамических сцен, когда геометрия уровня загружается из файлов или массивов и постоянно меняется. Инициализировать объекты GLScene можно в событии OnCreate главной формы, например:

GLCameraMain:=TGLCamera(GLDummyCube1.AddNewChild(TGLCamera));

GLCameraMain.DepthOfView:=1000;

GLCameraMain.FocalLength:=100;

GLCameraMain.Direction.SetVector(0,0,-1);

GLCameraMain.Position.SetPoint(0,128,0);

GLCameraMain.Pitch(-45);

GLLightMain:=TGLLightSource(GLCameraMain.AddNewChild(TGLLightSource));

GLLightMain.Position.SetPosition(5,15,-15);

Инициализацию объектов, загрузку моделей и текстур можно выделить в отдельные процедуры. Скажем, процедура 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 для создания компьютерных игр).
Категория: Мои статьи | Добавил: Alex (06.10.2009)
Просмотров: 3043 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 2
2 Mlex  
0
аффтар умер?

1 Mlex  
0
Хотелось бы рабочий пример создание редактора карт. не полноценного а хотя бы что бы было выделение объектов и перемещение по карте.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]