void main(int argc. char **argv)
{
glutlnit(&argc. argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH):
glutInitWindowSize(640.480):
glutlnitwindowPositiondOO. 100):

glutCreateWindowC'shaded example -3D scene"): // «пример с затенением - трехмерная сцена»

glutDisplayFunc(displaySolid):

glEnable(GL_LIGHTING); // enable the light source // включаем источник света

glEnable(GL_LIGHT0):
glShadeModel(GL_SMOOTH);

glEnable(GL_DEPTH_TEST): // for removal of hidden surfaces // для удаления невидимых поверхностей

glEnable(GL_NORMALIZE): // normalize vectors for proper shading // нормируем векторы для правильного затенения

glClearColor(0.1f.0.1f.0.1f.0.0f): // background is light gray // фон светло-серый

glViewport(0. 0. 640. 480):
glutMainLoopO;
}

Практические упражнения

5.6.3. Настройка сцены

Какие изменения должны быть сделаны в листинге 5.6, чтобы положить переключатель на пол, а сферу водрузить на чайник?

5.6.4. Чтение описания сцены из файла Во всех предыдущих примерах сцена описывалась посредством специальных вызовов OpenGL, которые преобразуют и рисуют каждый объект, как в следующем коде:

glTranslated(0,25.0.42.0.35): glutSolidSphere(0.1.15.15): // draw a sphere // рисуем сферу

Преобразования объектов

В силу этого все объекты на сцене жестко «зашиты» в программу. Такой способ задания сцены является громоздким и подвержен ошибкам. Замечательно, когда разработчик имеет возможность задавать объекты в сцене с помощью простого языка и помещать описание сцены в файл. Тогда программа рисования становится гораздо более простой универсальной программой: она читает файл, описывающий сцену, во время выполнения (динамически) и рисует любые объекты, встречающиеся в таком файле.

Такое средство предоставляется языком описания сцен (Scene Description Language - SDL), который представлен в приложении Д. Мы определяем класс Scene (он также описан в приложении В и доступен на web-сайте книги), который поддерживает чтение из SDL-файлов и рисование объектов, описанных в этом файле. Использование класса Scene в приложениях очень просто. Вначале создается глобальный объект класса Scene посредством следующего кода:


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