Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Скачать 0.66 Mb.
|
void glutSolidTetrahedron (void) void glutWireTetrahedron (void) Эти команды строят тетраэдр (правильную треугольную пирамиду) или его каркас, при этом радиус описанной сферы вокруг него равен 1. void glutSolidOctahedron (void) void glutWireOctahedron (void) Эти команды строят октаэдр или его каркас, радиус описанной вокруг него сферы равен 1. void glutSolidDodecahedron (void) void glutWireDodecahedron (void) Эти команды строят додекаэдр или его каркас, радиус описанной вокруг него сферы равен квадратному корню из трех. void glutSolidlcosahedron (void) void glutWirelcosahedron (void) Эти команды строят икосаэдр или его каркас, радиус описанной вокруг него сферы равен 1. Правильное построение перечисленных примитивов возможно при удалении невидимых линии и поверхностей, для чего надо включить соответствующий режим вызовом команды glEnable(GL_DEPTH_TEST). Приложение Б. Демонстрационные программы Б.1. Пример 1: Простое GLUT-приложение Этот простой пример предназначен для демонстрации структуры GLUT-приложения и простейших основ OpenGL. Результатом работы программы является случайный набор цветных прямоугольников, который меняется при нажатии левой кнопки мыши. С помощью правой кнопки мыши можно менять режим заливки прямоугольников. Программа Б.1. Простой пример OpenGL. ^include #ifdef random #undef random #endif #define random (m) ( float) rand () *m/RAND_MAX 169 170 Приложение Б. Демонстрационные программы // ширина и высота окна GLint Width = 512, Height = 512; // число прямоугольников в окне int Times = 100; // с заполнением ? int FillFlag = 1; long Seed = 0; // функция отображает прямоугольник void DrawRect ( float xl , float yl , float x2 , float y2 , int FillFlag ) { glBegin( FillFlag ? GL_QUADS : GL_UNE_LOOP); glVertex2f (xl , yl) ; glVertex2f(x2, yl) ; glVertex2f(x2, y2 ) ; glVertex2f (xl , y2 ) ; glEnd(); } // управляет всем выводом на экран void Display (void) { _ int i ; float xl , yl , x2 , y2 ; float r , g, b; srand(Seed); glClearColor(0, 0, 0, I); g 1С1 e ar (GL_COIX)R_BUFFER_Brr); for( i = 0; i < Times; i++ ) { r = random (1); g = random (1); Б.1. Пример 1: Простое GLUT-приложение 171 b = random (1); glColor3f( r, g, b ); xl = random (1) * Width; yl = random (1) * Height; x2 = random (1) * Width; y2 = random (1) * Height; DrawRect( xl , yl , x2 , y2 , FillFlag ); } glFinish () ; } // Вызывается при изменении размеров окна void Reshape (GLint w, GLint h) { Width = w; Height = h; glViewport (0 , 0, w, h); glMatrixMode (GL_PROJECTION); glLoadldentity () ; glOrtho(0, w, 0, h, -1.0, 1.0); glMatrixMode (GL_MODELVIEW); glLoadldentity () ; } // Обрабатывает сообщения от мыши void Mouse (int button, int state , int x, int y) { if( state = GLUT_DOWN ) { switch( button ) { case GLUTLEFTBUTTON: Seed = random (RAND_MAX); 172 Приложение Б. Демонстрационные программы break; case GLUT_raGHT_BlJTTC)N: FillFlag = ! FillFlag ; break; } glutPostRedisplay (); } } // Обрабатывает сообщения от клавиатуры void Keyboard ( unsigned char key, int x, int у ) { const char ESCAPE = '\033'; if ( key = ESCAPE ) exit(0); } void main(int argc , char *argv[]) { glut Init (&argc , argv ); glutlnitDisplayMode (GLUT_RGB) ; glutlnitWindowSize (Width , Height ); glutCreateWindow (" Rect„drawwexample„ (RGB) " ); glutDisplayFunc( Display ) ; gl ut Re shape Fun с (Reshape ); glutKeyboardFunc (Keyboard); glutMouseFunc (Mouse); glutMainLoop () ; } Б. 2. Пример 2: Модель освещения OPENGL 173 Рис. Б.1. Результат работы программы Б.1. Слева — режим заполнения, справа — режим контуров. Б.2. Пример 2: Модель освещения OpenGL Программа предназначена для демонстрации модели освещения OpenGL на примере простой сцены, состоящей из тора, конуса и шара. Объектам назначаются разные материалы. В сцене присутствует точечный источник света. Программа Б.2. Модель освещения OpenGL. ^include // параметры материала тора |