7.5.5编程实例-Bezier曲线曲面绘制

(a)Bezier曲线 (b) Bezier曲面
1. 绘制Bezier曲线
#include <GL/glut.h>
GLfloat ctrlpoints[][] =
{{ -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);
//下行用于定义曲线函数
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, , , &ctrlpoints[][]);
glEnable(GL_MAP1_VERTEX_3); //将当前曲线函数激活
}
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
//下面用求值器按20等分计算Bezier曲线上的点
glColor3f(0.0, 0.0, 0.0);
glLineWidth();
glBegin(GL_LINE_STRIP);
for (i = ; i <= ; i++)
glEvalCoord1f((GLfloat) i/20.0); //相当于调用了glVertex*()
glEnd();
//下面绘制控制多边形
glLineWidth();
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_LINE_STRIP);
for (i = ; i < ; i++)
glVertex3fv(&ctrlpoints[i][]);
glEnd();
glFlush();
}
void reshape(int w, int h)
{
glViewport(, , (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);
else
glOrtho(-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 (, );
glutInitWindowPosition (, );
glutCreateWindow (argv[]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return ;
}
附上本实验的VC++工程代码(VC++2008)
2. 绘制Bezier曲面(本实验的VC++工程代码(VC++2008))
#include <GL/glut.h>
GLfloat ctrlpoints[][][] = {
{{-, , 4.0}, {-, , 2.0}, {-, , 0.0}, {, , 2.0}},
{{-, , 1.0}, {-, , 3.0}, {-, , 6.0}, {, , -1.0}},
{{-, , 4.0}, {-, , 0.0}, {-, , 3.0}, {, , 4.0}},
{{-, , 0.0}, {-, , 0.0}, {-, , 0.0}, {, , 0.0}}
};
void display(void)
{
int i, j;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);
glPushMatrix ();
glRotatef(85.0, 1.0, 1.0, 1.0);
for (j = ; j <= ; j++)
{
glBegin(GL_LINE_STRIP);
for (i = ; i <= ; i++)
glEvalCoord2f((GLfloat)i/20.0, (GLfloat)j/20.0); //调用求值器
glEnd();
glBegin(GL_LINE_STRIP);
for (i = ; i <= ; i++)
glEvalCoord2f((GLfloat)j/20.0, (GLfloat)i/20.0); //调用求值器
glEnd();
}
glPopMatrix ();
glFlush();
}
void init(void)
{
glClearColor (1.0, 1.0, 1.0, 0.0);
//下行的代码用控制点定义Bezier曲面函数
glMap2f(GL_MAP2_VERTEX_3, , , , , , , , , &ctrlpoints[][][]);
glEnable(GL_MAP2_VERTEX_3); //激活该曲面函数
glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0); //构造平行投影矩阵
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (, );
glutInitWindowPosition (, );
glutCreateWindow (argv[]);
init ();
glutDisplayFunc(display);
glutMainLoop();
return ;
}
7.5.5编程实例-Bezier曲线曲面绘制的更多相关文章
- JavaScript动画实例:曲线的绘制
在“JavaScript图形实例:曲线方程”一文中,我们给出了15个曲线方程绘制图形的实例.这些曲线都是根据其曲线方程,在[0,2π]区间取一系列角度值,根据给定角度值计算对应的各点坐标,然后在计算出 ...
- [摘抄] Bezier曲线、B样条和NURBS
Bezier曲线.B样条和NURBS,NURBS是Non-Uniform Rational B-Splines的缩写,都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是: Bezier曲 ...
- PHP多进程编程实例
这篇文章主要介绍了PHP多进程编程实例,本文讲解的是在Linux下实现PHP多进程编程,需要的朋友可以参考下 羡慕火影忍者里鸣人的影分身么?没错,PHP程序是可以开动影分身的!想完成任务,又觉得一个进 ...
- c#摄像头编程实例 (转)
c#摄像头编程实例 摄像头编程 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using system;using System.Runtime.Intero ...
- Bezier曲线的原理 及 二次Bezier曲线的实现
原文地址:http://blog.csdn.net/jimi36/article/details/7792103 Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成 ...
- JAX-RS 2.0 REST客户端编程实例
JAX-RS 2.0 REST客户端编程实例 2014/01/28 | 分类: 基础技术, 教程 | 0 条评论 | 标签: JAX-RS, RESTFUL 分享到:3 本文由 ImportNew - ...
- Android studio 下JNI编程实例并生成so库
Android studio 下JNI编程实例并生成so库 因为公司需要为Android相机做美颜等图像后期处理,需要使用JNI编程,最近学了下JNI,并且在Android Studio下实现了一个小 ...
- hadoop2.2编程:使用MapReduce编程实例(转)
原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
随机推荐
- [luogu4158 SCOI2009] 粉刷匠(dp)
传送门 Solution 把状态都记上暴力转移即可 Code //By Menteur_Hxy #include <queue> #include <cmath> #inclu ...
- [jzoj5786]【NOIP2008模拟】观察 (dfs序+lca)
传送门 Description infleaking十分愉快地走在路上, 因为经过10^9^9^9年后, 他得到了一个新技能--观察大法. 刚出来的infleaking就想要挑战自我. 为什么infl ...
- 编译安装PHP7及扩展
一.编译安装PHP 1. 下载源码包并解压 源码包地址:http://php.net/downloads.php 下载源码包 当前PHP最新本门是7.2.9,下载 php-7.2.9 源码包 wget ...
- 《团队名称》第八次团队作业:Alpha冲刺
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 代码敲不队 作业学习目标 (1)掌握软件测试基础技术(2)学习迭代式增量软件开发过程(Scrum) ...
- 【hihocoder 1474】拆字游戏
[题目链接]:http://hihocoder.com/problemset/problem/1474 [题意] [题解] 题目的意思是说,那个块在最左端先出现,就先处理那个块; 每个连通块,处理出最 ...
- 11gR2 集群(CRS/GRID)新功能—— SCAN(Single Client Access Name)
https://blogs.oracle.com/database4cn/11gr2-crsgrid-scansingle-client-access-name
- [WordPress]基本操作
编辑文本 文本模式下 more 提取摘要<!--more-->
- HDU 5046
同样是二分+DLX即可. #include <iostream> #include <cstdio> #include <cstring> #include < ...
- [think in java]第12章 通过异常处理错误
异常处理是java中唯一正式的错误报告机制. 而且通过编译器强行运行. 异常參数 抛出异常与方法正常返回值的差别:异常返回的"地点"与普通方法调用返回的"地点" ...
- 几个比較好的IT站和开发库官网
几个比較好的IT站和开发库官网 1.IT技术.项目类站点 (1)首推CodeProject,一个国外的IT站点,官网地址为:http://www.codeproject.com,这个站点为程序开发人员 ...