CS116b/CS216
Chris Pollett
Feb 26, 2014
/*-----------------------------------------------*/
void drawBezier()
/*
PURPOSE: Drawing a Bezier curve with glMap1* functions
RECEIVES: nothing
RETURNS: nothing
REMARKS:
*/
{
GLfloat ctrlPts[4][3] = {{-40.0, -40.0, 0.0},
{-10.0, 200.0, 0.0}, {10.0, -200.0, 0.0}, {40.0, 40.0, 0.0}};
glMap1f (GL_MAP1_VERTEX_3, 0.0 /* uMin*/, 1.0 /* uMax*/,
3 /* stride*/, 4 /*num points */,
*ctrlPts);
glEnable(GL_MAP1_VERTEX_3);
GLint k;
// draw curve in blue
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_LINE_STRIP);
for (k = 0; k <= 50; k++) {
glEvalCoord1f(GLfloat(k)/50.0);
}
glEnd();
// draw control points in red
glColor3f(1.0, 0.0, 0.0);
glPointSize(5.0);
glBegin(GL_POINTS);
for (k = 0; k < 4; k++) {
glVertex3fv(&ctrlPts[k][0]);
}
glEnd();
glFlush();
}
glMapGrid1f(50, 0.0, 1.0); glEvalMesh1(GL_LINE, 0, 50);
/*-----------------------------------------------*/
void drawBezierPatch()
/*
PURPOSE: Drawing a Bezier Patch with glMap2* functions
RECEIVES: nothing
RETURNS: nothing
REMARKS:
*/
{
GLfloat ctrlPts[4][4][3] = {
{{-1.5, -1.5, 4.0}, {-.5, -1.5, 2.0},
{-.5, -1.5, -1.0}, {1.5, -1.5, 2.0} },
{{-1.5, -.5, 1.0}, {-.5, -.5, 3.0},
{.5, -.5, 0.0}, {1.5, -.5, 1.0} },
{{-1.5, .5, 4.0}, {-.5, .5, 0.0},
{.5, .5, 3.0}, {1.5, .5, 4.0} },
{{-1.5, 1.5, -2.0}, {-.5, 1.5, -2.0},
{.5, 1.5, 0.0}, {1.5, 1.5, -1.0} }
};
glMap2f (GL_MAP2_VERTEX_3, 0.0 /* uMin*/, 1.0 /* uMax*/,
3 /* u stride*/, 4 /*num points u*/,
0.0 /* vMin*/, 1.0 /* vMax*/, 12 /*v stride*/,
4, &ctrlPts[0][0][0]);
glEnable(GL_MAP2_VERTEX_3);
GLint k, j;
//draw patch in red
glColor3f(1.0, 0.0, 0.0);
glMapGrid2f(50, 0.0, 1.0, 50, 0.0, 1.0);
glEvalMesh2(GL_FILL, 0, 50, 0, 50);
// draw curves on patch in blue
glColor3f(0.0, 0.0, 1.0);
for (k = 0 ; k <= 8; k++) {
glBegin(GL_LINE_STRIP);
for(j = 0; j <= 40; j++) {
glEvalCoord2f(GLfloat(j)/40.0, GLfloat(k)/8.0);
}
glEnd();
glBegin(GL_LINE_STRIP);
for (j = 0; j <= 40; j++) {
glEvalCoord2f(GLfloat(k)/8.0, GLfloat(j)/40.0);
}
glEnd();
}
glFlush();
}