计算机图形学-基于OpenGL的绘制Bezier曲线
2017-05-28 11:49
615 查看
计算机图形学-基于OpenGL的绘制Bezier曲线
本实验集成开发环境为vs2013,基于OpenGL。实验内容
根据Bezier曲线的定义,绘制Bezier曲线段。自己编程实现Bernstain基函数,然后在曲线上采集200个点,连成拆线段绘制。预备知识
P(t)=∑i=0nPiBi,n(t),t∈[0,1]其中,Bi,n(t)=Ctn(1−t)n−i
实验代码
#include <GL/glut.h> #include <cstdio> #include <cmath> const GLfloat Pi = 3.1415926536f; //定义点集 struct data{ GLfloat x; GLfloat y; }Point[4]; void init() //初始化函数 { glClearColor(1.0, 1.0, 1.0, 0.0); //设置背景颜色 glMatrixMode(GL_PROJECTION); // 设置投影参数 gluOrtho2D(0.0, 100.0, 0.0, 100.0); // 设置场景的大小 } void Bernstain() //Bernstain基函数 { glClear(GL_COLOR_BUFFER_BIT); glTranslatef(10.0f, 10.0f, 0.0f); //平移图形 glScalef(0.1f, 0.1f, 0.1f); //缩小图像0.5倍 //glRotatef(60.0f, 1.0f, 0.0f, 0.0f); //沿x轴旋转60度 //四个点作为控制顶点 Point[0].x = 0.0; Point[0].y = 0.0; Point[1].x = 200.0; Point[1].y = 100.0; Point[2].x = 300.0; Point[2].y = 100.0; Point[3].x = 400.0; Point[3].y = 0.0; glColor3f(0.0, 0.0, 1.0); //设置线条颜色 glPointSize(2); //设置点的大小 glBegin(GL_LINES); glVertex2f(Point[0].x, Point[0].y); glVertex2f(Point[1].x, Point[1].y); glVertex2f(Point[1].x, Point[1].y); glVertex2f(Point[2].x, Point[2].y); glVertex2f(Point[2].x, Point[2].y); glVertex2f(Point[3].x, Point[3].y); glEnd(); glFlush(); glColor3f(1.0, 0.0, 0.0); //设置线条颜色 glPointSize(2); //设置点的大小 glBegin(GL_LINE_STRIP); for (int i = 1; i <= 200; i++) { GLfloat t = i / 200.0; GLfloat b0 = pow(1 - t, 3.0); GLfloat b1 = 3.0 * t*pow(1 - t, 2.0); GLfloat b2 = 3.0 * t*t*(1 - t); GLfloat b3 = t*t*t; //运用三次Bezier曲线 GLfloat x = Point[0].x*b0 + Point[1].x*b1 + Point[2].x*b2 + Point[3].x*b3; GLfloat y = Point[0].y*b0 + Point[1].y*b1 + Point[2].y*b2 + Point[3].y*b3; glVertex2f(x, y); } glEnd(); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400,400); glutCreateWindow("Bezier曲线"); init(); glutDisplayFunc(&Bernstain); glutMainLoop(); return 0; }
效果预览
相关文章推荐
- 计算机图形学-基于OpenGL的绘制直线及图形变换练习
- 计算机图形学-基于OpenGL的绘制空间曲线
- 计算机图形学和OpenGL(二)坐标系和绘制点线函数
- 计算机图形学-三次Bezier曲线的绘制
- 计算机图形学-OpenGL-绘制五角星
- 计算机图形学——OpenGL学习系列之绘制3D下的小桌子
- c&OpenGL实现计算机图形学:双步绘制直线法绘制菱形
- OpenGL&nbsp;绘制字母&nbsp;计算机图形学
- [Review]基于OpenGL的计算机图形学之期末复习提纲
- [OpenGL]计算机图形学:基于Articulated Models的机械手臂实例
- 计算机图形学-基于OpenGL的直线扫描程序
- 计算机图形学-基于OpenGL的直线段的裁剪算法
- 计算机图形学02一一OpenGL 代码实现绘制一条线
- 计算机图形学考试-绘制一条任意线型和线宽的直线。
- 计算机图形学——OpenGL光照模型
- 计算机图形学09一一OpenGL 显示列表
- 计算机图形学 OPENGL学习
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_2_中点画圆算法
- VS2012下基于Glut OpenGL绘制虚线示例程序:
- 计算机图形学:基于3D游戏开发——第二章 顶点处理机制