quads (p, 4, 0, 0, s, t, 0) ;

}

// вывод четырехугольников

void quads(float*v,int nv, float s0=0,float t0=0, float sl=l,float tl=l,float*texc=0, float*norm=0,float*c=0);

// вывод куба

void cube(float 1=1,float s0=0,float t0=0, float sl=l,float t1=1);

// вывод тестовой сцены void scenel(uint list=0)

{

glNewList(list,GL_COMPILE);

glPushAttrib(GL_CURRENT_BIT|GL_POLYGON_BIT);

glMatrixMode(GL_MODELVIEW);

glPolygonMode(GL_FRONT,GL_FILL) ;

glColor3f(0.4,0.4,1);

planeXZ (-100,-300, 100,-1,-5);

glEnable(GL_CULL_FACE);

glCullFace(GL_BACK) ;

glColor3f(1,0.5,0.5);

cube(35);

glPushMatrix();

glTranslatef(0,0,-290);

glColor3f(1,0.5,0.5);

glusphere(30);

glPopMatrix();

glPolygonMode(GL_FRONT, GL_LINE) ;

glColor3f(1,0.8,0.8);

cube(35);

glPushMatrix();

glTranslatef(0,0,-290);

glColor3f(1,0.8,0.8);

glusphere(30);

glPopMatrix();

glPopAttrib();

glEndList();

}

};// Models

// is - с какой вершины начинать

// n - число выводимых вершин

// nv - общее число вершин в массиве

// v - массив вершин (по 3 коордм^чты)

// texc - массив текстурных координат (по 2)

// norm - массив нормалей //с - массив цветов (RGB значения) void Models::array(GLenum m,int is,int n,float*v, int nv,float*texc,float*norm,float*c)

{

// сохранение клиентских атрибутов glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS) ; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3,GL_FLOAT,sizeof(float)*3, v);

// есть ли массив текстурных координат s и t if(texc)

{

glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2,GL_FLOAT,sizeof(float)*2, texc) ; }

else

glDisableClientState(GL_TEXTURE_COORD_ARRAY);

// есть ли массив нормалей if(norm)

{

glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT,sizeof(float)*3, norm);

}

else

glDisableClientState(GL_NORMAL_ARRAY);

// есть ли массив цветов if (с)

{

glEnableClientState(GL_COLOR_ARRAY); glColorPointer(3,GL_FLOAT,sizeof(float)*3,c);

}

else

glDisableClientState(GL_COLOR_ARRAY); glDrawArrays(m,is,n); // вывод

glPopClientAttrib(); // восстановление атрибутов }// array(GLenum m…

// вывод четырехугольников

void Models::quads(float*v,int nv,float sO,float tO,

float si,float tl,float*texc, float*norm,float*c)

{

float* tex=texc; if(tex==0)

{

tex=new float[nv*2];

tex[0]=s0; tex[l]=tO; tex[2]=sl; tex[3]=t0; tex[4]=sl; tex[5]=tl; tex[6]=s0; tex[7]=tl; copy(tex,tex+nv*2-8, tex+8) ;

}

array(GL_QUADS,0,nv,v,nv,tex,norm, c); if(texc==0) delete[]tex;

}

void Models::cube(float 1,float sO,

float tO,float si,float tl)

{

1 /=2;

// массив вершин граней float v[24*3]=

{

-1,-1,1,1,-1,1,1,1,1,-1,1,1,

1,-1,-1,-1,-1,-1,-1,1,-1,1, 1,-1,

1, 1,1,1,1,-1,-1,1,-1,-1,1,1,

1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,

1,-1,1,1,-1,-1,1,1,-1,1,1,1,

-1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1 };

quads(v,24,s0,t0,si,tl,0,0,0);

}

void Models::glupartdisk(GLdouble ro,GLdouble sa, GLdouble swa,GLdouble ri,int sl,int st)

{

// создаем квадратичный объект GLUquadricObj* obj =gluNewQuadric();

// разрешаем вычисление нормалей gluQuadricNormals(obj,GLU_SMOOTH);

// разрешаем текстурирование gluQuadricTexture(obj,1);

i f(ro<0)

{

// если надо меняем ориентацию объекта gluQuadricOrientation(obj,GLU_INSIDE); ro=-ro; ri=-ri;


⇐ вернуться назад | | далее ⇒