/* This program displays a funky curve through the unit cube. This program aims to be as simple as possible. Scott D. Anderson Fall 2003 */ #include void draw_bezier_curve(GLfloat* cp) { int steps = 16; // glMap1f(target, u_min, u_max, stride, order, point_array); glMap1f(GL_MAP1_VERTEX_3, 0, 1, 3, 4, cp); glEnable(GL_MAP1_VERTEX_3); glMapGrid1f(steps,0.0,1.0); glEvalMesh1(GL_LINE,0,steps); } void draw_funky_curve() { GLfloat curveCP[] = {-1,-1,-1, +0.7,-1,-1, 1,-0.7,1, 1,1,1}; const int stride=3; glPushAttrib(GL_ALL_ATTRIB_BITS); glPointSize(5); twColorName(TW_CYAN); glBegin(GL_POINTS); for(int i=0; i<4*stride; i+=stride) glVertex3f(curveCP[i],curveCP[i+1],curveCP[i+2]); glEnd(); glLineWidth(3); twColorName(TW_YELLOW); draw_bezier_curve(curveCP); glPopAttrib(); } void display(void) { twDisplayInit(); twCamera(); draw_funky_curve(); glFlush(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500,500); glutCreateWindow(argv[0]); glutDisplayFunc(display); twBoundingBox(-1,1,-1,1,-1,1); twMainInit(); glutMainLoop(); }