Введение в OpenGL | страница 12



Область вывода

После применения матрицы проекций на вход следующего преобразования подаются так называемые усеченные (clip) координаты, для которых значения всех компонент (x>c, y>c, z>c, w>c)>T находятся в отрезке [-1,1]. После этого находятся нормализованные координаты вершин по формуле:

(x>n, y>n, z>n)>T=(x>c/w>c, y>c/w>c, z>c/w>c)>T

Область вывода представляет из себя прямоугольник в оконной системе координат, размеры которого задаются командой:

>void glViewPort(GLint x, GLint y, GLint width, GLint height)

Значения всех параметров задаются в пикселах и определяют ширину и высоту области вывода с координатами левого нижнего угла (x,y) в оконной системе координат. Размеры оконной системы координат определяются текущими размерами окна приложения, точка (0,0)находится в левом нижнем углу окна.

Используя параметры команды glViewPort(), вычисляются оконные координаты центра области вывода (o>x, o>y) по формулам o>x=x+width/2, o>y=y+height/2.

Пусть p>x=width, p>y=height, тогда можно найти оконные координаты каждой вершины:

(x>w, y>w, z>w)>T = ((p>x/2) x>n+ o>x , (p>y/2) y>n+ o>y, [(f-n)/2] z>n+(n+f)/2)>T

При этом целые положительные величины n и f задают минимальную и максимальную глубину точки в окне и по умолчанию равны 0 и 1 соответственно. Глубина каждой точки записывается в специальный буфер глубины (z-буфер), который используется для удаления невидимых линий и поверхностей. Установить значения n и f можно вызовом функции

>void glDepthRange(GLclampd n, GLclampd f)

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

Материалы и освещение

Для создания реалистических изображений необходимо определить как свойства самого объекта, так и свойства среды, в которой он находится. Первая группа свойств включает в себя параметры материла, из которого сделан объект, способы нанесения текстуры на его поверхность, степень прозрачности объекта. Ко второй группе можно отнести количество и свойства источников света, уровень прозрачности среды. Все эти свойства можно задавать, используя соответствующие команды OpenGL.

Свойства материала

Для задания параметров текущего материала используются команды

>void glMaterial[i f](GLenum face, GLenum pname, GLtype param)

>void glMaterial[i f]v(GLenum face, GLenum pname, GLtype *params)

С их помощью можно определить рассеянный, диффузный и зеркальный цвета материала, а также цвет степень зеркального отражения и интенсивность излучения света, если объект должен светиться. Какой именно параметр будет определяться значением param, зависит от значения pname: