Главная » 3D графика » OpenGL – что дальше ?

RSS

OpenGL – что дальше ?

Не нравитсяНравится   Рейтинг +4

Граф сцены

Граф сцены – это определенная формализация прикладной графической модели [2], с которой работает OpenGL Optimizer. Граф сцены представляет собой набор узлов, часть которых соединена направленными связями. Существует прямая аналогия между командами OpenGL и типами узлов графа. Первый тип узлов соответствует геометрическим элементам сцены. Это либо примитивы, либо стандартные формы, порождаемые расширением GLU OpenGL. Направленные связи графа соединяют два узла и реализуют отношение группирования. Правила здесь следующие: к узлу-группе (это второй тип узлов) можно привесить несколько потомков, каждый потомок может быть подвешен к нескольким родителям-группам, но циклы в графе не допускаются.

Для чего нужно группирование? Напомним, что в OpenGL визуальные свойства и расположение геометрических элементов порождаются из текущего состояния рендеринга, которое определяется матрицей преобразования координат, условиями освещения и закрашивания, материалом и текстурой. Эти атрибуты задаются в программе на OpenGL путем вызова соответствующей функции и действуют на все последующие примитивы, пока не будет произведено изменение состояния. Примерно такая же система и в графе сцены: имеются узлы, соответствующие преобразованиям и свойствам, которые также можно помещать в группы. Состояние рендеринга для некоторого объекта сцены определяется либо последним свойством на пути из корня в этот узел, либо произведением матриц. В типовом случае, когда подмножество объектов (например, жестко скрепленные детали) обладает одинаковыми свойствами, это позволяет задавать их все однократно в единственном узле. Другое применение группирования – в ситуации, когда имеется несколько различающихся по свойствам или расположению вариантов одного элемента (он может быть и составным). Тогда геометрия элемента представляется в одном узле графа, но этот узел прикрепляется к разным группам.

Наиболее адекватный стиль для работы с графом сцены – объектно-ориентированный (API OpenGL Optimizer построен на C++). Узлы графа рассматриваются как объекты языка и обладают совокупностью применимых к ним методов, соответствующих типу узла. Пример метода – рендеринг, он обычно применяется к корневому узлу. Порождение графа происходит при обращении к методам создания объектов и заполнении их полей параметрами. С виду это напоминает действия приложения OpenGL, отличие в том, что после создания графа появляется возможность динамически модифицировать его через объектное API: изменить, например, радиус сферы, занеся в параметры узла новое значение параметра, удалить некоторую группу полигонов, видоизменить матрицу преобразования, тем самым вызвав перемещение группы элементов по сцене. (В OpenGL, как известно, нужно заново повторять всю последовательность команд, генерирующих кадр.)

Что же дает граф сцены? В перспективе системы, основанные на этом принципе, способны свести реализацию графических приложений к порождению прикладной модели. Эта модель, кроме собственно визуализации, может обрабатываться универсальными программами, которые не знают ничего о конкретном ее содержании, но могут, тем не менее, делать с ее помощью полезные вещи. Пример такой программы – универсальный редактор, получающий на входе любую модель сцены, и позволяющий методом указания менять расположение объектов, их свойства, расставлять источники освещения, определять способы проецирования и т.д. Создание 3D моделей – весьма трудоемкая задача, однако накапливая из них библиотеки, можно затем получать сцены путем простой компоновки.

Второй момент – явное представление прикладной модели позволяет существенно повысить производительность рендеринга при сохранении высокого качества. В настоящее время накоплено большое количество алгоритмов машиной графики, использующих явное представление объектов, но до сих пор такие методы не были востребованы в стандартных системах, потому что объектных моделей в них не было. Этот пробел закрывает OpenGL Optimizer – предоставляя API для создания эффективных представлений и их рендеринга.OpenGL engine

Страницы : 1 2 3 4 5 6

Таги: ,