sen.makeLi ghtsOpenGL():

sen.drawSceneOpenGL():

// render the scene using OpenGL

// визуализируем сцену с использованием OpenGL

Первая команда передает в OpenGL описание источников света. Вторая команда использует метод drawSceneOpenGL( ) для рисования каждого объекта из списка объектов. Код этого метода очень прост:

void Scene :: drawSceneOpenGLО {

forCGeomObj* р - obj: р : р =p->next) p->drawOpenGL():

// draw it // рисуем зто }

Листинг 5.7. Методы drawOpenGL() для двух форм

void Sphere :: drawOpenGLO {

tellMaterialsGLO: // pass material data to OpenGL // передаем в OpenGL данные по материалу

glPushMatrixO;

glMultMatrixfCtransf.m): // load this object's matrix // загружаем матрицу данного объекта

glutSolidSphere(1.0.10.12): // draw a sphere // рисуем сферу

glPopMatrixO:

}

void Cone :: drawOpenGLO {

tellMaterialsGLO: // pass T^terial data to OpenGL // передаем в OPenGL данные по материалу продолжением

Глава 5. Преобразования объектов Листинг 5.7 (продолжение)

glPushMatrixO:

glMultMatrixf(transf.m); // load this object's matrix // загружаем матрицу данного объекта

glutSolidConeCl.0.1.0.10.12): // draw a cone // рисуем конус

glPopMatrixO:

}

Эта функция перемещает по списку объектов указатель и вызывает метод drawOpenGLO для каждого объекта поочередно. Это хороший пример применения полиморфизма, который является краеугольным камнем объектно-ориентированного программирования: каждая форма «знает», как нарисовать саму себя; она имеет метод drawOpenGLO, который вызывает соответствующую подпрограмму для этой формы. Поэтому когда указатель р указывает на сферу, то автоматически вызывается подпрограмма drawOpenGLO для сферы, а когда р указывает на конус, то вызывается подпрограмма drawOpenGLO для конуса и т. д. В листинге 5.7 приведены такие методы для классов Sphere и Cone; они отличаются друг от друга только вызываемой в конце OpenGL-подпрограммой рисования. Каждый метод вначале передает в OpenGL свойства материала объекта и затем обновляет матрицу моделирования-вида с помощью специфического для данного объекта аффинного преобразования. Исходная матрица моделирования-вида вталкивается в стек и впоследствии восстанавливается для защиты ее от изменений после окончания рисования объекта.


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