Освещение и текстурирование в OpenGL презентация

Диффузное и зерк альное отражение

Слайд 1Освещение и текстурирование в OpenGL
Астана 2004
Лекция 10


Слайд 2Диффузное и зерк альное отражение


Слайд 3Диффузное отражение
Интенсивность освещения рассчитывается отдельно для каждой компонент R, G

и B.

Слайд 4Зеркальное отражение
Зеркальное отражение рассчитывается по закону Фонга


Слайд 5Уравнение освещенности



l
n
h
P’
e
Фоновое освещение не имеет источника и зависит только от

сцены

При диффузном освещении свет от источника равномерно рассеивается во всех направлениях.

При зеркальном освещении свет от источника отражается от повехности.в одном направлении. Зеркальная освещенность дополнительно зависит от положения наблюдателя.


Слайд 6Рисуем тор
x
y
z



φ
0
X
Z

Y

ϕ
P
Q


Qi,j
Qi+1,j
Qi+1,j+1
Qi,j+1


Слайд 7Уравнение освещенности OpenGL
еm ,am , sm , dm , hm –

свойства материала

ai ,si ,di – свойства i-го источника освещения

as– фоновое освещение

atti – коэффициент затухания

spoti – коэффициент направленности



-l

vi

P’



Слайд 8Установка параметров освещения в OpenGL
void glMaterialfv(GLenum face,GLеnum param,GLfloat *value);
face

= {GL_FRONT|GL_BACK}
param = {GL_AMBIENT|GL_DIFFUSE|GL_EMISSIVE|GL_SPECULAR}
value = float[4] // RGBA

void glMaterialf(GLenum face,GL_SHININESS,GLfloat value);

void glLightModelfv(GLеnum param,GLfloat *value);
param = LIGHT_MODEL_AMBIENT
value = float[4] // RGBA

void glLightfv(GLenum light,GLеnum param,GLfloat *value);
face = {GL_LIGHT0|GL_LIGHT1|…}
param = {GL_AMBIENT|GL_DIFFUSE|GL_SPECULAR}
value = float[4] // RGBA

Задаем параметры материала:

Задаем цвет источника освещения:

Задаем цвет фонового освещения:


Слайд 9Установка параметров освещения. Часть 2.
void glLightfv(GLenum light, GL_POSITION,GLfloat *value);
face

= {GL_LIGHT0|GL_LIGHT1|…}
value = float[4] // x,y,z,w

Задаем положение источника освещения:

Координаты источника освещения преобразуются текущей матрицей модельного преобразования!

Включаем расчет освещенности

void glEnable(GLenum type); type = GL_LIGHTING;

Включаем требуемые источники освещения

void glEnable(GLenum type); type = GL_LIGHT0;

Включаем требуемые источники освещения

void glShadeModel(GLenum type);
type = GL_FLAT; - плоская закраска грани
type = GL_SMOOTH - закраска по Гуро


Слайд 10Растеризация
V1
V2
V3
Интерполяция цвета вдоль примитива - закраска по Гуро
Интерполяция координаты

z

Интерполяция цвета вдоль примитива - закраска по Фонгу


Слайд 11

I=0
I=0
I=1
I=1


I=0
I=0
I=1
I=1
Фонг и Гуро - ошибки интерполяции
Освещенность зависит от способа разбиения

на примитивы

Поле нормалей лучше задавать в виде текстуры!


Слайд 12Текстурирование


u
v
0


x
y
0
“Перспективное” текстурирование:
1
1
x1,y1,u1,v1
x2,y2,u2,v2
x3,y3,u3,v3


Слайд 13Текстурирование в OpenGL
GLuint texture;
glGenTextures(1,&texture);
Создаем текстуру - прямоугольный массив с цветами

пикселов. Высота и ширина должны быть степенями двойки.

RGBNM


RGB1M

RGB0M





RGBN1


RGB11

RGB01

RGBN0


RGB10

RGB00

Получаем номер текстурного объекта

Активизируем текстурный объект

glBindTexture(texture);


Слайд 14Текстурирование в OpenGL: часть 2
glTexParameteri(GL_TEXTURE_2D,

GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER, GL_LINEAR);

Загружаем текстуру

Устанавливаем режимы текстурирования

glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glTexImage2D(GL_TEXTURE_2D,
0, // Mip-level
GL_RGB, // Формат текстуры
tex_width,tex_height, 0, // Ширина границы
GL_RGB, // Формат исходных данных
GL_UNSIGNED_BYTE, // Тип данных
tex_bits); // Исходные данные


Слайд 15Текстурирование в OpenGL: часть 3
Разрешаем текстурирования
Задаем текстурные координаты
glEnable(GL_TEXTURE_2D);
glTexCoord2d(u,v);

Возможно, потребуется включить режим перспективного текстурирования

glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

Возвращаем номер текстурного объекта в список свободных

glDeleteTextures(1,&texture);


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика