nuclear@5: #include "opengl.h" nuclear@3: #include "teapot.h" nuclear@3: #include "teapot_data.h" nuclear@3: nuclear@3: static void draw_patch(struct vec3 *bez_cp, int *index, int flip, int useg, int vseg, float scale); nuclear@3: nuclear@3: int patch_subdivision = 6; nuclear@3: nuclear@5: static int dlist_sub[32]; nuclear@5: nuclear@3: void bezier_teapot(float scale) nuclear@3: { nuclear@3: int i; nuclear@3: nuclear@5: glMatrixMode(GL_MODELVIEW); nuclear@5: nuclear@5: if(!dlist_sub[patch_subdivision]) { nuclear@5: dlist_sub[patch_subdivision] = glGenLists(1); nuclear@5: glNewList(dlist_sub[patch_subdivision], GL_COMPILE); nuclear@5: nuclear@5: for(i=0; i 3.14) { nuclear@3: n.x = n.y = 0.0f; nuclear@3: n.z = 1.0f; nuclear@3: } else if(pt.z < 0.00001) { nuclear@3: n.x = n.y = 0.0f; nuclear@3: n.z = -1.0f; nuclear@3: } else { nuclear@3: n = bezier_patch_norm(cp, u + uoffs[flip][k] * du, v + voffs[k] * dv); nuclear@3: } nuclear@3: nuclear@3: glTexCoord2f(u, v); nuclear@3: glNormal3f(n.x, n.y, n.z); nuclear@3: glVertex3f(pt.x * scale, pt.y * scale, pt.z * scale); nuclear@3: } nuclear@3: nuclear@3: v += dv; nuclear@3: } nuclear@3: u += du; nuclear@3: } nuclear@3: nuclear@3: glEnd(); nuclear@3: }