计算机图形学-基于OpenGL的绘制Bezier曲线

2024-05-26 14:32

本文主要是介绍计算机图形学-基于OpenGL的绘制Bezier曲线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

计算机图形学-基于OpenGL的绘制Bezier曲线

本实验集成开发环境为vs2013,基于OpenGL。

实验内容

根据Bezier曲线的定义,绘制Bezier曲线段。自己编程实现Bernstain基函数,然后在曲线上采集200个点,连成拆线段绘制。

预备知识

  • P(t)=i=0nPiBi,n(t),t[0,1]
  • 其中,
    Bi,n(t)=Ctn(1t)ni

实验代码

#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;
}

效果预览

Bezier1

这篇关于计算机图形学-基于OpenGL的绘制Bezier曲线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004729

相关文章

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr