Файл: графическая библиотека opengl.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.06.2020

Просмотров: 1687

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 116

*/ 

  glPushMatrix(); 
   glTranslatef (0,0,-RingHeight/2); 
   DrawRing(); 
  glPopMatrix(); 
  glPushMatrix(); 
   glTranslatef (0,RingHeight/2,0); 
   glRotatef (90,1,0,0); 
   DrawRing(); 
  glPopMatrix(); 
  glPushMatrix(); 
   glTranslatef (-RingHeight/2,0,0); 
   glRotatef (90,0,1,0); 
   DrawRing(); 
  glPopMatrix(); 
 /* 

Восстанавливаем

 

матрицу

 

для

 

поворотов

 

тераэдра

 */ 

 glPopMatrix(); 
 /* 

Выключаем

 

режим

 

наложения

 

текстуры

 */ 

 glDisable(GL_TEXTURE_2D); 
 /* 

Проводим

 

повороты

 */ 

 glRotatef (CurAng,1,0,0); 
 glRotatef (CurAng/2,1,0,1); 
 /* 

Чтобы

 

тетраэдр

 

вращался

 

вокруг

 

центра

его

 

надо

 

сдвинуть

 

вниз

 

по

  

оси

 oz 

*/ 

 glTranslatef (0,-0.33,0); 

 /* 

Задаем

 

цвет

 

диффузного

 

отражения

 

для

 

тетраэдра

 */ 

 glColor3fv(mat_diff2); 
 /* 

Проводим

 

построение

 

тетраэдра

 */ 

 glCallList(TETR_LIST); 

 
void Display(void) 

 /* 

Инициализация

 (

очистка

текущего

 

буфера

 

кадра

 

и

 

  * 

глубины

     

  */ 
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
 /* 

Построение

 

объектов

 */ 

 DrawFigures(); 
 /* 

Перестановка

 

буферов

 

кадра

 */ 

 glutSwapBuffers(); 

 
void Redraw(void) 

 /* 

Увеличение

 

текущего

 

угла

 

поворота

 */ 


background image

 117

 CurAng+=1; 
 /* 

Сигнал

 

для

 

вызова

 

процедуры

 

создания

 

изображения

 (

для

 

обновления

*/ 

 glutPostRedisplay(); 

 
int main(int argc, char **argv) 

  /* 

Инициализация

 

функций

 

библиотеки

 GLUT */ 

  glutInit(&argc, argv); 
  /* 

Задание

 

режима

 

с

 

двойной

 

буферизацией

   * 

представление

 

цвета

 

в

  

формате

 RGB, 

использование

 

буфера

 

глубины

 

*/ 

  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | 
GLUT_DEPTH); 
  /* 

Создание

 

окна

 

приложения

 */ 

  glutCreateWindow("Example of using OpenGL"); 
  /* 

Регистрация

 

функции

 

построения

 

изображения

 */ 

  glutDisplayFunc(Display); 
  /* 

Регистрация

 

функции

 

обновления

 

изображения

 */ 

  glutIdleFunc(Redraw); 
  /* 

Инициализация

 

функций

 OpenGL */ 

  Init(); 
  /* 

Цикл

 

обработки

 

событий

 */ 

  glutMainLoop(); 
  return 0; 


background image

 118

Приложение

 E. 

 

 

Примеры

 

практических

 

заданий

 

E.1. Cornell Box 

Целью

 

задания

 

является

 

создание

 

изображения

  

заданной

 

трехмерной

 

статичной

 

сцены

 

средствами

 OpenGL 

с

 

использованием

возможно

стандартных

 

геометрических

 

примитивов

.  

Требуется

 

создать

 

изображение

 

сцены

 Cornell Box. 

Эта

 

классическая

 

сцена

 

представляет

 

собой

 

комнату

 

кубического

 

вида

с

 

отсутствующей

 

передней

 

стенкой

В

 

комнате

 

находятся

 

геометрические

 

предметы

 

различных

 

форм

 

и

 

свойств

  (

кубы

параллелепипеды

шары

), 

и

 

протяженный

 

источник

 

света

 

на

 

потолке

Присутствует

 

также

 

камера

 

с

 

заданными

 

параметрами

  (

обычно

 

она

 

расположена

 

так

чтобы

 

была

 

видна

 

вся

 

комната

). 

В

 

одной

 

из

 

лабораторий

 

Корнельского

 

университета

 

(

http://graphics.cornell.edu

такая

 

комната

 

существует

 

в

 

реальности

и

 

ее

 

фотографии

 

сравниваются

 

с

 

изображениями

построенными

 

методами

 

трассировки

 

лучей

 

для

 

оценки

 

точности

 

методов

На

 

странице

 

лаборатории

 

можно

 

найти

 

описание

 

геометрии

 

сцены

 

в

 

текстовом

 

формате

Реализации

 

сцены

приведенной

 

на

 

рисунке

 

достаточно

 

для

 

выполнения

 

задания

хотя

 

возможно

 

введение

 

новых

 

предметов

 

дополнительно

 

к

 

существующим

или

 

вместо

 

них

Приветствуется

 

использование

 

примитивов

 

библиотек

 GLUT 

и

 GLU.  

Внимание

Сцена

 

не

 

должна

 

превращаться

 

в

 

набор

 

разнородных

 

предметов

Эстетичность

 

и

 

оригинальность

 

выполненного

 

задания

 

принимается

 

во

 

внимание

.  

Протяженный

 

источник

 

света

 

на

 

потолке

 

комнаты

 

можно

 

эмулировать

 

несколькими

 

точечными

 

источниками

.  

За

  

простейшую

 

реализацию

 

сцены

 

ставится

 7 

баллов

.  

Реалистичность

 

сцены

 

можно

 

значительно

 

повысить

 

за

 

счет

 

разбиение

 

многоугольников

Суть

 

этого

 

в

 

том

что

 

модели

 

освещение

 

OpenGL 

освещенность

 

вычисляется

 

в

 

вершинах

 

многоугольника

 

с

 

учетом

 

направления

 

нормалей

 

в

 

этих

 

вершинах

а

 

затем

 

линейно

 

интерполируется

  

по

 

всей

 

поверхности

Если

 

используются

 


background image

 119

относительно

 

большие

 

многоугольники

то

очевидно

невозможно

 

получить

 

действительно

 

плавные

 

переходы

  

и

 

затенения

Для

 

преодоления

 

этого

 

недостатка

 

можно

 

разбивать

 

большие

 

грани

 (

стены

например

на

 

множество

 

меньших

 

по

 

размерам

Соответственно

 

разброс

 

в

 

направлении

 

нормалей

 

в

 

вершинах

 

одного

 

многоугольника

 

не

 

будет

 

столь

 

велик

 

и

 

затенение

 

станет

 

более

 

плавным

. (1 

балл

)  

Наложение

 

текстур

 

на

 

объекты

 

сцены

 

поощряется

 2-

мя

 

баллами

.  

Дополнительными

 

баллами

 

оценивается

 

присутствие

 

в

 

сцене

 

теней

Один

 

из

 

простейших

 

алгоритмов

 

наложения

 

теней

 

приведен

 

в

 

разделе

 

7.2. 

За

 

его

 

реализацию

 

можно

 

получить

 

до

 2 

баллов

Использование

 

более

 

продвинутых

 

алгоритмов

  (

например

, shadow volumes) 

будет

 

оценено

 

дополнительными

 

баллами

.  

Реализация

 

устранения

 

ступенчатости

 (antialiasing) 

методом

предложенным

 

в

 

разделе

 7.1. 

или

 

каким

-

либо

 

другим

 

оценивается

 

в

 2 

балла

.  

За

 

введение

 

в

 

сцену

 

прозрачных

 

объектов

 

и

 

корректный

 

их

 

вывод

 

дается

 1 

балл

Механизм

 

работы

 

с

 

прозрачными

 

объектами

 

описан

 

в

 

разделе

 6.1.  

Задание

 

оценивается

исходя

 

из

 15 

баллов

.  

В

 

приведенной

 

ниже

 

таблице

 

указано

 

распределение

 

баллов

 

в

 

зависимости

 

от

 

реализованных

 

требований

   

Простейший

 

вариант

 

сцены

 (

только

 

освещение

)

 

баллов

 

Разбиение

 

полигонов

 

+1 

балл

 

Использование

 

текстур

 

+2 

балла

 

Наложение

 

теней

 

+2 

балла

 

Устранение

 

ступенчатости

 

+2 

балла

 

Использование

 

прозрачных

 

объектов

 

+1 

балл

 

 

Дополнительные

 

баллы

 

можно

 

получить

 

за

 

хорошую

 

оптимизацию

 

программы

необычные

 

решения

эстетичность

 

и

 

т

.

д

.   


background image

 120

E.2. 

Виртуальные

 

часы

 

Целью

 

задания

 

является

 

создание

 

трехмерной

 

интерактивной

 

модели

 

аналоговых

 

часов

.   

Обязательные

 

требования

 

к

 

программе

:   

1. 

Программа

 

должна

 

демонстрировать

 

на

 

экране

 

трехмерную

 

модель

 

часов

Часы

 

могут

 

быть

 

любые

от

 

наручных

 

до

 

кремлевских

Проявите

 

в

 

полной

 

мере

 

Вашу

 

фантазию

 

и

 

чувство

 

меры

Постарайтесь

 

сделать

 

как

 

можно

 

более

 

реалистичную

 

сцену

Поощряется

 

подробная

 

детализация

 

элементов

 

часов

.   

2. 

Часы

 

на

 

экране

 

обязательно

 

должны

 

иметь

 

минутную

 

и

 

часовую

 

стрелки

Секундная

 - 

по

 

желанию

но

 

очень

 

приветствуется

  (

иначе

 

трудно

 

будет

 

определить

ходят

 

часы

 

или

 

нет

).  

3. 

Время

 

на

 

часах

 

должно

 

совпадать

 

с

 

системным

 

временем

 

компьютера

Часы

 

обязательно

 

должны

 

ходить

т

.

е

стрелки

 

должны

 

двигаться

 

и

 

скорость

 

их

 

движения

 

не

 

должна

 

зависеть

 

от

 

производительности

 

компьютера

а

 

определяться

 

только

 

текущим

 

временем

.  

4. 

Сцена

 

должна

 

быть

 

интерактивной

т

.

е

давать

 

приемлемую

 

частоту

 

кадров

 

в

 

секунду

 (>10) 

при

 

визуализации

 

на

 

машине

 

с

 

аппаратным

 

ускорителем

 

трехмерной

 

графики

Если

 

программа

 

будет

 

работать

 

медленно

баллы

 

могут

 

быть

 

снижены

 

5. 

Необходимо

 

реализовать

 

вращения

 

часов

  (

или

возможно

камеры

с

 

помощью

 

мыши

  (

предпочтительно

или

 

клавиатуры

Можно

 

также

 

предусмотреть

 

режимы

 

с

 

автоматическим

 

вращением

.  

Пожелания

 

к

 

программе

:   

1. 

Поощряется

 

введение

 

дополнительной

 

геометрии

Например

ремешков

маятников

 

и

 

т

.

д

Можно

 

сделать

 

часы

 

с

 

кукушкой

будильник

 

и

 

т

.

п

.   

2. 

Желательно

 

наличие

 

возможностей

 

для

 

управления

 

процессом

 

визуализации

Например

наличие

/

отсутствие

 

текстур

режимы

 

заливки

детализации

 

и

 

т

.

д

.