文章目录

  • 一、vs2019安装OpenGL
  • 二、PPT
  • 三、代码
  • 四、运行结果
  • 总结
  • 附bezier曲线代码

一、vs2019安装OpenGL

https://blog.csdn.net/SouthWooden/article/details/108570410

二、PPT

https://www.cs.utexas.edu/~bajaj/graphics2012/cs354/lectures/lect11.pdf

三、代码

#include <GL/glut.h>GLUnurbsObj* theNurb;
GLfloat ctrlpoints[11][3] =
{ { 1.0, 2.0, 0.0}, { 1.6, 0.9, 0.0},{2.4, 2.1, 0.0}, {3.6, 1.3, 0.0},{4.5, 0.6, 0.0},
{5.3, -0.3, 0.0},{5.9, -1.4, 0.0},{6.9, -0.5, 0.0},{7.7, 0.6, 0.0},{8.5, 1.5, 0.0},
{9.3, 3.7, 0.0} };/*GLfloat color[9][3] = { {1.0,0.0,0.0},{1.0,1.0,0.0},{0.0,1.0,0.0},{-1.0,1.0,0.0},
{-1.0,0.0,0.0},{-1.0,-1.0,0.0},{0.0,-1.0,0.0},{1.0,-1.0,0.0},{1.0,-1.0,0.0} };*/GLfloat knots[15] = { 0.0, 0.0, 0.0, 0.0,0.2, 0.4, 0.4, 0.6,0.8, 0.8, 0.8,1.0, 1.0, 1.0, 1.0 };  void init(void)
{glClearColor(1.0, 1.0, 1.0, 0.0);//设置背景色theNurb = gluNewNurbsRenderer();//创建NURBS对象theNurbgluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 10);
}
/*绘制曲线*/
void Display(void)
{int i;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glColor3f(0.0, 0.0, 0.0);glLineWidth(3.0);/*绘制曲线*/gluBeginCurve(theNurb);gluNurbsCurve(theNurb, 13, knots, 3, &ctrlpoints[0][0], 4, GL_MAP1_VERTEX_3);//gluNurbsCurve(theNurb, 13, knots, 3, &color[0][0], 4, GL_MAP1_COLOR_4);gluEndCurve(theNurb);/*绘制控制多边形*/glLineWidth(1);//设置栅格化线条的宽度glColor3f(0.0, 0.0, 1.0);glBegin(GL_LINE_STRIP);for (i = 0; i < 11; i++)glVertex3fv(&ctrlpoints[i][0]);glEnd();/*绘制点*/glColor3f(1.0, 0.0, 0.0);glPointSize(5.0);glBegin(GL_POINTS);for (i = 0; i < 11; i++)glVertex2fv(&ctrlpoints[i][0]);glEnd();glutSwapBuffers();
}
void Reshape(GLsizei w, GLsizei h)
{glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)glOrtho(-1.0, 10.0, -5.0 * (GLfloat)h / (GLfloat)w, 5.0 * (GLfloat)h /(GLfloat)w, -5.0, 5.0);elseglOrtho(-1.0 * (GLfloat)w / (GLfloat)h, 10.0 * (GLfloat)w / (GLfloat)h, -5.0, 5.0, -5.0, 5.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}void keyboard(unsigned char key, int x, int y) //key 为键盘按键的ASCII码
{switch (key){case 'x':case 'X':case 27:   //ESC键exit(0);break;default:break;}
}int main(int argc, char** argv)
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(600, 400);glutInitWindowPosition(200, 200);glutCreateWindow("三次B样条曲线");/*绘制与显示*/init();glutReshapeFunc(Reshape);glutKeyboardFunc(keyboard);glutDisplayFunc(Display);glutMainLoop();return(0);
}

四、运行结果

总结

  • OpenGL绘图框架
  • Nurbs类使用
  • 求值器理解
  • 绘制点、直线、曲线
  • reshape函数设置

附bezier曲线代码

#include <GL/glut.h>
GLfloat ctrlpoints[4][3] =
{ { -4.0, -4.0, 0.0}, { -2.0, 3.0, 0.0},{2.0, 4.5, 0.0}, {3.0, -3.0, 0.0} };
void init(void)
{glClearColor(1.0, 1.0, 1.0, 0.0);glShadeModel(GL_FLAT);//下行用于定义曲线函数glEnable(GL_MAP1_VERTEX_3); //将当前曲线函数激活glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
}//void glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);//将控制点坐标映射为曲线坐标//参数1:GL_MAP1_VERTEX_3,3维点坐标//参数2和3:控制参数t或u的取值范围[0, 1]//参数4:曲线内插值点间的步长3————3维坐标//参数5:曲线间的补偿为顶点数4个————总步长为12//参数6:控制点二维数组首元素地址void display(void)
{int i;glClear(GL_COLOR_BUFFER_BIT);//下面用求值器按10等分计算Bezier曲线上的点glColor3f(0.0, 0.0, 0.0);glLineWidth(5);//设置栅格化线条的宽度//glBegin来指明如何使用这些顶点glBegin(GL_LINE_STRIP);for (i = 0; i <= 30; i++)//10控制曲线的光滑程度,也就是打点的密集程度glEvalCoord1f((GLfloat)i / 30.0); //相当于调用了glVertex*()glEnd();//下面绘制控制多边形glLineWidth(1);//设置栅格化线条的宽度glColor3f(0.0, 0.0, 1.0);glBegin(GL_LINE_STRIP);for (i = 0; i < 4; i++)glVertex3fv(&ctrlpoints[i][0]);glEnd();glFlush();
}
void reshape(GLsizei w, GLsizei h)
{glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)glOrtho(-5.0, 5.0, -5.0 * (GLfloat)h / (GLfloat)w, 5.0 * (GLfloat)h / (GLfloat)w, -5.0, 5.0);elseglOrtho(-5.0 * (GLfloat)w / (GLfloat)h, 5.0 * (GLfloat)w / (GLfloat)h, -5.0, 5.0, -5.0, 5.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}
int main(int argc, char** argv)
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//显示模式glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("三次bezier曲线");init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;
}

感谢许多人分享自己的代码,站在巨人肩膀上,我才能看得更远

OpenGL实现B样条曲线相关推荐

  1. 样条表示---OpenGL的逼近样条函数

    2019独角兽企业重金招聘Python工程师标准>>> OpenGL的Bezier样条曲线函数 OpenGL的Bezier样条曲面函数 GLUT的B样条曲线函数 GLUT的B样条曲面 ...

  2. Python+OpenGL绘制任意长度和次数的B样条曲线

    开学第一课:一定不要这样问老师Python问题 中国大学MOOC"Python程序设计基础"第6次开课时间 董付国老师Python系列教材推荐与选用参考 ============= ...

  3. 计算机图形软件---OpenGL简介

    2019独角兽企业重金招聘Python工程师标准>>> 基本的OpenGL语法 OpenGL基本函数库用来描述图元.属性.几何变换.观察变换和进行许多其他的操作. OpenGL基本库 ...

  4. 3次Bezier曲线,曲面和3次B样条曲线和曲面

    问题: 昨天刚忙完图形学的编程作业,题目是自拟,听老师说他要重点考这个自由曲线,曲面,特地把作业定位了这个,好熟悉熟悉,据说成程老师的课考试非常的难呀.郁闷. 解答: 先自由曲线的含义和概念.基本上我 ...

  5. [OpenGL] 雪景火焰特效demo

    很久之前的代码了,项目用的是vs2013,编译器套件可以在项目属性中修改. 代码地址:点击打开链接 模型导入 此处使用了开源代码. 自己使用Maya对场景中一些物体建模,然后三角形化后保存为obj格式 ...

  6. OpenCL,OpenGL编译

    OpenCL,OpenGL编译 TVM已经支持多个硬件后端:CPU,GPU,移动设备等-添加了另一个后端:OpenGL / WebGL. OpenGL / WebGL能够在没有安装CUDA的环境中利用 ...

  7. OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?

    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...

  8. Android OpenGL ES(十一)绘制一个20面体 .

    前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形.其它所有复杂的2D或3D图形都是由这些基本图形构成. 本例介绍如何使用三角形构造一个正20面体.一个正20面体,有12个顶点,20 ...

  9. c++之openGL在VS中的配置及简单图形绘制

    VS中openGL的配置 相关资源下载: 链接:https://pan.baidu.com/s/1hRlxbckgLsNiS87k5CPvLg 提取码:tz87 以vs2010为例: 将下载的压缩包解 ...

  10. 利用OpenGL渲染并用OpenCV输出显示二维图像

    OpenGL所有渲染的结果都输出显示在窗口中,设置OpenCV的图像cv::Mat outimg,并使用OpenGL的glReadPixels从帧缓冲区中加载像素至内存: //use fast 4-b ...

最新文章

  1. 任务管理 linux指令qsub,Linux_前一个投的任务跑完再跑另一个任务_qsub_-hold_jid
  2. java jar包图片_jar包的图片不显示 求解
  3. 中日文字编码转换_关于编码你必须知道的知识和技巧
  4. 穷人想变富,富人想变得更富
  5. 项目调研的误区和关键点
  6. 【笔试/面试】SQL 经典面试题
  7. Harbor 2.1发布,工程师的发际线有救了!
  8. POJ 3764 DFS+trie树
  9. 老外的一份渗透测试报告
  10. 2011年度全球移民国家移民条件浅析
  11. Android Camera 预览及录制视频 附demo
  12. 达内学软件测试发证书吗,达内软件测试培训让我拥有了实际工作经验
  13. Android 限制启动应用最大使用内存,可供极限测试时使用
  14. 关于jquery.mloading加载loading效果
  15. lua 自实现pairs
  16. echarts柱状图柱体使用图片
  17. 2022腾讯云年终11.11活动优惠提前享: 一键领取元1888元早鸟券
  18. Nginx Image 缩略图 模块
  19. ws550 第三方固件_华为WS550路由器如何升级固件
  20. 从头学习爬虫(三十八)进阶篇----教务网课程表下载

热门文章

  1. chrome PPAPI 开发(一)
  2. 百度地图隐藏地名_苹果高德百度搜狗 谁是CarPlay导航之王
  3. 空调开关html,酒店墙上空调开关图解—酒店墙上空调开关图案是什么意思
  4. python字符编码(一看就懂)
  5. 2020软件测试报告模板
  6. BUUCTF-Misc-No.3
  7. xy苹果助手安装_xy苹果助手
  8. Matlab保存imagesc函数没有缩放的伪彩图
  9. 一看就懂的Android APP开发入门教程
  10. abap 日期格式转换