Jump to content

Catmull–Clark subdivision surface/C: Difference between revisions

performance fix
m (keys)
(performance fix)
Line 27:
GLfloat zpos = -6;
 
int max_depth = 47;
int flat_shade = 0;
int show_parent = 1;
Line 249:
int i;
edge e;
foreach(i, e, mv1->e) {
if ((e->v[0] == v1v2 &&|| e->v[1] == v2) ||)
(e->v[0] == v2 && e->v[1] == v1) )
return e;
}
Line 423 ⟶ 422:
ang = i * 72;
rad = ang * 3.1415926 / 180;
v[i].x = 2.2 * cos(rad); v[i].zy = 2.2 * sin(rad); v[i].yz = 0;
 
rad = (ang + 36) * 3.1415926 / 180;
v[i + 5].x = v[i + 10].x = cos(rad);
v[i + 5].zy = v[i + 10].zy = sin(rad);
v[i + 5].yz = .5;
v[i + 10].yz = -.5;
}
 
for (i = 0; i < 15; i++) model_add_vertex(m, v[i].x, v[i].y, v[i].z);
tri_face(m, 0, 95, 59);
tri_face(m, 1, 56, 65);
tri_face(m, 2, 67, 76);
tri_face(m, 3, 78, 87);
tri_face(m, 4, 89, 98);
 
tri_face(m, 0, 1014, 1410);
tri_face(m, 1, 1110, 1011);
tri_face(m, 2, 1211, 1112);
tri_face(m, 3, 1312, 1213);
//tri_face(m, 4, 1413, 1314);
 
tri_face(m, 0, 510, 10 5);
tri_face(m, 1, 10, 5, 10);
tri_face(m, 1, 611, 11 6);
tri_face(m, 2, 11, 6, 11);
tri_face(m, 2, 712, 12 7);
tri_face(m, 3, 12, 7, 12);
tri_face(m, 3, 813, 13 8);
tri_face(m, 4, 13, 8, 13);
tri_face(m, 4, 914, 14 9);
tri_face(m, 0, 14, 9, 14);
 
model_add_face(m, 5, 1014, 1113, 12, 1311, 1410);
//model_add_face(m, 5, 95, 86, 7, 68, 59);
 
return m;
Line 514 ⟶ 513:
quad_face(m, 5, 7, 3, 1);
return m;
}
 
void model_print(model m)
{
int i, j;
face f;
vertex v;
edge e;
 
printf("faces:\n");
foreach(i, f, m->f) {
printf("%d: %g %g %g\n", len(f->e), f->norm.x, f->norm.y, f->norm.z);
 
foreach(j, v, f->v)
printf("\t(%3g, %3g, %3g)\n", v->pos.x, v->pos.y, v->pos.z);
printf("\n");
}
printf("edges:\n");
foreach(i, e, m->e) {
v = e->v[0];
printf("%d \t(%3g, %3g, %3g)", i, v->pos.x, v->pos.y, v->pos.z);
v = e->v[1];
printf("\t(%3g, %3g, %3g)\n", v->pos.x, v->pos.y, v->pos.z);
}
 
printf("\n%d vertices:", len(m->v));
foreach(i, v, m->v)
printf(" (%g, %g, %g)", v->pos.x, v->pos.y, v->pos.z);
printf("\n");
}
 
Line 571 ⟶ 541:
glPushMatrix();
glLoadIdentity();
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, litepos);
glEnable(GL_LIGHT0);
 
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT1, GL_POSITION, litepos2);
glEnable(GL_LIGHT1);
glPopMatrix();
 
Line 590 ⟶ 560:
glEnd();
}
glPopAttrib();
}
 
Line 718 ⟶ 687:
glFlush();
glFinish();
glutSwapBuffers();
usleep(10000);
}
 
Line 733 ⟶ 702:
void init_gfx(int *c, char **v) {
glutInit(c, v);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(640, 480);
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.