实验目的
- 理解Bezier曲线、曲面绘制的基本原理;理解OpenGL中一维、二维插值求值器的用法。
- 掌握OpenGL中曲线、曲面绘图的方法,对比不同参数下的绘图效果差异;
代码1:用四个控制点绘制一条三次Bezier曲线
Github地址
#include "stdafx.h" #include #include #include //4个控制点的3D坐标——z坐标全为0 GLfloat ctrlpoints[4][3] = { { -4, -4, 0 }, { -2, 4, 0 }, { 2, -4, 0 }, { 4, 4, 0 } }; void init(void) { //背景色 glClearColor(0.0, 0.0, 0.0, 1.0); //将控制点坐标映射为曲线坐标 //参数1:GL_MAP1_VERTEX_3,3维点坐标 //参数2和3:控制参数t或u的取值范围[0, 1] //参数4:曲线内插值点间的步长3————3维坐标 //参数5:曲线间的补偿为顶点数4个————总步长为12 //参数6:控制点二维数组首元素地址 //注意: 若是在这里设置了相关参数,后续对ctrlpoints内容更改曲线不变 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]); //打开开关——允许3维坐标控制点到参数点转换开关 glEnable(GL_MAP1_VERTEX_3); glShadeModel(GL_FLAT); //代码开关2:去掉本注释,可启用反走样 /* glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH); //允许直线反走样 glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST); // Antialias the lines glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); */ } void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); //代码开关1:去掉本注释,查看动态的曲线绘图效果:动态更新控制点坐标 /* for(int t = 0; t < 4; t++) { for(int j = 0; j < 3; j++) ctrlpoints[t][j] = (rand() % 1024 / 1024.0 - 0.5) * 10; } //动态映射 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]); */ glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); //绘制连续线段 glBegin(GL_LINE_STRIP); //参数t或u取值为i/30,共计31个点 for (i = 0; i关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?