BEZCURVE.C
上传用户:tengyuc
上传日期:2007-08-14
资源大小:722k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. //  本程序使用求值器来绘制Bezier曲线 #include <GL/glut.h> #include <stdlib.h> //  定义控制点 GLfloat ctrlpoints[4][3] = { { -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0},  {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}}; void init(void) {    glClearColor(0.0, 0.0, 0.0, 0.0);    glShadeModel(GL_FLAT);
  2.    //  定义一个一维求值器    glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
  3.    //  启动映射    glEnable(GL_MAP1_VERTEX_3); } void display(void) {    int i;    glClear(GL_COLOR_BUFFER_BIT);    glColor3f(1.0, 1.0, 1.0);    glBegin(GL_LINE_STRIP);       for (i = 0; i <= 30; i++) 
  4.   //计算曲线坐标          glEvalCoord1f((GLfloat) i/30.0);    glEnd();    //  以点的模式绘制控制点    glPointSize(5.0);    glColor3f(1.0, 1.0, 0.0);    glBegin(GL_POINTS);       for (i = 0; i < 4; i++)           glVertex3fv(&ctrlpoints[i][0]);    glEnd();    glFlush(); } void reshape(int w, int h) {    glViewport(0, 0, (GLsizei) w, (GLsizei) h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    if (w <= h)       glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w,                 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0);    else       glOrtho(-5.0*(GLfloat)w/(GLfloat)h,                 5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) {    switch (key) {       case 27:          exit(0);          break;    } } int main(int argc, char** argv) {    glutInit(&argc, argv);    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);    glutInitWindowSize (500, 500);    glutInitWindowPosition (100, 100);    glutCreateWindow (argv[0]);    init ();    glutDisplayFunc(display);    glutReshapeFunc(reshape);    glutKeyboardFunc (keyboard);    glutMainLoop();    return 0; }