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

Презентация:



Advertisements
Похожие презентации
OpenGL Лекция 2.. Преобразование координат Преобразования координат.
Advertisements

{ OpenGL Лекция 3 ( ). float ambient[4] = {0.0, 0.0, 0.0, 1.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); // RGBA интенсивность всей сцены.
Растеризация Текстуры Композиты. На лекции 4-е задание Задача растеризации Текстурирование Определение Текстурные отображения для сферы, тора, цилиндра.
OpenGL API Алексей Игнатенко (MSU Graphics & Media Lab) Алексей Игнатенко (MSU Graphics & Media Lab)
GPU vs. CPU 302 млн. транзисторов Тактовая частота 550Mhz 1GB 850x2 MHz памяти 380 млн. транзисторов Тактовая частота 650Mhz 1GB 775x2 MHz памяти Тактовая.
Современные графические технологии ИЛИ OpenGL и графические процессоры 2010.
Компьютерная графика. Лекция 5 Моделирование трехмерных поверхностей. Закрашивание.
Компьютерная визуализация Лекция 3 СПбГУ ИТМО 2004.
GPU vs. CPU 681 млн. транзисторов Тактовая частота 575Mhz * 768MB 1.8 Ghz памяти DDR4 ~650 млн. транзисторов Тактовая частота ~700Mhz 1GB 1.1 Ghz памяти.
Астана ( )Компьютерная графика (лекция 6) ВВЕДЕНИЕ В OPENGL Лекция 6.
OpenGL Лекция 3. Построение тени Проективные тени Объемные тени Карты теней Мягкие тени.
Текстуры. Композиты Лекция 11 Алексей Игнатенко. На прошлой лекции Удаление невидимых поверхностей Удаление нелицевых граней Алгоритм художника Двоичное.
Фильтрация текстур. Пиксельные операции. Астана 2004 Лекция 11.
Лекция 13 Метод трассировки лучей Астана Трассировка лучей через сферическую каплю воды Луч 7 -- луч Декарта [1637]
OpenGL Лекция 4 ( ). void glVertexPointer( GLint size, GLenum type, GLsizei stride, void *ptr ) size определяет число координат вершины (2, 3,
Лекция 5 ( ). GLfloat fogColor[4]= {0.5f, 0.5f, 0.5f, 1.0f}; // Цвет тумана glClearColor(0.5f,0.5f,0.5f,1.0f); // Будем очищать экран, заполняя.
ТРЕХМЕРНАЯ ГРАФИКА Компьютерная графика. Геометрические примитивы.
Компьютерная графика. Лекция 6 М ЕТОДЫ ТЕКСТУРИРОВАНИЯ И АНТИАЛИАСИНГ.
Методы закраски Лекция 13 Лекция 13:. Специальные методы закраски Специальные методы закраски: Метод Гуро Метод Фонга.
Лекция 8 25февраля 2003 г. (Астана) Видовые преобразования Закраска Гуро и Фонга Удаление невидимых линий и поверхностей.
Транксрипт:

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

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

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

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

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

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

Уравнение освещенности OpenGL е m,a m, s m, d m, h m – свойства материала a i,s i,d i – свойства i -го источника освещения a s – фоновое освещение att i – коэффициент затухания spot i – коэффициент направленности -l vivi P

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

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

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

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

Текстурирование u v 0 x y 0 Перспективное текстурирование: 1 1 x 1,y 1,u 1,v 1 x 2,y 2,u 2,v 2 x 3,y 3,u 3,v 3

Текстурирование в OpenGL GLuint texture; glGenTextures(1,&texture); Создаем текстуру - прямоугольный массив с цветами пикселов. Высота и ширина должны быть степенями двойки. RGB NM …RGB 1M RGB 0M ………… RGB N1 …RGB 11 RGB 01 RGB N0 …RGB 10 RGB 00 Получаем номер текстурного объекта Активизируем текстурный объект glBindTexture(texture);

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

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