Реклама:

Давайте от TGLUpdateAbleComponent свернем в другую сторону— к классу-потомку TGLBaseSceneObject. Это базовый класс для всех видимых и многих невидимых классов GLScene. Он добавляет к предыдущим классам целую гроздь важнейших свойств и методов: динамическое изменение иерархии, понятие координат, векторы направления, поворота, масштабирования, сортировку и множество геометрических операций, например расстояние до другого объекта, и многое другое. Если вы хотите написать свой собственный компонент для GLScene (а рано или поздно такая потребность у вас обязательно возникнет), начинать надо именно отсюда.

Поднимаемся на уровень вверх и приходим к TGLCustom-SceneObj ect. Этот класс добавляет к предыдущим свойство Material, которое отвечает за свойства материала, текстуры и некоторые параметры освещения. Далее идет TGLImmaterial-SceneObject. Он служит буфером между видимыми и невидимыми объектами. Одолеваем очередную ступеньку и встречаем TGLSceneObject. Этот класс олицетворяет собой стандартный видимый объект GLScene, который можно, что называется, "пощупать". От него уже нельзя образовать нематериальные объекты. Идем еще выше, и перед нами — TGLBaseMesh. Этот класс добавляет к предыдущим списки координат вершин, текстур и нормалей для сложных объектов. Уже чувствуете, куда мы движемся? Нет, ну тогда еще один шажок — и вот она, вершина!

TGLFreeForm— класс, реализующий весь функционал предыдущих классов, который позволяет вам загружать и использовать в GLScene объекты многих форматов трехмерной графики, например популярного пакета 3D Studio. Именно он поможет нам создать большинство статичных (неанимированных) объектов — дома и деревья, столы и стулья, камни и космические корабли.

Мы проделали долгий путь, но он окупился сторицей. По пути мы миновали множество развилок. Если бы мы хоть раз свернули, то пришли бы к совсем другому объекту. Как только освоитесь с GLScene, обязательно загляните в его исходники — это настоящий кладезь мудрости и интересных приемов программирования.

И напоследок — важнейший совет. Когда будете строить свою систему иерархии, все визуальные объекты делайте надстройками над классами GLScene, т.е. вы как бы сажаете сверху пирамиды GLScene пирамидку своего трехмерного движка. Так они смогут работать в тесной связке максимально эффективно. Так вы сможете писать гораздо меньше кода. Например, если вам нужно создать классы для тех же статичных объектов, делайте их общего родителя потомком TGLFreeForm. А если вы хотите создать классы анимированных объектов, обратите внимание на стандартный класс TActor. Я верю: когда код вашего движка и код GLScene сольются в едином экстазе, на свет появится Игра с большой буквы.

Динамические массивы

В Delphi есть и другие способы структурированного хранения информации. Списки — вещь замечательная, но только если вы работаете с классами. Конечно, в список можно добавить любой объект, любую переменную, а точнее — указатель на них. Но вот работать с ними так же просто не выйдет. Вам придется работать с указателями. Ничего сложного в этом нет, но, по статистике, именно в кусках кода, связанных с указателями, начинающие программисты делают максимальное количество ошибок.


⇐ Предыдущая страница| |Следующая страница ⇒