使用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