Однако такой взгляд на вещи несколько расходится с привычной методикой работы с физическим кубом. Положение куба, его цвет, размер и ориентация кажутся нам тесно связанными с самим физическим объектом. Хотя в OpenGL и можно связать с виртуальным кубом некоторые свойства - для этого можно воспользоваться технологией записи в стек и извлечения из стека матриц и атрибутов, - сама по себе программная модель объекта не поддерживает этой идеи, а описанная технология выглядит довольно искусственной. Например, процедуры преобразования куба, отличные от функций работы с однородными координатами, должны точно "знать", как организована модель куба в программе, и будут работать по схеме, показанной на рис. 8.16.
Рис. 8.16. Парадигма процедурного программирования
Иерархические графические модели
Программист разрабатывает программу, которая принимает в качестве аргументов указатель на данные о кубе и список параметров преобразования. Получив эту информацию, программа должна что-то сделать с описанием куба и вернуть затем управление прикладной программе, ее вызвавшей. При этом, возможно, в вызывающую программу будут переданы какие-то дополнительные данные.
Совершенно другую технологию манипулирования объектами предлагает объектно-ориентированный подход к программированию. Еще на ранней стадии становления этого подхода авторы Smalltalk, одного из первых объектно-ориентированных языков программирования, обратили внимание на то, что компьютерная графика является одной из наиболее многообещающих областей приложения этой новой идеи. Сейчас одной из доминирующих тенденций в развитии компьютерной графики является симбиоз конвейерной архитектуры и объектно-ориентированного подхода, который позволит создавать еще более мощные графические системы.
В объектно-ориентированных языках программирования объекты играют роль модулей, строительных блоков, из которых строится программа. Такой модуль включает данные, характеризующие объект, например вершины нашего куба, его свойства (в нашей терминологии - атрибуты) и функции (методы) манипулирования данными объекта и его атрибутами. Для вызова того или иного метода объекта ему нужно послать сообщение. Такая модель представлена на рис. 8.17.