Введение в 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: