OpenGL. Компьютерная графика. Васильев С.А. - 34 стр.

UptoLike

Составители: 

36
glGetDoublev(GL_PROJECTION_MATRIX,proj_matrix);
gluUnProject(x,y,0.0,mv_matrix,proj_matrix,viewport,&ox,&oy,&oz);
printf("Объектные координаты при z=0 (%f,%f,%f)\n",ox,oy,oz);
Подобные ситуации часто возникают при выборе объектов на экране.
13 ПОСТРОЕНИЕ РЕАЛИСТИЧЕСКИХ ИЗОБРАЖЕНИЙ
Компьютерное графическое моделирование реальных либо виртуальных объектов предполагает
воссоздание на экране компьютера не только правильные геометрические соотношения элементов сце-
ны, но и передачу "атмосферы" визуального ряда. Сюда включаются: внешний вид материала, из кото-
рых сделан объект, признаки наличия света; преломление и смешивание цветов через полупрозрачные
среды фрагментов объекта, изменяющийся по глубине туман и т.д. Для создания реалистических изо-
бражений в OpenGL существует богатый командный инструментарий, обеспечивающий:
наложение текстур на поверхность объекта,
задание свойств материала из которого сделан объект,
определение свойств источников света,
задание модели освещения,
задание законов смешивания цветов через полупрозрачные поверхности,
задание тумана (дымки) и т.д.
13.1 Текстуры
Текстурой называется одномерное или двумерное изображение с совокупностью параметров, опре-
деляющих, каким образом производится наложение изображения на поверхность графического объекта.
В OpenGL текстурирование выполняется по следующей схеме:
1 Размещаем в оперативной памяти массив данных, в котором будет храниться образ будущей тек-
стуры.
2 Выбираем изображение (например, из файла) и преобразуем его к внутреннему формату
OpenGL. Заполняем массив данными изображения.
3 Создаем текстуру в памяти. Для этого будем использовать команду glTexImage2D() для двумер-
ных текстур, либо gluBilld2Mipmaps().
4 Задаем возможные параметры фильтрации текстуры для достижения наилучшего восприятия
объектов при различных коэффициентах масштабирования. Для этого будем использовать команду
glTexParameter().
5 Указываем каким образом координаты текстуры связанные с координатами текстурируемого
объекта. Это можно выполнить, например, командой glTexCoord().
Рассмотрим этапы текстурирования объекта подробнее.
13.1.1 Подготовка текстуры
В связи с тем, что OpenGL работает с многими операционными системами, то разработчики графи-
ческой библиотеки ввели свой формат для хранения изображения. В этом формате любое изображение
представлено в виде последовательности RGB составляющих точек изображения. Для облегчения счи-
тывания графических данных из файла, преобразования их во внутренний формат OpenGL и размеще-
ния в памяти существует функция AUX_RGBImageRec *auxDIBImageLoad(const char *Filename), где
Filename – название файла с расширением *.bmp или *.dib. Функция возвращает указатель на область
памяти, где хранятся преобразованные данные файла. Для работы с данной функцией необходимо под-
ключить библиотеку glaux.lib
Рассмотрим пример загрузки изображения будущей текстуры:
AUX_RGBImageRec *texture;
texture = auxDIBImageLoad("Image/t1.bmp");
В данном примере происходит загрузка файла картинки "t1.bmp" из каталога "Image". Данные фай-
ла будут сохранены в структуре texture, которую мы задали с помощью AUX_RGBImageRec.
Следует учитывать (!), что для корректной работы с текстурами необходимо соблюдать условие: