Читать «Введение в OpenGL» онлайн - страница 17

Автор неизвестен

glEnable(GL_TEXTURE_GEN_S);

glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);

glTexGendv(GL_S, GL_EYE_PLANE, s_coeffs);

и такие же команды для координаты t с соответствующими изменениями.

Приложение

Приложение содержит информацию в основном прикладного характера, которая может понадобиться при изучении описанного выше материала.

Стандартные геометрические примитивы

Рассмотрим стандартные команды построения примитивов, которые реализованы в библиотеках GLU и GLUT.

Как уже было сказано, чтобы построить примитив из библиотеки GLU, надо сначала создать указатель на quadric- объект с помощью команды gluNewQuadric(), а затем вызвать одну из команд gluSphere(), gluCylinder(), gluDisk(), gluPartialDisk(). Рассмотрим эти команды отдельно:

void gluSphere(GLUquadricObj*qobj, GLdouble radius, GLint slices, GLint stacks)

Строит сферу с центром в начале координат и радиусом radius. При этом число разбиений сферы вокруг оси z задается параметром slices, а вдоль оси z параметром stacks.

void gluCylinder(GLUquadricObj*qobj, GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks)

Строит цилиндр без оснований (то есть кольцо), продольная ось параллельна оси z, заднее основание имеет радиус baseRadius, и расположено в плоскости z=0, переднее основание имеет радиус topRadius и расположено в плоскости z=height. Если задать один из радиусов равным нулю, то будет построен конус.

Параметры slices и stacks имеют тот же смысл, что и в предыдущей команде.

void gluDisk(GLUquadricObj*qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops)

Строит плоский диск (то есть круг) с центром в начале координат и радиусом outerRadius. При этом если значение innerRadius ненулевое, то в центре диска будет находиться отверстие радиусом innerRadius. Параметр slices задает число разбиений диска вокруг оси z, а параметр loops -число концентрических колец, перпендикулярных оси z.

void gluPartialDisk(GLUquadricObj *qobj, GLdouble innerRadius, GLdouble outerRadius, GLint slices, GLint loops, GLdouble startAngle, GLdouble sweepAngle);

Отличие этой команды от предыдущей заключается в том, что она строит сектор круга, начальный и конечный углы которого отсчитываются против часовой стрелки от положительного направления оси y и задаются параметрами startAngle и sweepAngle. Углы измеряются в градусах.

Команды, проводящие построение примитивов из библиотеки GLUT, реализованы через стандартные примитивы OpenGL и GLU. Для построения нужного примитива достаточно произвести вызов соответствующей команды.

void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)

void glutWireSphere(GLdouble radius, GLint slices, GLint stacks)

Команда glutSolidSphere() строит сферу, а glutWireSphere() - каркас сферы радиусом radius. Остальные параметры имеют тот же смысл, что и в предыдущих командах.