Читать «Введение в OpenGL» онлайн - страница 21

Автор неизвестен

 gluBuild2DMipmaps(GL_TEXTURE_2D,3,BmpWidth, BmpHeight,GL_RGB,GL_UNSIGNED_BYTE,BmpBits);

 //--Разрешение наложения этой текстуры на quadric-объекты-------------//

 gluQuadricTexture(QuadrObj, GL_TRUE);

 //--Задание параметров текстуры---------------------------------------//

 //--Повтор изображения по параметрическим осям s и t------------------//

 glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);

 glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

 //--Не использовать интерполяцию при выборе точки на текстуре---------//

 glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

 glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

 //--Совмещать текстуру и материал объекта-----------------------------//

 glTexEnvi (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);

}

void Init(void) {

 InitVertexTetr();

 InitNormsTetr();

 MakeTetrList();

 //--Определение свойств материала-------------------------------------//

 glMaterialfv (GL_FRONT_AND_BACK,GL_AMBIENT,mat_amb);

 glMaterialfv (GL_FRONT_AND_BACK,GL_SPECULAR,mat_spec);

 glMaterialf(GL_FRONT,GL_SHININESS,shininess);

 //--Определение свойств освещения-------------------------------------//

 glLightfv(GL_LIGHT0, GL_DIFFUSE, light_col);

 glEnable(GL_LIGHTING);

 glEnable(GL_LIGHT0);

 //--Проводить удаление невидимых линий и поверхностей-----------------//

 glEnable(GL_DEPTH_TEST);

 //--Проводить нормирование нормалей-----------------------------------//

 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);

 //--Для рисования колец каждое из них надо преобразовать отдельно,----//