
- •Содержание
- •Введение
- •1 Лабораторная работа №1 opengl и графические примитивы
- •1.1 Теоретические положения
- •1.1.1 Структура OpenGl-проекта
- •1.1.2 Работа с графическими примитивами
- •1.1.2.1 Точки
- •1.1.2.2 Линии
- •1.1.2.3 Треугольники
- •1.1.2.4 Четырехугольники и многоугольники
- •1.1.2.5 Массивы вершин и цветов
- •1.1.2.6 Область вывода
- •1.2 Практика
- •1.2.1 Общее задание
- •1.2.2 Варианты индивидуального задания
- •2 Лабораторная работа №2 Матрицы и геометрические преобразования
- •2.1 Теоретические положения
- •2.1.1 Системы координат OpenGl
- •2.1.2 Видовые преобразования
- •2.1.3 Ориентация
- •2.1.4 Трехмерные примитивы
- •2.2 Практика
- •2.2.1 Общее задание
- •2.2.2 Варианты индивидуального задания
- •3 Лабораторная работа №3 Проекции, источники света, материалы
- •3.1 Теоретические положения
- •3.1.1 Виды плоских проекций
- •3.1.1.1 Ортографическая проекция
- •3.1.1.2 Одноточечная перспективная проекция
- •3.1.2 Освещение объектов
- •3.1.2.1 Нормали и грани
- •3.1.2.2 Материалы
- •3.1.2.3 Источники света
- •3.1.2.3 Модели освещения и затенения
- •3.2 Практика
- •3.2.1 Общее задание
- •3.2.2 Варианты индивидуального задания
- •4 Лабораторная работа №4 Отсечение и прозрачность
- •4.1 Теоретические положения
- •4.1.1 Принадлежность пикселей контексту воспроизведения
- •4.1.2 Отсечение
- •4.1.3 Прозрачность
- •4.2 Практика
- •4.2.1 Общее задание
- •5 Лабораторная работа №5 Трафареты и глубина
- •5.1 Теоретические положения
- •5.1.1 Трафарет
- •5.1.2 Глубина
- •5.2 Практика
- •5.2.1 Общее задание
- •6 Лабораторная работа №6 Текстуры
- •6.1 Теоретические положения
- •6.1.2 Загрузка графического файла в память
- •6.1.3 Создание имени-идентификатора текстуры
- •6.1.4 Установка идентификатора в активное положение
- •6.1.5 Создание текстуры в памяти
- •6.1.6 Установка параметров текстуры
- •6.1.7 Установка параметров взаимодействия текстуры с объектом
- •6.1.8 Связывание координат текстуры с объектом
- •6.2 Практика
- •6.2.1 Общее задание
- •7 Список литературы
- •Приложение а
- •Приложение б шаблон opengl-проекта «basis»
- •Приложение в Синтаксис команд и типы данных OpenGl
- •Приложение г Пример двумерного рисунка
- •Приложение д Положение источников света
6.1.6 Установка параметров текстуры
Для установки параметров текстуры служат функции
glTexParameter[if](GLenum target, GLenum pname, GLenum param) и
glTexParameter[if]v(GLenum target, GLenum pname, GLenum* params).
Первый параметр принимает значение GL_TEXTURE_1D илиGL_TEXTURE_2D. Второй –pname– определяет параметр текстуры, который вы будете изменять. И третий параметр – это устанавливаемое значение. Если вы воспользовалисьgluBuild2DMipmapsвместоglTexImage2D, то вам не надо устанавливать следующие параметры, т.к. уже сформированы текстуры всех уровней детализации, и OpenGL сможет подобрать текстуру нужного уровня, если площадь объекта не совпадает с площадью текстуры. Иначе надо устанавливать параметры (строки 17, 18, 23, 24).
Для параметра pname возможны значения, приведенные в табл. 6.1.
Таблица 6.1
|
|
GL_TEXTURE_MIN_FILTER |
Определяет функцию уменьшения текстуры, используется, когда площадь пикселя, на который она накладывается, больше, чем элемент текстуры. Всего определено шесть таких функций. Две из них, определенные константами (GL_NEAREST и GL_LINEAR), используют один или четыре ближайшие элемента текстуры для расчета значения текстуры. Остальные четыре – уровни детализации (mipmapping) |
T
Продолжение табл.
6.1 |
Функция увеличения текстуры используется, когда площадь пикселя, на который она накладывается, меньше или равна элементу текстуры. Всего определены две такие функции, задаваемые константами GL_NEAREST и GL_LINEAR. По умолчанию используется GL_LINEAR. |
GL_ TEXTURE_WRAP_S
S-координата текстуры – это горизонтальная координата; T-координата – вертикальная
|
Устанавливает параметр сворачивания координаты s текстуры в значение GL_CLAMP или GL_REPEAT. GL_CLAMP фиксирует координату s в диапазоне [0,1], что полезно для предотвращения искусственного сворачивания, когда на объект накладывается один образ. GL_REPEAT отбрасывает целую часть координаты s, т.к. OpenGL использует только значения, меньшие 1, и таким образом создается повторяющийся трафарет. Бордюр текстуры доступен только при установке этого параметра в GL_REPEAT. |
GL__TEXTURE_WRAP_T |
Аналогично GL_TEXTURE_WRAP_S, но только для координаты t. |
GL_TEXTURE_BORDER_COLOR |
Устанавливает цвет бордюра. Параметр params содержит четыре значения, которые определяют цвет RGBА бордюра. Целочисленное значение линейно отображается в диапазоне [0,1]. Исходно цвет бордюра установлен в (0, 0, 0, 0) |
Для параметра param возможны следующие значения (таблица 6.2).
Таблица 6.2
|
|
GL_NEAREST |
Возвращает значение ближайшего от центра пикселя элемента текстуры
|
GL_LINEAR |
Возвращает среднеарифметическое значение четырех элементов текстуры, расположенных в центре пикселя. Сюда также могут входить элементы бордюра текстуры, в зависимости от точности наложения текстуры и значений, установленных для GL_TEXTURE_WRAP_S и/или GL_TEXTURE_WRAP_T
|
GL_NEAREST_MIPMAP_NEAREST |
Выбирает уровень детали-зации, который наиболее точно соответствует размеру пикселя, и использует критерий GL_NEAREST для формирования значения текстуры
|
GL_LINEAR_MIPMAP_NEAREST |
Выбирает уровень детали-зации, который наиболее точно соответствует размеру пикселя, и использует критерий GL_LINEAR для формирования значения текстуры
|
G
Продолжение табл.
6.2 |
Выбирает два уровня детализации, которые наиболее точно соответствуют размеру пикселя, и использует критерий GL_NEAREST для формирования каждого значения текстуры. Окончательное значение текстуры является среднеарифметическим этих двух значений. Это значение аргумента установлено по умолчанию. |
GL_LINEAR_MIPMAP_LINEAR |
Выбирает два уровня детализации, которые наиболее точно соответствуют размеру пикселя, и использует критерий GL_NEAREST для формирования каждого значения текстуры. Окончательное значение текстуры является среднеарифметическим этих двух значений. |
Например, для того чтобы изображение размножалось на плоскости, необходимо добавить следующи строки:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);