Математики и кибернетики


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



бет18/20
Дата29.05.2016
өлшемі0.67 Mb.
#100720
түріКонтрольные вопросы
1   ...   12   13   14   15   16   17   18   19   20

Создание приложения в среде MS Visual C++ 6.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’, а затем заново подключить необходимые библиотеки.
  1. Демонстрационные программы




    1. Пример 1: Простое GLUT-приложение


Этот простой пример предназначен для демонстрации структуры GLUT-приложения и простейших основ OpenGL. Результатом работы программы является случайный набор цветных прямоугольников, который меняется при нажатии левой кнопки мыши. С помощью правой кнопки мыши можно менять режим заливки прямоугольников.
#include

#include


#ifdef random

#undef random

#endif
#define random(m) (float)rand()*m/RAND_MAX
/* ширина и высота окна */

GLint Width = 512, Height = 512;

/* число прямоугольников в окне */

int Times = 100;

/* с заполнением ?*/

int FillFlag = 1;


long Seed = 0;
/* функция отображает прямоугольник */

void


DrawRect( float x1, float y1, float x2, float y2,

int FillFlag )

{

glBegin(FillFlag ? GL_QUADS : GL_LINE_LOOP);



glVertex2f(x1, y1);

glVertex2f(x2, y1);

glVertex2f(x2, y2);

glVertex2f(x1, y2);

glEnd();

}
/* управляет всем выводом на экран */

void

Display(void)



{

int i;


float x1, y1, x2, y2;

float r, g, b;


srand(Seed);
glClearColor(0, 0, 0, 1);

glClear(GL_COLOR_BUFFER_BIT);


for( i = 0; i < Times; i++ ) {

r = random(1);

g = random(1);

b = random(1);

glColor3f( r, g, b );
x1 = random(1) * Width;

y1 = random(1) * Height;

x2 = random(1) * Width;

y2 = random(1) * Height;

DrawRect(x1, y1, x2, y2, FillFlag);

}
glFinish();

}
/* Вызывается при изменении размеров окна */

void


Reshape(GLint w, GLint h)

{

Width = w;



Height = h;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(0, w, 0, h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}
/* Обрабатывает сообщения от мыши */

void


Mouse(int button, int state, int x, int y)

{

if( state == GLUT_DOWN ) {



switch( button ) {

case GLUT_LEFT_BUTTON:

Seed = random(RAND_MAX);

break;


case GLUT_RIGHT_BUTTON:

FillFlag = !FillFlag;

break;

}

glutPostRedisplay();



}

}
/* Обрабатывает сообщения от клавиатуры */

void

Keyboard( unsigned char key, int x, int y )



{

#define ESCAPE '\033'


if( key == ESCAPE )

exit(0);


}
main(int argc, char *argv[])

{

glutInit(&argc, argv);



glutInitDisplayMode(GLUT_RGB);

glutInitWindowSize(Width, Height);

glutCreateWindow("Rect draw example (RGB)");
glutDisplayFunc(Display);

glutReshapeFunc(Reshape);

glutKeyboardFunc(Keyboard);

glutMouseFunc(Mouse);


glutMainLoop();

}

    1. Пример 2: Модель освещения OpenGL

Программа предназначена для демонстрации модели освещения OpenGL на примере простой сцена, состоящей из тора, конуса и шара. Объектам назначаются разные материалы. В сцене присутствует точечный источник света.
#include

#include


/* параметры материала тора */

float mat1_dif[]={0.8f,0.8f,0.0f};

float mat1_amb[]= {0.2f,0.2f,0.2f};

float mat1_spec[]={0.6f,0.6f,0.6f};

float mat1_shininess=0.5f*128;
/* параметры материала конуса */

float mat2_dif[]={0.0f,0.0f,0.8f};

float mat2_amb[]= {0.2f,0.2f,0.2f};

float mat2_spec[]={0.6f,0.6f,0.6f};

float mat2_shininess=0.7f*128;
/* параметры материала шара */

float mat3_dif[]={0.9f,0.2f,0.0f};

float mat3_amb[]= {0.2f,0.2f,0.2f};

float mat3_spec[]={0.6f,0.6f,0.6f};

float mat3_shininess=0.1f*128;
/* Инициализируем параметры материалов и

* источника света

*/

void init (void)



{

GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };

GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };

GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };

GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
/* устанавливаем параметры источника света */

glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient);

glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse);

glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular);

glLightfv (GL_LIGHT0, GL_POSITION, light_position);
/* включаем освещение и источник света */

glEnable (GL_LIGHTING);

glEnable (GL_LIGHT0);
/* включаем z-буфер */

glEnable(GL_DEPTH_TEST);


}
/* Функция вызывается при необходимости

* перерисовки изображения. В ней осуществляется

* весь вывод геометрии.

*/

void display (void)



{

/* очищаем буфер кадра и буфер глубины */

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();

glRotatef (20.0, 1.0, 0.0, 0.0);


/* отображаем тор */

glMaterialfv (GL_FRONT,GL_AMBIENT,mat1_amb);

glMaterialfv (GL_FRONT,GL_DIFFUSE,mat1_dif);

glMaterialfv (GL_FRONT,GL_SPECULAR,mat1_spec);

glMaterialf (GL_FRONT,GL_SHININESS,mat1_shininess);
glPushMatrix ();

glTranslatef (-0.75, 0.5, 0.0);

glRotatef (90.0, 1.0, 0.0, 0.0);

glutSolidTorus (0.275, 0.85, 15, 15);

glPopMatrix ();
/* отображаем конус */

glMaterialfv (GL_FRONT,GL_AMBIENT,mat2_amb);

glMaterialfv (GL_FRONT,GL_DIFFUSE,mat2_dif);

glMaterialfv (GL_FRONT,GL_SPECULAR,mat2_spec);

glMaterialf (GL_FRONT,GL_SHININESS,mat2_shininess);
glPushMatrix ();

glTranslatef (-0.75, -0.5, 0.0);

glRotatef (270.0, 1.0, 0.0, 0.0);

glutSolidCone (1.0, 2.0, 15, 15);

glPopMatrix ();
/* отображаем шар */

glMaterialfv (GL_FRONT,GL_AMBIENT,mat3_amb);

glMaterialfv (GL_FRONT,GL_DIFFUSE,mat3_dif);

glMaterialfv (GL_FRONT,GL_SPECULAR,mat3_spec);

glMaterialf (GL_FRONT,GL_SHININESS,mat3_shininess);
glPushMatrix ();

glTranslatef (0.75, 0.0, -1.0);

glutSolidSphere (1.0, 15, 15);

glPopMatrix ();


glPopMatrix ();

/* выводим сцену на экран */

glFlush ();

}
/* Вызывается при изменении пользователем размеров окна

*/

void reshape(int w, int h)



{

/* устанавливаем размер области вывода

* равным размеру окна

*/

glViewport (0, 0, (GLsizei) w, (GLsizei) h);


/* задаем матрицу проекции с учетом размеров окна */

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();
gluPerspective(

40.0, /* угол зрения в градусах */

(GLfloat)w/h, /* коэффициент сжатия окна */

1,100.0); /* расстояние до плоскостей отсечения */

glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();

gluLookAt(

0.0f,0.0f,8.0f, /* положение камеры */

0.0f,0.0f,0.0f, /* центр сцены */

0.0f,1.0f,0.0f); /* положительное направление оси y */

}
/* Вызывается при нажатии клавиши на клавиатуре */

void keyboard(unsigned char key, int x, int y)

{

switch (key) {



case 27: /* escape */

exit(0);


break;

}

}


/* Главный цикл приложения.

* Создается окно, устанавливается режим

* экрана с буфером глубины

*/

int main(int argc, char** argv)



{

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB

| GLUT_DEPTH);

glutInitWindowSize (500, 500);

glutCreateWindow (argv[0]);

init ();

glutReshapeFunc (reshape);

glutDisplayFunc (display);

glutKeyboardFunc (keyboard);

glutMainLoop();

return 0;

}



    1. Достарыңызбен бөлісу:
1   ...   12   13   14   15   16   17   18   19   20




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет