用OpenGL进行曲线、曲面的绘制

您所在的位置:网站首页 曲线绘制算法实验报告 用OpenGL进行曲线、曲面的绘制

用OpenGL进行曲线、曲面的绘制

#用OpenGL进行曲线、曲面的绘制| 来源: 网络整理| 查看: 265

实验目的 理解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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3