a.color[0]=1.0; a.color[l]=a.color[2]=0.0;
В OpenGL-программе атрибуты созданного объекта используются так же, как обычные переменные. Например, в программе, формирующей изображение куба, вы наверняка встретите оператор установки текущего цвета
glColor3fv(a.color);
Но хотя таким способом мы и создали в программе объект, сохраняющийся и после его вывода на экран, возможности манипулирования им довольно ограничены. Как правило, это отдельные функции. Например, обращение к функции формирования изображения куба будет выглядеть примерно так:
render_cube(а); Для поворота куба в пространстве сцены можно использовать функцию rotate_cube(а, thêta, d); где d - массив, представляющий вектор оси поворота.
Такой способ реализации объекта создает определенные неудобства. Одно из них состоит в том, что нужно разработать отдельные функции отображения и поворота для каждого типа объектов, существующих в приложении.
Язык С++ предлагает другую методику организации объектов. Классы в С++ могут содержать общедоступные и закрытые члены. Общедоступные члены {public members) аналогичны членам структурного типа struct в языке С, и к ним возможен доступ извне объекта, т.е. со стороны прикладной программы. Закрытые члены {private members) невидимы извне и могут быть изменены только функциями, которые сами являются членс,».п этого класса. Таким образом, определение объекта cube на языке С++ будет иметь следующий вид:
class cube {
public:
float color[3);
float matrix[4][4]; private:
/* здесь будут размещены члены данных, описывающие собственно куб */ }
В объекте такого типа детали реализации внутренней структуры куба скрыты от прикладной программы. Класс С++ может располагать встроенными функциями - членами класса или методами класса. Собственно в этом и есть одно из главных отличий класса С++ от структурного типа С. Добавим в определение класса cube общедоступные методы:
Иерархические графические модели
public:
void render( ) ;
void translate(float x, float y, float z);
void rotate(float thêta, float axis_x, float axis_y, float axis_z);