Выбрать главу

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

Рассмотрим стандартные команды построения примитивов, которые реализованы в библиотеках 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. Остальные параметры имеют тот же смысл, что и в предыдущих командах.

void glutSolidCube(GLdouble size)

void glutWireCube(GLdouble size)

Эти команды строят куб или каркас куба с центром в начале координат и длиной ребра size.

void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks)

void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks)

Эти команды строят конус или его каркас высотой height и радиусом основания base, расположенный вдоль оси z. Основание находится в плоскости z=0. Остальные параметры имеют тот же смысл, что и в предыдущих командах.

void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings)

void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings)

Эти команды строят тор или его каркас в плоскости z=0. Внутренний и внешний радиусы задаются параметрами innerRadius, outerRadius. Параметр nsides задает число сторон в кольцах, составляющих ортогональное сечение тора, а rings- число радиальных разбиений тора.

void glutSolidTetrahedron(void)

void glutWireTetrahedron (void)

Эти команды строят тетраэдр (правильную треугольную пирамиду) или его каркас, при этом радиус описанной сферы вокруг него равен 1.

void glutSolidOctahedron(void)

void glutWireOctahedron(void)

Эти команды строят октаэдр или его каркас, радиус описанной вокруг него сферы равен 1.

void glutSolidDodecahedron(void)

void glutWireDodecahedron(void)

Эти команды строят додекаэдр или его каркас, радиус описанной вокруг него сферы равен квадратному корню из трех.

void glutSolidIcosahedron(void)

void glutWireIcosahedron(void)

Эти команды строят икосаэдр или его каркас, радиус описанной вокруг него сферы равен 1.

Создание приложения в среде MS Visual C++ 5.0

Перед началом работы необходимо скопировать файлы glut.h, glut32.lib glut32.dll в каталоги…\MSVC\Include\Gl,…\MSVC\Lib,…\Windows\System соответственно. Также в этих каталогах надо проверить наличие файлов gl.h, glu.h, opengl32.lib, glu32.lib, opengl32.dll, glu32.dll, которые обычно входят в состав Visual C++ и Windows. При использовании команд из библиотеки GLAUX к перечисленным файлам надо добавить glaux.h, glaux.lib.

Для создания приложения надо выполнить следующие действия:

• Создание проекта: для этого надо выбрать File→New→Projects→Win32 Console Application, набрать имя проекта, OK.

• В появившемся окне выбрать ‘An empty project’, Finish, OK.

• Текст программы можно либо разместить в созданном текстовом файле (выбрав File→New→Files→Text File), либо добавив файл с расширением *.c или *.cpp в проект (выбрав Project→Add To Project→Files).

• Подключить к проекту библиотеки OpenGL. Для этого надо выбрать Project-›Settings-›Link и в поле Object/library modules набрать названия нужных библиотек: opengl32.lib, glu32.lib, glut32.lib и, если надо, glaux.lib.

• Для компиляции выбрать Build→Build program.exe, для выполнения - Build→Execute program.exe.

• Чтобы при запуске не появлялось текстовое окно, надо выбрать Project→Settings→Link и в поле Project Options вместо ‘subsystem:console’ набрать ‘subsystem:windows’,и набрать там же строку ‘/entry:mainCRTStartup’

Когда программа готова, рекомендуется перекомпилировать ее в режиме ‘Release’ для оптимизации по быстродействию и объему. Для этого сначала надо выбрать Build→Set Active Configuration… и отметить -Win32 Release, а затем заново подключить необходимые библиотеки.

Создание приложения в среде Borland C++ 5.02

Как и для Visual C++, сначала надо обеспечить наличие файлов glut.h, glut32.lib, glut32.dll в каталогах…\BorlandC\Include\Gl,…\BorlandC\Lib,…\Windows\System соответственно. Также в этих каталогах надо проверить наличие файлов gl.h, glu.h, opengl32.lib, glu32.lib, opengl32.dll, glu32.dll, которые обычно входят в состав BorlandC++ и Windows. При этом надо учитывать, что версии Microsoft файлов opengl32.lib, glu32.lib, glut32.lib для Borland C++ не подходят и следует использовать только совместимые версии. Чтобы создать такие версии, надо использовать стандартную программу ‘implib, которая находится в каталоге…\BorlandC\Bin. Для этого надо выполнить команды вида implib…\BorlandC\Lib\filename.lib…\filename.dll для перечисленных файлов, которые создают нужный *.lib файл из соответствующего *.dll файла. Кроме того, надо отметить, что компилятор BorlandC не может по неизвестным причинам использовать файл glaux.lib, входящий в состав BorlandC++5.02, при компиляции приложения, использующего библиотеку GLAUX, поэтому возможно от этой библиотеки придется отказаться. Для создания приложения надо выполнить следующие действия: