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

UptoLike

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

42
void glTexEnv[i f](
GLenum target,
GLenum pname,
GLtype param)
void glTexEnv[i f]v(
GLenum target,
GLenum pname,
GLtype *params)
Это многофункциональные команды с богатыми возможностями обработки текстур. Для полного
изучения их возможностей смотрите в MSDN. В нашем случае ограничимся базовыми функциями.
Параметр target определяет цель действия функции glTexEnv* и должен быть равен
GL_TEXTURE_ENV.
Параметр pname задает имя параметра и будем использовать GL_TEXTURE_ENV_MODE.
В качестве конкретных значений параметра будем использовать константы GL_MODULATE и
GL_REPLACE.
В случае GL_MODULATE итоговое значение текстурируемого участка будет определяться умно-
жением значений точек участка на значение соответствующих точек из текстуры.
В случае GL_REPLACE итоговое значение текстурируемого участка будет определяться только
значением соответствующих точек из текстуры.
13.1.5 Координаты текстуры
В OpenGL координаты точек на текстуре представлены в параметрической системе координат (s, t).
Значения s и t находятся в отрезке [0,1].
Для текстурирования объекта необходимо указать связь вершин объекта и соответствующих то-
чек в текстуре (см. рис. 6). Для этой цели
Рис. 6 Текстурирование объекта
имеются несколько команд. Одна из них в явном виде задает координаты текстуры для каждой верши-
ны объекта и имеет вид:
void glTexCoord[1 2 3 4][s i f d] (GLtype coord)
void glTexCoord[1 2 3 4][s i f d]v (GLtype *coord)
Команда glTexCoord2* устанавливает связь координат s и t c ассоциируемой вершиной объекта.
Например, для ситуации изображенной на рисунке фрагмент кода программы имеет вид
glBegin(GL_TRIANGLES); // Рисуем треугольник
glTexCoord2f(0.0f,1.0f);glVertex3f(2.0f,8.0f,0.0f);
glTexCoord2f(1.0f,1.0f);glVertex3f(6.0f,8.0f,0.0f);
glTexCoord2f(0.0f,0.0f);glVertex3f(2.0f,1.0f,0.0f);
glEnd();
Если требуется "размножение" текстуры на поверхности объекта, то это можно реализовать изме-
нением кратности параметра s или t в команде glTexCoord2*. Например, нам необходимо уложить на
текстурируемую поверхность 10 "картинок" текстуры по ширине. Для этого достаточно записать сле-
дующий код программы
glBegin(GL_QUADS); // Рисуем прямоугольник
glTexCoord2f( 0.0f,0.0f);glVertex3f( 1.0f,1.0f,1.0f);
glTexCoord2f( 0.0f,1.0f);glVertex3f( 1.0f,5.0f,1.0f);
glTexCoord2f(10.0f,1.0f);glVertex3f(11.0f,5.0f,1.0f);
glTexCoord2f(10.0f,0.0f);glVertex3f(11.0f,1.0f,1.0f);
s
t
(0,0)
(0,1)
(1,1)
(1,0)
y
x
z
Текстура
Объект
Текстура на объекте
(2, 1, 0)
(
6, 8, 0
)
(
2, 8, 0
)