static void draw_texture_tri(Real v1[3], Real v2[3], Real v3[3], int textureNum){ glBindTexture(GL_TEXTURE_2D, textureNum); if(!draw_top){ glBegin(GL_TRIANGLES); geom_calc_normal(v1, v2, v3, norm); glNormal3rv(norm); glTexCoord2f(0,0); glVertex3rv(v1); glTexCoord2f(1, 0); glVertex3rv(v2); glTexCoord2f(0, 1); glVertex3rv(v3); glEnd(); draw_top = true; }else{ glBegin(GL_TRIANGLES); geom_calc_normal(v1, v2, v3, norm); glNormal3rv(norm); glTexCoord2f(1,0); glVertex3rv(v1); glTexCoord2f(1, 1); glVertex3rv(v2); glTexCoord2f(0, 1); glVertex3rv(v3); glEnd(); draw_top = false; } glBindTexture(GL_TEXTURE_2D, 0); totalVerts += 6; }
/* Returns [a, b, c, d] where: ax + by + cz + d = 0 plane normal = [a, b, c] d = -n dot P, where P is a point in the plane */ int geom_get_tri_plane(const Real* tri, Real* plane_ret) { // calc normal Real vn[3]; geom_calc_normal(tri+0*3, tri+1*3, tri+2*3, vn); Real d = -geom_vector3_dot(vn, tri+0*3); geom_vector3_copy(vn, plane_ret); plane_ret[3] = d; return GEOM_NO_ERROR; }
static void draw_new_tri(Real v1[3], Real v2[3], Real v3[3]){ glBegin(GL_TRIANGLES); geom_calc_normal(v1, v2, v3, norm); glNormal3rv(norm); glVertex3rv(v1); glVertex3rv(v2); glVertex3rv(v3); glEnd(); }