您的位置:首页 > 运维架构

opengl入门系列-Bezier曲线

2014-09-23 09:33 441 查看
#include <stdio.h>

#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);

    glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);

    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 <= 100; i++)

        glEvalCoord1f((GLfloat)i/100.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;

}

---

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: