|
Страница 1 из 5 Один мой знакомый сказал: "Раньше каждый программист считал своим долгом написать собственную операционную систему, а теперь каждый пишет свой движок". Действительно, выбор продуктов для создания игр просто огромный и каждый разработчик преподносит свою реализацию как наилучшее решение для создания игр, это делает выбор наиболее подходящего движка довольно-таки трудоемкой задачей.
В данной статье я рассмотрю несколько популярных игровых движков, а именно: GLScene, Torque, Irrlicht и Ogre, с точки зрения возможностей и архитектуры.
Это не реклама какого-то конкретного продукта и не сравнение конкурирующих решений, а, скорее, взгляд "изнутри" на некоторые предложения.
GLScene(http://www.glscene.org/).
Только факты:
Важно! Вся нижеизложенная информация по этому движку относится к Source Snapshot 10.06.2004 и скорее всего, большая часть ее уже безнадежно устарела.
Наилучшее, что я встречал для Delphi. Движок выполнен в виде комплекса компонентов VCL (на что некоторые очень ругаются), очень прост в освоении и обладает впечатляющим списком возможностей (хотя особо искушенных этим списком не напугать).
Архитектура GLScene довольно прозрачна, он легко встраивается в готовый проект. Код движка написан в стиле библиотеки VCL и плотно её (VCL) использует, поэтому разработчикам с опытом написания своих Delphi компонент разобраться в архитектуре GLScene труда не составит. Движок не предоставляет готовый набор игровых сущностей (таких как: "юнит", "триггер", "локация"), вместо этого, для конечного пользователя существует множество классов-утилит (элемент сцены, элемент физики, менеджер и пр.). Часть этих классов реализована в виде визуальных компонентов и их создание возможно в design-time, соответственно, поддерживается их загрузка / сохранение в .dfm файлы. Часть классов необходимо создавать в run-time, но процесс инициализации упрощается использованием встроенной в Delphi поддержки RTTI (элементы сцены, например, создаются по имени класса).
Документация поддерживается не разработчиками, а коммьюнити, но движок очень легко освоить по демкам и исходному коду.
Граф сцены - обычное дерево, менеджер сцены всего один, он позволяет устанавливать опции рендеринга на уровне сцены (сортировка элементов в очереди рендера, способ отсечения и др.), потом для каждого элемента сцены вызывается метод Render, который принимает решение о том рендерить элемент, или нет. Процесс рендеринга представляет собой вызовов стандартных функций OpenGL, большинство стандартных элементов используют display-lists.
Менеджера ресурсов, как такового, нет, но некоторые типы ресурсов возможно разделить между объектами. Для совместного использования материалов несколькими моделями используются библиотеки материалов. Для разделения вершинных / индексных данных используются так называемые "прокси объекты", которые хранят информацию о положении и ориентации модели, а данные формы берут из "мастер объекта". Для загрузки текстур / спрайтов используется стандартный Delphi класс TImage, для которого GLScene расширяет список поддерживаемых форматов.
Ландшафт - гибридная смесь chunk'ов, ROAM алгоритма и частично brute force рендеринга. Смотрится красиво и показатель FPS тоже весьма и весьма. На момент изучения мной этого движка, у него были проблемы с несколькими материалами на один ландшафт (без пенальти по скорости работал только ландшафт с основной текстурой и detail map'ом), не знаю как сейчас... Кстати, архитектура рендерера ландшафта позволяет организовать подгрузку ландшафта по мере продвижения камеры (stream loading).
Звук поддерживается через прослойки (wrapper'ы) для OpenAL, BASS и fmod.
Математическая библиотека оптимизирована под работу с 3DNow! и содержит много ассемблерного кода для FPU (любители жесткой оптимизации могут посмотреть что, да как, заглянув в Base/VectorGeometry.pas).
В завершение могу сказать, что движок неплох и достоин по крайней мере внимания. Тем, кто только что приступил к разработке игр и выбрал Delphi и OpenGL в качестве отправной точки, этот движок будет вдвойне полезен.
|