'

Освещение и текстурирование в OpenGL

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

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


Слайд 2

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


Слайд 3

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


Слайд 4

Уравнение освещенности l n h P’ e Фоновое освещение не имеет источника и зависит только от сцены При диффузном освещении свет от источника равномерно рассеивается во всех направлениях. При зеркальном освещении свет от источника отражается от повехности.в одном направлении. Зеркальная освещенность дополнительно зависит от положения наблюдателя.


Слайд 5

Рисуем тор x y z f 0 X Z Y j P Q Qi,j Qi+1,j Qi+1,j+1 Qi,j+1


Слайд 6

Уравнение освещенности OpenGL еm ,am , sm , dm , hm – свойства материала ai ,si ,di – свойства i-го источника освещения as– фоновое освещение atti – коэффициент затухания spoti – коэффициент направленности -l vi P’


Слайд 7

Установка параметров освещения в 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 Задаем параметры материала: Задаем цвет источника освещения: Задаем цвет фонового освещения:


Слайд 8

Установка параметров освещения. Часть 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 - закраска по Гуро


Слайд 9

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


Слайд 10

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


Слайд 11

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


Слайд 12

Текстурирование в OpenGL GLuint texture; glGenTextures(1,&texture); Создаем текстуру - прямоугольный массив с цветами пикселов. Высота и ширина должны быть степенями двойки. RGBNM … RGB1M RGB0M … … … … RGBN1 … RGB11 RGB01 RGBN0 … RGB10 RGB00 Получаем номер текстурного объекта Активизируем текстурный объект glBindTexture(texture);


Слайд 13

Текстурирование в 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); // Исходные данные


Слайд 14

Текстурирование в OpenGL: часть 3 Разрешаем текстурирования Задаем текстурные координаты glEnable(GL_TEXTURE_2D); glTexCoord2d(u,v); Возможно, потребуется включить режим перспективного текстурирования glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); Возвращаем номер текстурного объекта в список свободных glDeleteTextures(1,&texture);


×

HTML:





Ссылка: