读书人

关于openGL中画Bezier曲线的有关问题~

发布时间: 2012-02-22 19:36:55 作者: rapoo

关于openGL中画Bezier曲线的问题~~急!!!
用4个控制点画出三阶Bezier曲线。。。
现在已知4个控制点,通过这4个控制点可以求出3个在Bezier曲线上的点。但是如何利用OpenGL画出这个三阶的Bezier曲线·?

[解决办法]
楼主参考这里

http://blog.csdn.net/zhangci226/archive/2009/03/23/4018449.aspx
[解决办法]
引自红宝书,希望对楼主有所帮助。

C/C++ code
#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 <= 30; i++)          glEvalCoord1f((GLfloat) i/30.0);   glEnd();   /* The following code displays the control points as dots. */   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;}
[解决办法]
glut 是一个 库 你可以下一个, 或者下一个 free_glut库, 上 glut 的替代品,

读书人网 >图形图像

热点推荐