> if (mult<0) for (int j=0;j<3;j++) n[j]=-n[j];
>}
>//--Вычисление координат вершин тетраэдра-----------------------------//
>void InitVertexTetr() {
> float alpha=0;
> TetrVertex[0][0]=0;TetrVertex[0][1]=1.3;TetrVertex[0][2]=0;
> //--Вычисление координат основания тетраэдра--------------------------//
> for (int i=1;i<4;i++) {
> TetrVertex[i][0]=0.94*cos(alpha);
> TetrVertex[i][1]=0;
> TetrVertex[i][2]=0.94*sin(alpha);
> alpha+=120.0*3.14/180.0;
> }
>}
>//--Вычисление нормалей сторон тетраэдра------------------------------//
>void InitNormsTetr() {
> getnorm(TetrVertex[0],TetrVertex[1],TetrVertex[2],TetrNormal[0]);
> getnorm(TetrVertex[0],TetrVertex[2],TetrVertex[3],TetrNormal[1]);
> getnorm(TetrVertex[0],TetrVertex[3],TetrVertex[1],TetrNormal[2]);
> getnorm(TetrVertex[1],TetrVertex[2],TetrVertex[3],TetrNormal[3]);
>}
>//--Создание списка построения тетраэдра------------------------------//
>void MakeTetrList() {
> glNewList (TETR_LIST,GL_COMPILE);
> //--Задание сторон тетраэдра------------------------------------------//
> glBegin(GL_TRIANGLES);
> for (int i=1;i<4;i++) {
> glNormal3fv(TetrNormal[i-1]);
> glVertex3fv(TetrVertex[0]);
> glVertex3fv(TetrVertex[i]);
> if (i!=3) glVertex3fv(TetrVertex[i+1]);
> else glVertex3fv(TetrVertex[1]);
> }
> glNormal3fv(TetrNormal[3]);
> glVertex3fv(TetrVertex[1]);
> glVertex3fv(TetrVertex[2]);
> glVertex3fv(TetrVertex[3]);
> glEnd();
> glEndList();
>}
>void DrawRing() {
> //--Построение цилиндра (кольца), расположенного параллельно оси z----//
> //--Второй и третий параметры задают радиусы оснований, четвертый-----//
> //--высоту,последние два-число разбиений вокруг и вдоль оси z---------//
> //--При этом дальнее основание цилиндра находится в плоскости z=0-----//
> gluCylinder(QuadrObj,RingRad,RingRad,RingHeight,30,2);
>}
>void TextureInit() {
> char strFile[]="texture.bmp";
> //--Выравнивание в *.bmp по байту-------------------------------------//
> glPixelStorei(GL_UNPACK_ALIGNMENT,1);
> //--Создание идентификатора для текстуры- ----------------------------//
> glGenTextures(1,&TexId);
> //--Загрузка изображения в память-------------------------------------//
> AUX_RGBImageRec *pImage = auxDIBImageLoad(strFile);
> int BmpWidth= pImage->sizeX;
> int BmpHeight = pImage->sizeY;
> void* BmpBits = pImage->data;
> //--Начало описания свойств текстуры----------------------------------//
> glBindTexture (GL_TEXTURE_2D,TexId);
> //--Создание уровней детализации и инициализация текстуры ------------//
> 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-объект для построения колец---------//