Главная страница

Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика


Скачать 0.66 Mb.
НазваниеРуководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Дата21.10.2022
Размер0.66 Mb.
Формат файлаdocx
Имя файла221937-83556.docx
ТипРуководство
#747097
страница22 из 30
1   ...   18   19   20   21   22   23   24   25   ...   30
static void Keyboard(byte key, int x, int y)

160

Глава 12. OPENGL в .NET

{

const int ESCAPE = 2 7;

if (key = ESCAPE)

Glut. glutLeaveMainLoop (); }

static void Main( string [] args) {

Glut.glutlnit () ;

Glut. glutlnitDisplayMode (Glut .GLUT_RGB); Glut . glutlnitWindowSize (Width , Height ); Glut. glutCreateWindow ("Red^square^example");

Glut .glutDisplayFunc( Display); Glut. glutReshapeFunc (Reshape ); Glut . glutKeyboardFunc (Keyboard );

Glut . glutMainLoop () ;

} }

}

Обратите внимание, что все команды и константы GL, GLU и GLUT находятся в пространствах имен Gl, Glu и Glut, соответ­ственно.

12.2. Использование OpenGL в WindowsForms

OpenGL в WindowsForms требует инициализации, аналогич­ной рассмотренной для библиотек MFC и VCL (см. п. 11). В Tao Framework уже реализован простой класс окна OpenGL — Tao.Platform. Windows.SimpleOpenGlControl.

Рассмотрим последовательность действий, необходимую для

12.2. Использование OPENGL в WINDOWSFORMS 161

создания простого оконного приложения в WindowsForms и с поддержкой OpenGL:

  • Создание проекта приложения: File—>New—>Projects—>Visual C#—> Windows—> Windows Application, набрать имя проек­та, ОК.

  • Добавление Тао к проекту: Project—>Add Reference—>.NET, найти в списке «Тао Framework OpenGL Binding For .NET» и «Тао Framework Windows Platform API Binding For .NET», выделить оба, ОК. Если компонент нет в списке, необходи­мо найти их в инсталляционном каталоге библиотеки Тао Framework и добавить через вкладку Browse.

  • Чтобы удобно создать окно OpenGL, необходимо добавить соответствующий объект на панель инструментов. Для этого нужно в контекстном меню панели «Toolbox» вы­брать пункт «Choose Items...», в появившемся списке най­ти «SimpleOpenGLControl», поставить галочку около него, ОК.

  • Добавление окна OpenGL на форму: на панели «Toolbox» найдите «SimpleOpenGLControl» и перетащите на форму приложения. Окно должно заполняться черным цветом.

  • Инициализация OpenGL: в конструкторе формы после вы­зова InitializeComponentQ добавить вызов функции создания контекста simpleOpenGlControll.InitializeContexts().

Функции рисования OpenGL можно добавлять в обработчик события Paint окна OpenGL (не путать с Paint формы).
Часть IV Приложения

163
Приложение А.

Примитивы библиотек GLU и GLUT

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

Чтобы построить примитив из библиотеки GLU, надо сна­чала создать указатель на quadric-объект с помощью коман­ды gluNewQuadricQ, а затем вызвать одну из команд gluSphereQ, gluCylinderQ, gluDisk(), gluPartialDisk(). Рассмотрим эти команды отдельно:

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

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

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

165

166 Приложение А. Примитивы библиотек GLU и GLUT

Данная функция строит цилиндр без оснований (кольцо), продольная ось параллельна оси z, заднее основание имеет ра­диус baseRadius, и расположено в плоскости z = О, переднее основание имеет радиус 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);

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

Команды, проводящие построение примитивов из библиоте­ки GLUT, реализованы через стандартные примитивы OpenGL

167

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

void glutSolidSphere (GLdouble radius ,

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

GLint slices , GLint stacks)

Команда glutSolidSphereQ строит сферу, a glutWireSphereQ — каркас сферы радиусом 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. Внутренний и внешний радиусы контролируются параметрами

168 Приложение А. Примитивы библиотек GLU и GLUT

inner Radius и outer Radius. Параметр nsides задает число сторон в кольцах, составляющих ортогональное сечение тора, a rings — число радиальных разбиений тора.

1   ...   18   19   20   21   22   23   24   25   ...   30


написать администратору сайта