189 8069 5689

使用OpenGL怎么实现一个Bezier曲线

今天就跟大家聊聊有关使用OpenGL怎么实现一个Bezier曲线,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

为涿州等地区用户提供了全套网页设计制作服务,及涿州网站建设行业解决方案。主营业务为网站设计制作、做网站、涿州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

Bezier曲线的形状是通过一组多边折线(特征多边形)的各顶点唯一地定义出来的。在这组顶点中:

(1)只有第一个顶点和最后一个顶点在曲线上;

(2)其余的顶点则用于定义曲线的导数、阶次和形状;

(3)第一条边和最后一条边则表示了曲线在两端点处的切线方向。

// BezierCurve.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
  • #include <gl/glut.h>
  • #include <gl/GL.h>
  • #define DIMENSION 2//定义维度为2维
  • typedef GLfloat VECTOR [DIMENSION];
  • VECTOR points[4]= {{-1.0,-1.0},{0.0,2.0},{1.0,2.0},{2.0,1.0}};//四个控制点
  • GLint count =10000;//绘制10000个点
  • int ww,hh;
  • void display()
  • {
  •  VECTOR c[4];//此矩阵是P和M的积,就是控制点阵和Bezier基矩阵的乘积
  •  for (int i =0;i<DIMENSION;i++)
  •  {
  •  
  •  c[3][i] = (0-points[0][i])+3*points[1][i]-3*points[2][i]+points[3][i];
  •  c[2][i] =       3*points[0][i]-6*points[1][i]+3*points[2][i];
  •  c[1][i] =               (0-3*points[0][i])+3*points[1][i];
  •  c[0][i] =                       points[0][i];
  •  
  •  
  •  
  •  }
  •  GLfloat v[DIMENSION];
  •  GLfloat newV[DIMENSION];
  •  GLfloat deltat = 1.0/count;
  •  GLfloat t = 0.0;
  •  
  •  
  •  glBegin(GL_LINE_STRIP);//绘制控制曲线
  •   glVertex2fv(points[0]);
  •   glVertex2fv(points[1]);
  •   glVertex2fv(points[2]);
  •   glVertex2fv(points[3]);
  •  glEnd();
  •  glFlush();
  •   
  •  v[0] = points[0][0];v[1] = points[0][1];
  •  for (int i = 0;i<count;i++)//绘制最终结果
  •  {
  •  t += deltat;
  •  newV[0] = c[0][0] + t*(c[1][0] + t*(c[2][0] + t*c[3][0]));
  •  newV[1] = c[0][1] + t*(c[1][1] + t*(c[2][1] + t*c[3][1]));
  •  glColor3f(0.0,0.0,1.0);
  •  glBegin(GL_LINES);
  •  glVertex2fv(v);
  •  glVertex2fv(newV);
  •  glEnd();
  •  glFlush();
  •  v[0] = newV[0];v[1] = newV[1];
  •  
  •  
  •  }
  •  
  • }
  • void init()
  • {
  •  
  •  glClearColor(0.0 , 0.0 ,0.0 , 0.0);
  •  glColor3f(1.0 ,1.0 ,1.0);
  •  
  •  glMatrixMode(GL_PROJECTION);
  •  glLoadIdentity();
  •  gluOrtho2D(-4.0 ,4.0 ,-4.0 ,4.0);
  •  
  • }
  •  
  • void main(int argc,char **argv)
  • {
  •  glutInit(&argc,argv);
  •  glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
  •  glutInitWindowSize(500,500);
  •  glutInitWindowPosition(500,200);
  •  glutCreateWindow("reshape");
  •  //glutReshapeFunc(myreshape);
  •  glutDisplayFunc(display);
  •  init();
  •  //glutIdleFunc(myidle);
  •  //glutKeyboardFunc(mykeyboard);
  •  //glutSpecialFunc(myspecialkey);
  •  
  •  glutMainLoop();
  • }
  • 使用OpenGL怎么实现一个Bezier曲线

    看完上述内容,你们对使用OpenGL怎么实现一个Bezier曲线有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


    分享文章:使用OpenGL怎么实现一个Bezier曲线
    文章源于:http://cdxtjz.cn/article/jieccd.html

    联系我们

    您好HELLO!
    感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
    • 电话:028- 86922220 18980695689
    • 商务合作邮箱:631063699@qq.com
    • 合作QQ: 532337155
    • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

    小谭建站工作室

    成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

    小谭观点

    相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
    我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。