Введение в OpenGL | страница 23
При компиляции программы в MS Visual C++ файл ‘texture.bmp’ надо поместить в каталог проекта или указать полный путь к нему, используя символ ‘/’. Если путь не указан, то при запуске исполняемого файла из операционной системы, файл с текстурой должен находиться в том же каталоге.
>#include
>#include
>#include
>#define TETR_LIST 1
>GLfloat light_col[] = {1,1,1};
>float mat_diff1[]={0.8,0.8,0.8};
>float mat_diff2[]={0.0,0.0,0.9};
>float mat_amb[]= {0.2,0.2,0.2};
>float mat_spec[]={0.6,0.6,0.6};
>float shininess=0.7*128, CurAng=0, RingRad=1, RingHeight=0.1;
>GLUquadricObj* QuadrObj;
>GLuint TexId;
>GLfloat TetrVertex[4][3], TetrNormal[4][3];
>//--Вычисление нормали к плоскости, задаваемой точками a,b,c----------//
>void getnorm (float a[3],float b[3],float c[3],float *n) {
> float mult=0;
> n[0]=(b[1]-a[1])*(c[2]-a[2])-(b[2]-a[2])*(c[1]-a[1]);
> n[1]=(c[0]-a[0])*(b[2]-a[2])-(b[0]-a[0])*(c[2]-a[2]);
> n[2]=(b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]);
> //--Определение нужного направления нормали: от точки (0,0,0)---------//
> for (int i=0;i<3;i++) mult+=a[i]*n[i];
> 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();