Введение в OpenGL | страница 25
> glEnable(GL_NORMALIZE);
> //--Материалы объектов отличаются только цветом диффузного отражения--//
> glEnable(GL_COLOR_MATERIAL);
> glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);
> //--Создания указателя на quadric-объект для построения колец---------//
> QuadrObj=gluNewQuadric();
> //--Определение свойств текстуры--------------------------------------//
> TextureInit();
> //--Задание перспективной проекции------------------------------------//
> glMatrixMode(GL_PROJECTION);
> gluPerspective(89.0,1.0,0.5,100.0);
> //--Далее будет проводиться только преобразование объектов сцены------//
> glMatrixMode(GL_MODELVIEW);
>}
>void DrawFigures(void) {
> //--Включение режима нанесения текстуры-------------------------------//
> glEnable(GL_TEXTURE_2D);
> //--Задаем цвет диффузного отражения для колец------------------------//
> glColor3fv(mat_diff1);
> //--Чтобы не проводить перемножение с предыдущей матрицей загружаем единичную матрицу//
> glLoadIdentity();
> //--Определяем точку наблюдения---------------------------------------//
> gluLookAt(0.0, 0.0, 2.5,0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
> //--Сохраняем видовую матрицу, так как дальше будет проводиться поворот колец//
> glPushMatrix();
> //--Производим несколько поворотов на новый угол (это быстрее,--------//
> //--чем умножать предыдущую видовую матрицу на матрицу поворота с-----//
> //--фиксированным углом поворота)-------------------------------------//
> glRotatef (-CurAng,1,1,0);
> glRotatef (CurAng,1,0,0);
> //--Для рисования колец каждое из них надо преобразовать отдельно,----//
> //--поэтому сначала сохраняем видовую матрицу, затем восстанавливаем--//
> glPushMatrix();
> glTranslatef (0,0,-RingHeight/2);
> DrawRing();
> glPopMatrix();
> glPushMatrix();
> glTranslatef (0,RingHeight/2,0);
> glRotatef (90,1,0,0);
> DrawRing();
> glPopMatrix();
> glPushMatrix();
> glTranslatef (-RingHeight/2,0,0);
> glRotatef (90,0,1,0);
> DrawRing();
> glPopMatrix();
> //--Восстанавливаем матрицу для поворотов тетраэдра--------------------//
> glPopMatrix();
> //--Выключаем режим наложения текстуры--------------------------------//
> glDisable(GL_TEXTURE_2D);
> //--Проводим повороты-------------------------------------------------//
> glRotatef(CurAng,1,0,0);
> glRotatef(CurAng/2,1,0,1);
> //--Чтобы тетраэдр вращался вокруг центра, его надо сдвинуть вниз по оси oz//
> glTranslatef(0,-0.33,0);
> //--Задаем цвет диффузного отражения для тетраэдра--------------------//
> glColor3fv(mat_diff2);
> //--Проводим построение тетраэдра-------------------------------------//