static GLfloat theta[] = {0.0,0.0,0.0};
int n; int mode;
/*...............................*/
void triangle( point3 a, point3 b, point3 c)

/* Отображение одного треугольника */ {

if (mode==0) glBegin(GL_LINE_LOOP); else glBegin(GL_POLYGON);
if(mode==l) glNormal3fv(a);
if(mode==2) glNormal3fv{a);
glVertex3fv(a);
if(mode==2) glNormal3fv(b);
glVertex3fv(b);
if(mode==2) glNormal3fv(c);
glVertex3fv(c); glEnd();
}
/*................---------------*/
void normal(point3 p)
{

/* Нормализация вектора */

double sqrt(); float d =0.0; int i;
for(i=0; i<3; d+=p[i]*p[i]; d=sqrt(d);
if(d>0.0) for(i=0; i<3; i++) p[i]/=d;
}
/*------------------------------- */
void divide_triangle(point3 a, point3 b, point3 c, int m) {

A. 12. Построение сферы

/* Разбиение треугольника */

point3 vl, v2, v3; int j; if(m>0) {
for(j=0; j<3; vl[j]=a[j]+b[j]; normal(vl);
for(j=0; j<3; j++) v2[j]=a[j]+c[j]; normal(v2);
for(j=0; j<3; j++) v3[j]=b[j]+c[j]; normal(v3);
divide_triangle(a, vl, v2, m-1); divide_triangle(c, v2, v3, m-1); divide_triangle(b, v3, vl, m-1); divide_triangle(vl, v3, v2, m-1);
}
else(triangle(a,b,c)); /* draw triangle at end of recursion */
)
/*........--------------.........*/
void tetrahedron( int m) {

/* Разбиение граней тетраэдра с помощью программы разбиения треугольников */

divide_triangle(v[0], v[l], v[2], m)
divide_triangle(v[3], v[2], v[l], m)
divide_triangle(v[0], v[3], v[l], m)
divide_triangle(v[0], v[2], v[3], m)
)
/*............................... */
void display()
{

/* Отображение объекта в трех видах */

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); mode=0;
tetrahedron(n); mode=l;
glTranslatef(-2.0, 0.0,0.0); tetrahedron(n);
mode=2;
glTranslatef( 4.0, 0.0,0.0); tetrahedron(n);

Приложение А. Демонстрационные программы

glFlush();
}
/*............................... */
void myReshape(int w, int h) {
glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(J; if (w <= h)
glOrtho(-4.0, 4.0, -4.0*(GLfloat)h/(GLfloat)w, 4.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0);

⇐ Предыдущая| |Следующая ⇒