OpenGL绘制三维贝塞尔曲线

  因为这次课程作业做得很有心得,就写篇博客来记录一下。

  本次课程作业最终是实现一个三维的贝塞尔曲线绘制程序。所以,在此之前,我们必须知道怎样绘制一条贝塞尔曲线。这里,绘制的是三次贝塞尔曲线。我不解释贝塞尔曲线的具体实现了,这里,我只给出贝塞尔曲线的参数方程,有需要的同学可以自己去了解。三次贝塞尔曲线参数方程如下:

B(t)=P0(1t)3+3P1t(1t)2+3P2t2(1t)+P3t
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是OpenGL绘制三次贝塞尔曲线的示例代码: ```c++ #include <GL/glut.h> #include <math.h> double points[4][2] = { {-0.5, 0}, {-0.25, 0.5}, {0.25, -0.5}, {0.5, 0} }; void drawBezierCurve() { glColor3f(1.0, 0.0, 0.0); // 设置颜色为红色 glLineWidth(3.0); // 设置线宽为3 glBegin(GL_LINE_STRIP); // 开始绘制线段 for (double t = 0.0; t <= 1.0; t += 0.01) { double x = pow(1 - t, 3) * points[0][0] + 3 * t * pow(1 - t, 2) * points[1][0] + 3 * pow(t, 2) * (1 - t) * points[2][0] + pow(t, 3) * points[3][0]; double y = pow(1 - t, 3) * points[0][1] + 3 * t * pow(1 - t, 2) * points[1][1] + 3 * pow(t, 2) * (1 - t) * points[2][1] + pow(t, 3) * points[3][1]; glVertex2d(x, y); // 添加点到线段中 } glEnd(); // 结束绘制线段 } void display() { glClear(GL_COLOR_BUFFER_BIT); // 清空颜色缓冲区 drawBezierCurve(); // 绘制贝塞尔曲线 glFlush(); // 刷新缓冲区 } void init() { glClearColor(1.0, 1.0, 1.0, 0.0); // 设置背景色为白色 glMatrixMode(GL_PROJECTION); // 设置投影矩阵 glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); // 设置视口大小 } int main(int argc, char** argv) { glutInit(&argc, argv); // 初始化glut glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显示模式 glutInitWindowSize(500, 500); // 设置窗口大小 glutInitWindowPosition(100, 100); // 设置窗口位置 glutCreateWindow("Bezier Curve"); // 创建窗口并命名 init(); // 初始化OpenGL glutDisplayFunc(display); // 设置显示回调函数 glutMainLoop(); // 进入主循环 return 0; } ``` 该代码使用OpenGL绘制了一个三次贝塞尔曲线,其中使用了`glBegin`和`glEnd`函数绘制线段,并使用`glVertex2d`函数添加点到线段中。在`drawBezierCurve`函数中,根据贝塞尔曲线的公式计算出每个$t$值对应的$x$和$y$,并添加到线段中。通过调用`glutMainLoop`函数进入主循环,可以让程序一直运行,直到用户关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值