Атрибуты объекта можно изменять специальными методами, подобными rotate(). Метод render () формирует изображение объекта, используя при этом не столько текущее состояние графической системы, сколько значения внутренних атрибутов экземпляра, включая и матрицу преобразования. В OpenGL в реализации метода render ( ) вы, скорее всего, встретите такую последовательность операторов:

glBegin(GL_POLYGON) glVertex3f (.....)

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

8.7. Графические объекты

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

При работе с классами часто возникает необходимость представить более сложные отношения между объектами, чем отношение "родитель-потомок". Поскольку мы используем древовидные структуры, т.е. такие, в которых самый верхний уровень иерархии принадлежит корневому объекту, то отношения "родитель-потомок" в такой структуре имеют скорее смысл "обладает…". Так, наша фигурка киборга "обладает" двумя руками и двумя ногами, а автомобиль "обладает" кузовом и четырьмя колесами.


⇐ Предыдущая| |Следующая ⇒