知识点:

Bezier曲面性质

Bezier曲线简单理解

代码参考:https://blog.csdn.net/wpxu08/article/details/70208395

曲线

#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}};
//GLfloat ctrlpoints[4][3] ={{ 0.0, 0.0, 0.0}, { 4.0, 0.0, 0.0},{4.0, 4.0, 0.0}, {-4,4, 0.0}};//改变顶点
void init(void)
{glClearColor(1.0, 1.0, 1.0, 0.0);glShadeModel(GL_FLAT);//下行用于定义曲线函数glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);//一维求值器glEnable(GL_MAP1_VERTEX_3); //将当前曲线函数激活
}
void display(void)
{int i;glClear(GL_COLOR_BUFFER_BIT);//下面用求值器按等分计算Bezier曲线上的点glColor3f(0.0, 0.0, 0.0);glLineWidth(2);//画弯折直线glBegin(GL_LINE_STRIP);//分段数for (i = 0; i <= 100; i++)glEvalCoord1f((GLfloat) i/100); //相当于调用了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(int w, int h)
{glViewport(0, 0, (GLsizei) w, (GLsizei) 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 (argv[0]);init ();glutDisplayFunc(display);glutReshapeFunc(reshape);//改变窗口大小时保持图形比例glutMainLoop();return 0;
}

曲面

#include <GL/glut.h>
GLfloat ctrlpoints[4][4][3] = {
{{ -3, -3, 4.0 },{ -1, -3, 4.0 },{ 1, -3, -2.0 },{ 3, -3, 4.0 }},
{{ -3, -1, 2.0 },{ -1, 3, 4.0 },{ 1, 1, 2},{3,-1,-2}},
{{ -3, 1, 4.0 },{ -1, 1, 2.0 },{ 1,1, 6},{3,-3,3} },
{{ -3,3, -4},{ -1,3,-4.0},{1,1,2},{3,3,-2}}
};
//增加一个顶点的x
//GLfloat ctrlpoints[4][4][3] = {
//{{ -1, -3, 4.0 },{ -1, -3, 4.0 },{ 1, -3, -2.0 },{ 3, -3, 4.0 }},
//{{ -3, -1, 2.0 },{ -1, 3, 4.0 },{ 1, 1, 2},{3,-1,-2}},
//{{ -3, 1, 4.0 },{ -1, 1, 2.0 },{ 1,1, 6},{3,-3,3} },
//{{ -3,3, -4},{ -1,3,-4.0},{1,1,2},{3,3,-2}}
//};
void init(void)
{glClearColor (1.0, 1.0, 1.0, 0.0);//下行的代码用控制点定义Bezier曲面函数glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &ctrlpoints[0][0][0]);glEnable(GL_MAP2_VERTEX_3); //激活该曲面函数glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0); //构造平行投影矩阵 设置正投影空间
}
void display(void)
{int i, j;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glColor3f(0.0, 0.0, 1.0);glPushMatrix ();//矩阵入栈glRotatef(30.0, 1.0, 1.0, 1.0);//旋转一下便于查看for (j = 0; j <= 20; j++){glBegin(GL_LINE_STRIP);for (i = 0; i <= 20; i++)glEvalCoord2f((GLfloat)i/20.0, (GLfloat)j/20.0); //调用求值器glEnd();glBegin(GL_LINE_STRIP);for (i = 0; i <= 20; i++)glEvalCoord2f((GLfloat)j/20.0, (GLfloat)i/20.0); //调用求值器glEnd();}glPopMatrix ();//矩阵出栈glFlush();
}
int main(int argc, char** argv)
{glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize (500, 500);glutInitWindowPosition (100, 100);glutCreateWindow (argv[0]);init ();glutDisplayFunc(display);glutMainLoop();return 0;
}

结果

绘制曲线:                                 改变顶点后

绘制曲面:                                                           增加其中一个顶点x

 

Bezier曲线曲面绘制相关推荐

  1. bezier 曲线的绘制 matlab实现

    Bezier曲线的定义如下: 下面用matlab实现Bezier曲线的绘制: 1.绘制二维bezier曲线代码如下: function [X,Y]=bezier2(x,y) %用法: %bezier( ...

  2. 计算机图形学:三次Bezier曲线的绘制(算法原理及代码实现)

    一.实现方案 贝塞尔曲线原理:贝塞尔曲线是计算机图形图像造型的基本工具,是图形造型运用得最多的基本线条之一.它通过控制曲线上的四个点(起始点.终止点以及两个相互分离的中间点)来创造.编辑图形.其中起重 ...

  3. 【Python】Bezier曲线的绘制

    Bezier曲线的绘制 r(u)=∑iJn,i(u)Vir(u) = \sum_i{J_{n,i}(u)V_i}r(u)=∑i​Jn,i​(u)Vi​ Jn,i=Cniui(1−u)n−iJ_{n,i ...

  4. 计算机图形学:Bezier曲线的绘制

    1.实验目的 掌握Bezier曲线的定义原理及绘制过程 定义: 贝塞尔曲线(Bezier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线.一般的矢量图形软件通过它来精确画出 ...

  5. qt下bezier曲线的绘制(C++)

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  6. matlab meshgrid例子,MATLAB简单三维曲线曲面绘制——meshgrid函数 ← MATLAB讨论组 ......

    三维曲线和曲面的绘制在实际中经常用到,MATLAB正式由于其强大的绘图功能,在工程和科学界已经广泛使用.这里演示一下,怎样根据离散点数据绘制三维曲线或者曲面. 绘制三维图形,首先,需要XY平面的网格数 ...

  7. MFC有理二次Bezier曲线绘制

    MFC有理二次Bezier曲线绘制 非有理Bezier曲线曲线无法精确表示所有的二次曲线和二次曲面,引入了有理Bezier曲线曲面,来精确表示.如图,通过控制权重,可以获取不同的二次有理Bezier曲 ...

  8. 计算机图形学 实验7 《复杂图形绘制-Bezier曲线与Hermite曲线》

    计算机图形学 实验7 <复杂图形绘制-Bezier曲线与Hermite曲线> 一.实验目的 学习样条曲线的绘制. 二.实验内容 1.绘制Bezier曲线: 2.绘制Hermite曲线. 三 ...

  9. Bezier曲线的拼接

    Bezier曲线的拼接 根据前面对Bezier曲线生成算法的介绍,显然随着点的增加,接着会引起  的次数提高,而而高次多项式又会带来计算上的困难. 对于上式子,也就是随着n的增加,t的次数也会随着增加 ...

最新文章

  1. 听说,这是时下最恐怖的出游邀请
  2. 4.Windows下安装ZooKeeper
  3. bug4 导入新工程时报 Target runtime com.genuitec.runtime.generic.jee60 is not defined
  4. jquery生成二维码
  5. Boost.Asio入门
  6. SQL server 2016 安装步骤
  7. 【Unity3D与23种设计模式】模板方法模式(Template Method)
  8. 双系统重装windows以后修复ubuntu的引导
  9. 获得SAP CRM report的元数据get report detail(Metadata) via url
  10. css3的cursor
  11. 基于JAVA+SpringBoot+Mybatis+MYSQL的快递管理系统
  12. 一周只指定一个主要目标,当主要目标完成时,就已经完成了任务的80%
  13. IEEE COMMUNICATIONS LETTERS 写作Latex模板
  14. WSADATA 数据结构
  15. [JZOJ3339]【NOI2013模拟】wyl8899和法法塔的游戏
  16. 小白学习MySQL - MySQL会不会受到“高水位”的影响?
  17. 基因编辑最新研究进展(2021年8月)
  18. 动手学习数据分析第一章内容
  19. 关于textarea中的回车符
  20. pandas相关性分析的三种方法

热门文章

  1. 炒菜机器人的弊端_体验官|炒菜机器人真的实用吗
  2. 司库奇尤单抗什么时候停药?理由不少于200字
  3. WSL Docker 使用 bitnami 镜像
  4. Android常用命令行指令
  5. [无线] Android 系统开发学习杂记
  6. 目标检测YOLO实战应用案例100讲-基于点云的三维多目标检测算法研究
  7. Efficient SR挑战赛结果| AIM 2020 Challenge on Efficient Super-Resolution:Methods and Results
  8. 使用Excel计算正态分布的峰度(Kurtosis)和偏度(Skewness)
  9. Linux Mint设置中文输入法
  10. 看英文电影必备的粗口词汇短语