Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерная графика лабораторный практикум.doc
Скачиваний:
231
Добавлен:
01.05.2014
Размер:
1.41 Mб
Скачать

5.11. Цель, требования и рекомендации к выполнению задания

Цель выполнения задания: знакомство с требованиями, которые необходимо выполнить при выводе 3Dобъектов и различных видов источников света с использованием библиотеки OpenG

Требования и рекомендации к выполнению задания:

- проанализировать полученное задание, выделить информационные объекты и действия;

- разработать программу с использованием требуемых операций по трехмерному представлению объектов.

5.12. Задания

Разработать программу, реализующую представление разработанного вами трехмерной сцены (из задания 3) с добавлением возможности использования различных видов источников света, используя предложенные функции OpenGL(модель освещения, типы источников света, свойства материалов).

Разработанная программа должна быть пополнена возможностями остановки интерактивно различных атрибутов через вызов соответствующих элементов интерфейса пользователя (замена типа источника света, управление положением камеры, изменение свойств материала модели, как с помощью мыши, так и с помощью диалоговых элементов)

6. Отображение отражений и теней.

Целый класс методов, известных как отображение отражений, способен существенно улучшить реалистичность изображений, в частности анимации. Основная идея этих методов в том, чтобы увидеть на объекте отражение окружающего его мира.

6.1. Отображение отражений

Два основных типа отображения отражений называются хромированным отображением и отображением среды. При хромированном отображении на поверхности объекта отражается резкий и обычно искаженный образ окружающей среды, как будто поверхность объекта покрыта слоем хрома. Отражение дает грубое представление о мире, окружающем объект.

В случае применения отображения среды узнаваемый образ окружающей среды виден отраженным на объекте (рис. 6.1.).

Рис. 6.1. Иллюстрация сцены с отраженными от пола объектами

Отображение среды осуществляется следующим образом. То, что вы видите в точке Р блестящего объекта, приходит в эту точку из окружающей среды как раз в том направлении, чтобы отразиться в ваш глаз. Для того чтобы определить это направление, проследите за лучом от глаза до точки Р и определите направление отраженного луча. Проследите далее за этим лучом до точки его пересечения с текстурой (окружающим кубом или сферой). На рис. 6.2. показан луч, исходящий из глаза в точку Р. Если обозначить направление этого луча за u, а единичную нормаль в точке Р за m, то направление отраженного луча будет равно r=u-2(u*m)m. Отраженный луч продолжается в этом направлении до пересечения с гипотетической поверхностью, которая содержит текстуру. С вычислительной точки зрения проще всего предположить, что блестящий объект находится в центре и по размерам немного меньше окружающего его куба или сферы. Тогда отраженный луч исходит приблизительно из центра объекта и его направление r может быть непосредственно использовано для указания на текстуру.

Рис. 6.2. Нахождение направления отраженного луча.

В OpenGL содержится подпрограмма для выполнения приближенного отображения среды для случая, когда текстура находится на большой окружающей сфере. Эта подпрограмма запускается посредством задания режима отображения для обеих текстурных координат s и t с помощью следующего кода:

glTexGen(GL_S,GL_TEXTURE_GEN_MODE,Gl_SPHERE_MAP);

glTexGen(GL_T,GL_TEXTURE_GEN_MODE,Gl_SPHERE_MAP);

glEnable(GL_TEXTURE_GEN_S);

glEnable(GL_TEXTURE_GEN_T);

Когда вершина Р вместе с ее единичной нормалью m посылается в графический конвейер, OpenGL вычисляет пару текстурных координат (s, t), которые можно использовать для указания на текстуру, находящуюся на окружающей сфере. Такое вычисление выполняется для каждой вершины грани объекта, и эта грань рисуется, как обычно, при помощи интерполированных значений текстурных координат (s,t) - для точек, находящихся между вершинами.

Рис. 6.3. Вычисление текстурных координат в OpenGL

Для вычисления нужных пар текстурных координат, в OpenGL (как показано на рис. 6.3, а) сначала находятся (в координатах глаза) направление отражения r (с помощью вышеприведенной формулы), где u - единичный вектор (также в координатах глаза), направленный от глаза к вершине V объекта, а m - нормаль в этой вершине. Затем используется выражение:

, где- масштабный множитель. Для осуществления этой процедуры необходимо предварительно вычислить текстуру, которая показывает, что видно из окружающей среды в абсолютно отражающей сфере из точки наблюдения, находящейся вдали от этой сферы. Эта процедура отображает часть среды, лежащую в полусфере позади глаза, в окружность в середине текстуры, а ту часть среды, которая находится в полусфере перед глазом, - в плоское кольцо, охватывающее эту окружность. При изменении положения глаза текстура должна быть пересчитана заново.

Соседние файлы в предмете Компьютерная Графика