OpenGL绘制三次贝塞尔曲线的示例代码
时间: 2023-12-06 21:04:12 浏览: 89
以下是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`函数进入主循环,可以让程序一直运行,直到用户关闭窗口。
阅读全文