Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Скачать 0.66 Mb.
|
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 — число радиальных разбиений тора. |