使用OpenGL绘制Bezier曲线的方法-创新互联

这篇文章主要讲解了使用OpenGL绘制Bezier曲线的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

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

源码见下

#include 
#include 
#include 
#include 
int SCREEN_HEIGHT = 480;
int NUMPOINTS = 0;
class Point
{
public:
 float x, y;
 void setxy(float x2, float y2)
 {
 x = x2;
 y = y2;
 }
 Point operator&(const Point & rPoint)
 {
 x = rPoint.x;
 y = rPoint.y;
 return * this;
 }
};
Point abc[3];
void myInit()
{
 glClearColor(0.0,0.0,0.0,0.0);
 glColor3f(1.0f, 0.0, 0.0);
 glPointSize(4.0);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluOrtho2D(0.0, 640, 0.0, 480.0);
}
void drawDot(Point pt) 
{
 glBegin(GL_POINTS);
 glVertex2f(pt.x, pt.y);
 glEnd();
 glFlush();
}
void drawLine(Point p1, Point p2)
{
 glBegin(GL_LINES);
 glVertex2f(p1.x, p1.y);
 glVertex2f(p2.x, p2.y);
 glEnd();
 glFlush();
}
//三个控制点的贝塞尔曲线
Point drawBezier(Point A, Point B, Point C, double t) 
{
 Point P;
 P.x = pow((1-t), 2) * A.x + 2*t*(1-t)*B.x + pow(t, 2)*C.x;
 P.y = pow((1-t), 2) * A.y + 2*t*(1-t)*B.y + pow(t, 2)*C.y;
 return P;
}
void myMouse(int button, int state, int x, int y)
{
 if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
 {
 abc[NUMPOINTS].setxy((float)x, (float)(SCREEN_HEIGHT - y));
 NUMPOINTS++;
 if (NUMPOINTS == 3)
 {
  glColor3f(1.0, 0.0, 1.0);
  
  drawDot(abc[0]);
  drawDot(abc[1]);
  drawDot(abc[2]);
  glColor3f(1.0, 1.0, 0.0);
  drawLine(abc[0], abc[1]);
  drawLine(abc[1], abc[2]);
  glColor3f(0.0, 1.0, 1.0);
  Point POld = abc[0];
  for (double t = 0.0; t<=1.0;t+=0.1)
  {
  Point P = drawBezier(abc[0], abc[1], abc[2], t);
  drawLine(POld, P);
  POld = P;
  }
  glColor3f(1.0, 0.0, 0.0);
  NUMPOINTS = 0;
 }
 }
}
void myDisplay()
{
 glClear(GL_COLOR_BUFFER_BIT);
 glFlush();
}
int main(int argc, char * agrv[])
{
 glutInit(&argc, agrv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
 glutInitWindowSize(640, 480);
 glutInitWindowPosition(100, 150);
 glutCreateWindow("Bezier Curve");
 glutMouseFunc(myMouse);
 glutDisplayFunc(myDisplay);
 myInit();
 glutMainLoop();
 return 0;
}

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:使用OpenGL绘制Bezier曲线的方法-创新互联
本文路径:http://pwwzsj.com/article/pggei.html