CS216
Chris Pollett
Feb 9, 2010
Which of the following statements is true?
/******************************************************
* Project: CS216 Bezier Test
* File: main.cpp
* Purpose: Code to point plot a simple Bezier Curve
* Start date: Feb. 9, 2010
* Programmer: Chris Pollett
*
* Remarks: Adapted from Hearn and Baker (3rd edition)
*
*******************************************************/
#ifdef WIN32
#include<windows.h> //for windows
#include <GL/glut.h>
#include <GL/glu.h>
#endif
#ifdef __APPLE__ //for MAC
/*
I created my project under xcode. I chose new C++ tool as the kind of project.
Then under External frameworks and libraries I added the two frameworks:
OpenGL.framework and GLUT.framework. (Frameworks are in /Library/Frameworks)
*/
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#endif
#ifdef linux // for linux
/*My compile line was:
g++ -I /usr/X11R6/include -L /usr/X11R6/lib -lglut -lGL \
-lGLU -lX11 -lXmu -lXi -lm name.cpp -o name
*/
#include <GL/glut.h>
#include <GL/glu.h>
#endif
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
/*-----------------------------------------------*/
void init(void)
/*
PURPOSE: Used to initializes our OpenGL window
RECEIVES: Nothing
RETURNS: Nothing
REMARKS: Nothing
*/
{
glClearColor(1.0, 1.0, 1.0, 0.0);
}
/*-----------------------------------------------*/
void drawBezier(void)
/*
PURPOSE: GLUT display callback function for this program.
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();
}
/*-----------------------------------------------*/
void winReshapeFn(int newWidth, int newHeight)
/*
PURPOSE: Resizes/redisplays the contents of the current window
RECEIVES: newWidth, newHeight -- the new dimensions (ignored)
RETURNS: nothing
REMARKS:
*/
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-300, 300, -300, 300);
glClear(GL_COLOR_BUFFER_BIT);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 50);
glutInitWindowSize(600, 600);
glutCreateWindow("An Example OpenGL Program");
init();
glutDisplayFunc(drawBezier);
glutReshapeFunc(winReshapeFn);
glutMainLoop();
return 0;
}
glMapGrid1f(50, 0.0, 1.0); glEvalMesh1(GL_LINE, 0, 50);
/******************************************************
* Project: CS216 Bezier Patch Test
* File: main.cpp
* Purpose: Code to point plot a simple Bezier Curve
* Start date: Feb. 1, 2010
* Programmer: Chris Pollett
*
* Remarks: Adapted from Hearn and Baker (3rd edition)
*
*******************************************************/
#ifdef WIN32
#include<windows.h> //for windows
#include <GL/glut.h>
#include <GL/glu.h>
#endif
#ifdef __APPLE__ //for MAC
/*
I created my project under xcode. I chose new C++ tool as the kind of project.
Then under External frameworks and libraries I added the two frameworks:
OpenGL.framework and GLUT.framework. (Frameworks are in /Library/Frameworks)
*/
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#endif
#ifdef linux // for linux
/*My compile line was:
g++ -I /usr/X11R6/include -L /usr/X11R6/lib -lglut -lGL \
-lGLU -lX11 -lXmu -lXi -lm name.cpp -o name
*/
#include <GL/glut.h>
#include <GL/glu.h>
#endif
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
/*
CONSTANTS
*/
//Camera constants
const GLfloat CAMERA_X = -5.0; //camera's position (looks at origin)
const GLfloat CAMERA_Y = -3.0;
const GLfloat CAMERA_Z = 10.0;
const GLfloat UP_X = 0.0; //camera's up vector
const GLfloat UP_Y = 1.0;
const GLfloat UP_Z = 0.0;
//View Volume
const GLfloat NEAR_CLIP = 2.0;
const GLfloat FAR_CLIP = 100;
/*
GLOBALS
*/
GLsizei winWidth = 500, winHeight = 500; // used for size of window
GLsizei initX = 50, initY = 50; // used for initial position of window
/*-----------------------------------------------*/
void init(void)
/*
PURPOSE: Used to initializes our OpenGL window
RECEIVES: Nothing
RETURNS: Nothing
REMARKS: Nothing
*/
{
glClearColor(1.0, 1.0, 1.0, 0.0);
}
/*-----------------------------------------------*/
void drawBezier(void)
/*
PURPOSE: GLUT display callback function for this program.
Drawing a Bezier curve with glMap1* 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 read
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();
}
/*-----------------------------------------------*/
void winReshapeFn(int newWidth, int newHeight)
/*
PURPOSE: Resizes/redisplays the contents of the current window
RECEIVES: newWidth, newHeight -- the new dimensions (ignored)
RETURNS: nothing
REMARKS:
*/
{
glViewport(0, 0, newWidth, newHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, NEAR_CLIP, FAR_CLIP);
gluLookAt(CAMERA_X, CAMERA_Y, CAMERA_Z, 0.0, 0.0, 0.0, UP_X, UP_Y, UP_Z);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(initX, initY);
glutInitWindowSize(winWidth, winHeight);
glutCreateWindow("An Example Bezier Patch");
init();
glutDisplayFunc(drawBezier);
glutReshapeFunc(winReshapeFn);
glutMainLoop();
return 0;
}
Let's look at (a) of the last slide in more detail...
Let's look at (d) of a couple slides back in more detail...