ВУЗ:
Составители:
Рубрика:
Е. Ю. Ечкина, С. Б. Базаров, И. Н. Иновенков «Визуализация в научных исследованиях»
Кафедра АНИ факультета ВМК МГУ имени М. В. Ломоносова http://ani.cs.msu.su
57
GL_TEXTURE_WRAP_T аналогично предыдущему значению, только для
координаты t.
Использование режима GL_NEAREST значительно повышает скорость наложения
текстуры, однако при этом снижается качество, так как в отличие от GL_LINEAR
интерполяция не производится.
Для того, чтобы определить, как текстура будет взаимодействовать с материалом, из
которого сделан объект, используются команды
void glTexEnv[i f](GLenum target, GLenum pname, GLtype param)
void glTexEnv[i f]v(GLenum target, GLenum pname, GLtype *params)
Параметр target должен быть равен GL_TEXTURE_ENV, а в качестве pname
рассмотрим только одно значение GL_TEXTURE_ENV_MODE, которое наиболее
часто применяется. Параметр если param может быть равен:
GL_MODULATE конечный цвет находится как произведение цвета точки на
поверхности и цвета соответствующей ей точки на текстуре.
GL_REPLACE в качестве конечного цвета используется цвет точки на текстуре.
GL_BLEND конечный цвет находится как сумма цвета точки на поверхности и цвета
соответствующей ей точки на текстуре с учетом их яркости.
Координаты текстуры
Перед нанесением текстуры на объект осталось установить соответствие между
точками на поверхности объекта и на самой текстуре. Задавать это соответствие
можно двумя методами: отдельно для каждой вершины или сразу для всех вершин,
задав параметры специальной функции отображения.
Первый метод реализуется с помощью команд
void glTexCoord[1 2 3 4][s i f d](type coord)
void glTexCoord[1 2 3 4][s i f d]v(type *coord)
Чаще всего используется команды вида glTexCoord2..(type s, type t), задающие текущие
координаты текстуры. Вообще, понятие текущих координат текстуры аналогично
понятиям текущего цвета и текущей нормали, и является атрибутом вершины. Однако
даже для куба нахождение соответствующих координат текстуры является довольно
трудоемким занятием, поэтому в библиотеке GLU помимо команд, проводящих
построение таких примитивов, как сфера, цилиндр и диск, предусмотрено также
наложение на них текстур. Для этого достаточно вызвать команду
void gluQuadricTexture(GLUquadricObj*quadObject, GLboolean textureCoords)
с параметром textureCoords равным GL_TRUE, и тогда текущая текстура будет
автоматически накладываться на примитив.
Второй метод реализуется с помощью команд
void glTexGen[i f d](GLenum coord, GLenum pname, GLtype param)
void glTexGen[i f d]v(GLenum coord, GLenum pname, const GLtype *params)
Параметр coord определяет для какой координаты задается формула и может
принимать значение GL_S, GL_T; pname определяет тип формулы и может быть равен
GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE, GL_EYE_PLANE. С помощью
params задаются необходимые параметры, а param может быть равен
GL_OBJECT_LINEAR, GL_EYE_LINEAR, GL_SPHERE_MAP. Рассмотрение всех
Е. Ю. Ечкина, С. Б. Базаров, И. Н. Иновенков «Визуализация в научных исследованиях» GL_TEXTURE_WRAP_T аналогично предыдущему значению, только для координаты t. Использование режима GL_NEAREST значительно повышает скорость наложения текстуры, однако при этом снижается качество, так как в отличие от GL_LINEAR интерполяция не производится. Для того, чтобы определить, как текстура будет взаимодействовать с материалом, из которого сделан объект, используются команды void glTexEnv[i f](GLenum target, GLenum pname, GLtype param) void glTexEnv[i f]v(GLenum target, GLenum pname, GLtype *params) Параметр target должен быть равен GL_TEXTURE_ENV, а в качестве pname рассмотрим только одно значение GL_TEXTURE_ENV_MODE, которое наиболее часто применяется. Параметр если param может быть равен: GL_MODULATE конечный цвет находится как произведение цвета точки на поверхности и цвета соответствующей ей точки на текстуре. GL_REPLACE в качестве конечного цвета используется цвет точки на текстуре. GL_BLEND конечный цвет находится как сумма цвета точки на поверхности и цвета соответствующей ей точки на текстуре с учетом их яркости. Координаты текстуры Перед нанесением текстуры на объект осталось установить соответствие между точками на поверхности объекта и на самой текстуре. Задавать это соответствие можно двумя методами: отдельно для каждой вершины или сразу для всех вершин, задав параметры специальной функции отображения. Первый метод реализуется с помощью команд void glTexCoord[1 2 3 4][s i f d](type coord) void glTexCoord[1 2 3 4][s i f d]v(type *coord) Чаще всего используется команды вида glTexCoord2..(type s, type t), задающие текущие координаты текстуры. Вообще, понятие текущих координат текстуры аналогично понятиям текущего цвета и текущей нормали, и является атрибутом вершины. Однако даже для куба нахождение соответствующих координат текстуры является довольно трудоемким занятием, поэтому в библиотеке GLU помимо команд, проводящих построение таких примитивов, как сфера, цилиндр и диск, предусмотрено также наложение на них текстур. Для этого достаточно вызвать команду void gluQuadricTexture(GLUquadricObj*quadObject, GLboolean textureCoords) с параметром textureCoords равным GL_TRUE, и тогда текущая текстура будет автоматически накладываться на примитив. Второй метод реализуется с помощью команд void glTexGen[i f d](GLenum coord, GLenum pname, GLtype param) void glTexGen[i f d]v(GLenum coord, GLenum pname, const GLtype *params) Параметр coord определяет для какой координаты задается формула и может принимать значение GL_S, GL_T; pname определяет тип формулы и может быть равен GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE, GL_EYE_PLANE. С помощью params задаются необходимые параметры, а param может быть равен GL_OBJECT_LINEAR, GL_EYE_LINEAR, GL_SPHERE_MAP. Рассмотрение всех Кафедра АНИ факультета ВМК МГУ имени М. В. Ломоносова http://ani.cs.msu.su 57