Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Скачать 0.66 Mb.
|
float matl_dif[] = {0.8f ,0.8f,0.0f}; float matl_amb[]= {0.2 f ,0 . 2 i ,0 . 2 i } ; float matl_spec[] = {0.6f ,0.6f,0.6f}; float mat l_shininess=0.5 f *128; // параметры материала конуса float mat2_dif[] = {0.0i ,0.0f,0.8f}; float mat2_amb[]= {0.2 f ,0 . 2 f ,0 . 2 f } ; float mat2_spec[] = {0.6f ,0.6f,0.6f}; float mat2_shininess =0.7f *128; // параметры материала шара float mat3_dif[] = {0.9f ,0.2 f ,0.0 f}; float mat3_amb[]= {0.2f,0.2f,0.2f}; float mat3_spec[] = {0.6f ,0.6f ,0.6f}; float mat3_shininess =0.1 f *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_LIGHTLNG); glEnable (GL_LIGHT0); /* включаем z—буфер */ glEnable (GL_DEPTH_TEST); } // Функция вызывается при необходимости // перерисовки изображения. Б. 2. Пример 2: Модель освещения OPENGL 175 // В ней осуществляется весь вывод геометрии. void display (void) { /* очищаем буфер кадра и буфер глубины */ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BrT) ; glPushMatrix (); glRotatef (20.0, 1.0, 0.0, 0.0); /* отображаем тор */ glMaterialfv (GL_FRONT,GL_ AMBIENT, matl_amb); glMaterialfv (GL_FRONT,GL_DIFFUSE, matl_dif); glMaterialfv (GL_FRONT,GL_SPECULAR, matl_spec) ; g 1M a t e r i a 1 f (GL_FRONT, GL_SHININESS, matl_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) ; g 1M a t e r i a 1 f (GL_FRONT, GL_SHININESS, mat2_shininess ); glPushMatrix (); 176 Приложение Б. Демонстрационные программы 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) ; g 1M a t e r i a 1 f (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) ; glLoadldentity () ; Б. 2. Пример 2: Модель освещения OPENGL 177 gluPerspective ( // угол зрения в градусах 40.0 , // коэффициент сжатия окна (GLfloat)w/h, // расстояние до плоскостей отсечения 1,100.0); glMatrixMode (GL_MODELVIEW); glLoadldentity () ; gluLookAt ( // положение камеры O.Of,0.0 f ,8.Of , // центр сцены O.Of ,0.0f ,0.0f , // положительное направление, оси у O.Of ,1.0f ,0.0f); } // Вызывается при нажатии клавиши на клавиатуре. void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: /* escape */ exit(0); break; } } // Главный цикл приложения // Создается окно, устанавливается режим // экрана с буфером глубины int main (int argc , |