Введение в 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);

> //--Проводим построение тетраэдра-------------------------------------//