(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 ;
}

最新文章

  1. 微信小程序开发总结
  2. [OC笔记]我的第一个OC程序
  3. hdu5175 gcd 求约数
  4. fir.im Weekly - 如果让你重新做一款APP
  5. MYSQL导入导出.sql文件
  6. 数据库中is null(is not null)与=null(!=null)的区别
  7. 微信支付开发,再次签名,APP调用
  8. 数据结构【三】:简单优先队列PriorityQueue
  9. 【大坑】DataGridView多线程更新修改Cell单元格卡死
  10. 面试题——分析从输入url到页面返回的过程(或者查询返回过程)
  11. shell 脚本之if、for、while语句
  12. MyReport报表引擎2.7.6.7新功能
  13. LAMP第四部分mysql操作
  14. Activiti6-FormService(学习笔记)重要
  15. 搭建rsync服务并同步重要数据
  16. 2018 湖南网络比赛题 HDU - 6286 (容斥)
  17. black-hole《XSS的原理分析与解剖》阅读笔记
  18. dom4j解析xml报&quot;文档中根元素后面的标记格式必须正确&quot;
  19. 防止putty的鼠标右键错误粘贴
  20. [置顶] 个人博客上线!欢迎来访~ http://onlyloveyd.cn/

热门文章

  1. 一张图搞懂javascript原型链
  2. js中call、apply、bind的区别
  3. [luogu2165 AHOI2009] 飞行棋 (枚举)
  4. Java 中 synchronized的用法详解
  5. 0923如何利用mysqlbinlog日志闪回
  6. 洛谷 P1692 部落卫队
  7. 很不错的点餐系统应用ios源代码完整版
  8. 使用enca进行字符集转码
  9. yolo源码解析(3):进行简单跳帧
  10. Python多线程学习(一、线程的使用)