Уроки OpenGL + C#.

Текстурирование в OpenGL. Введение.

 

 

До сих пор мы рисовали все геометрические объекты либо одним цветом, либо с плавной закраской (когда внутренние цвета рассчитываются интерполяцией цветов в вершинах) – то есть объекты рисовались без текстурирования. Если вы хотите нарисовать массивную кирпичную стену без текстурирования, каждый кирпичик должен быть нарисован в виде отдельного полигона. Без текстурирования такая стена может потребовать тысяч полигонов, хотя сама она является прямоугольной, и даже тогда кирпичи будут выглядеть слишком гладкими и одинаковыми, то есть недостаточно реалистичными.

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

Такие образом, один полигон может представлять сразу целую часть трехмерной сцены – например небо, стены, заборы, и т.д. В сочетании с установкой свойств материалов и других спецэффектов (например бамп мэппинг) вы можете достигнуть высокого уровня детализации поверхности. По сути, текстуры – это массивы данных, которые в соответствии с текстурными координатами будут наложены на трехмерный объект.

Тексел (сокращение от texture element) – это индивидуальное значение элемента текстуры.

Библиотека DEVIL.

Для работы с текстурами мы будем использовать библиотеку DevIL. Как мы уже говорили , описывая компоненты библиотеки Tao, DevIL 1.6.8.3, включенная в Tao 2.1.0 (она же OpenIL) – кроссплатформенная библиотека, реализующая программный интерфейс для работы с изображениями. На данный момент библиотека поддвержвивает работу с изображениями 43-х форматов для чтения и 17-ти форматов для записи.

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

Чтобы использовать наложение текстуры, вы должны выполнить следующие шаги:

  1. Создать текстурный объект и задать текстуру для него
  2. Задать, как текстура должна воздействовать на каждый пиксель
  3. Активизировать механизм текстурирования
  4. Нарисовать сцену, передавая на конвейер визуализации и геометрические координаты и координаты текстуры

Рассмотрим загрузку и наложение текстуры на реальном примере.


Обсуждение данного урока: Текстурирование в OpenGL. Введение.
Далее: 12.2 Загрузка изображения и текстурирование вращающейся плоскости.