Название: Компьютерная графика(Е.Н. Павенко)

Жанр: Информатика

Просмотров: 1429


5. вход в главный цикл glut.

Ну и последнее, что необходимо сделать, чтобы запустить  программу – это войти в так называемый главный цикл GLUT. Этот цикл запускает на выполнение так называемое сердце GLUT, которое обеспечивает взаимосвязь между операционной системой и теми функциями, которые отвечают за окно, получают информацию от устройств ввода/вывода. Для того чтобы перейти в главный цикл GLUT, надо выполнить единственную команду:

void glutMainLoop(void);

Вот в принципе основные шаги для самой простейшей GLUT программы. Ниже приведена простейшая программа с использованием средств библиотеки GLUT, которая рисует в окне изображение сферы.

Команда glFlush() гарантирует, что команда рисования будет выполнена немедленно,  а не сохранена в буфере.

И ещё, прежде чем использовать функции из GLUT, необходимо к программе подключить заголовок: #include <GL/glut.h>.

3. Создание консольного приложения, использующего OpenGL

Самым простым объектом, с помощью которого можно увидеть всю мощь OpenGL, является сфера. Давайте попытаемся ее изобразить. Для этого надо создать новый проект в VisualC++, выполнить следующие действия:

1. Запустите MSVisualC++6.0.

2. Щелкните меню File->New->Win32 Console Application.

3. Выберите каталог и имя проекта, впишите – sphere, щелкните OK.

4. Выберите An Empty Project, щелкните Finish.

5. Создайте в проекте файл  sphere.c.

6. Щелкните Build->Set Active Configuration и установите тип проекта sphere – Win32 Release

7. Далее, щелкайте Project->Settings->Link->Object/library modules и добавьте туда opengl32.lib, glu32.lib и gllut32a.lib.

8. Теперь откомпилируйте и запустите Вашу программу.

Меню Build->Execute Sphere.exe

 

Текст программы Sphere.exe:

#include <windows.h>

#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glaux.h>

#include <GL/glut.h>

void resize(int width,int height)

{

}   

void  display(void)

{

            glColor3d(1,1,0);

            glutSolidSphere(1.0, 25, 25);

           glFlush();

}

void init(void)

{

     glEnable(GL_COLOR_MATERIAL);

     glEnable(GL_LIGHTING);

     glEnable(GL_LIGHT0);

     glEnable(GL_DEPTH_TEST);

     glClearColor (0.0, 0.0, 0.0, 0.0);

     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode( GL_PROJECTION );

    glLoadIdentity();

    glOrtho(-5.0,5.0,-5.0,5.0,2.0,12.0);  

   gluLookAt( 0,0,5, 0,1,0, 0,1,0 );

    glMatrixMode( GL_MODELVIEW);

}

int main(int argc,char ** argv)

{

  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

  glutInitWindowPosition(50,10);

  glutInitWindowSize(400,400);

  glutCreateWindow(«Hello»);

  glutReshapeFunc(resize);

  init();

   glutDisplayFunc(display);

  glutMainLoop();

  return 0;

  }

4. Синтаксис команд OpenGl

Командами в OpenGl называются функции или процедуры. Для их описания используется следующий синтаксис:

type glCommand_name[1 2 3 4][b s i f d ub us ui][v](type1 arg1,-,typeN argN)

gl – это имя библиотеки, в которой описана эта функция:

для базовых функций OpenGL, функций из библиотек GLU, GLUT, GLAUX это gl, glu, glut, aux соответственно.

Command_name  имя команды

[1 2 3 4]число аргументов команды

[b s i f d ub us ui ]тип аргумента:

 

Доступны следующие типы:

b – GLbyte байт; s – GLshort короткое целое; i – GLint целое; f – GLfloat дробное; d – GLdouble дробное с двойной точностью; ub – GLubyte беззнаковый байт; us – GLushort беззнаковое короткое целое; ui – GLuint беззнаковое целое; v – массив из n параметров указанного типа;

[v] – наличие этого символа показывает, что в качестве параметров функции используется указатель на массив значений.

Символы в квадратных скобках в некоторых названиях не используются. Например, команда glVertex2i() описана как базовая в библиотеке OpenGL, и использует в качестве параметров два целых числа, а команда glColor3fv() использует в качестве параметра указатель на массив из трех вещественных чисел.

Ниже приведены примеры использования команд OpenGL с различными типами аргументов.

 double array[] = {0.5, 0.75, 0.3, 0.7};

 ...

 glColor3dv(array);

 glColor3ub(200,100,0);   // приводится к 200/256, 100/256, 0/256

 glColor3d(0.25,0.25,0);  // темно-желтый

 glColot3ub(0,100,0);     // темно-зеленый

 glColor3ub(0,0,255);     // синий

Задание на лабораторную работу

1. Ввести и отладить программу, приведенную в п.3.

2.Заменить функцию glutSolidSphere на функцию, из указанных ниже с соответсвующими параметрами. Значения параметров устанавливайте порядка единицы – 0,5…1,7. Если Вы укажете слишком маленький размер, фигуру будет плохо видно; если слишком большой, то она получится урезанной. Это связано с тем, что ее край как бы вылезет из монитора.

glutSolidCube(width) // куб

glutSolidTorus(r,R) // тор

glutSolidCylinder(r,height) // цилиндр

glutSolidCone(r,height) // конус

glutSolidIcosahedron(width) // многогранники

glutSolidOctahedron(width)

glutSolidTetrahedron(width)

glutSolidDodecahedron(width)

glutSolidTeapot(width) // рисует чайник

3. С помощью вышеуказанных функций нарисовать проволочные фигуры, заменив и имена функций  Solid на  Wire.

Контрольные вопросы

1. Назначение пакета OpenGl.

2. Назначение и использование библиотеки GLUT.

3. Синтаксис команд OpenGL.

4. Создание приложения с использованием OpenGL в среде Visual C++.

5. Режимы отображения информации в окне.