主页 > 程序人生 > OpenGl 贝兹曲线程序

OpenGl 贝兹曲线程序

贝兹曲线(Bézier curve),貌似学图形学就肯定逃不出这个玩意。。。介绍什么的我也就不浪费笔墨了。直接看wiki好了
http://zh.wikipedia.org/zh/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A
然后呢,我们图形学课老师上机貌似要做这个,所以就提前写出来了。贴一下,加了详细的注释,也方便自己复习用~
对了,如果你是windows记得改一下头文件位置,这是unix下的头文件。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
 *  homework1.cpp
 *  OpenGLhello
 *
 *  Created by zerob13 on 10/13/10.
 *  Copyright 2010 __MyCompanyName__. All rights reserved.
 *
 */
#include<stdio.h>
#include <stdlib.h>
#include<GLUT/GLUT.h>
double x[4],y[4];//存放输入的四个控制点
 
/*
 *用以绘制曲线的函数
 *
 */
void Bezier(double X0,double Y0,
			double X1,double Y1,
			double X2,double Y2,
			double X3,double Y3)
{
	double xx,yy,X,Y;
	xx=X0;yy=Y0;
	glColor3f(1.0, 0, 0.0);//设定曲线颜色
	/*for循环绘制曲线*/
	for (double t=0.0; t<= 1.0;t=t+0.0001)//步长设置为0.0001,足够了
	{
		X=xx;Y=yy;
		xx=(1-t)*(1-t)*(1-t)*X0+3*t*(1-t)*(1-t)*X1+3*t*t*(1-t)*X2+t*t*t*X3;
		yy=(1-t)*(1-t)*(1-t)*Y0+3*t*(1-t)*(1-t)*Y1+3*t*t*(1-t)*Y2+t*t*t*Y3;//最主要的两个方程,用以计算曲线的点
		glPointSize(1.0);
		glBegin(GL_LINES);//描短直线成曲线
		glVertex2f(X, Y);
		glVertex2f(xx, yy);
		glEnd();
		glFlush();
 
	}
 
} 
/*
 *用以显示曲线以及辅助线的函数
 *
 */
void display()
{
	glClear(GL_COLOR_BUFFER_BIT);//清屏
	glColor3f(0.0, 1, 0.0);//设定辅助线颜色
	glPointSize(1.0);//设定点大小
	glBegin(GL_LINES);//画辅助线
	glVertex2f(x[0],y[0]);
	glVertex2f(x[1], y[1]);
	glVertex2f(x[1],y[1]);
	glVertex2f(x[2], y[2]);
	glVertex2f(x[2],y[2]);
	glVertex2f(x[3], y[3]);
	glEnd();
	glFlush();
 
	Bezier(x[0],y[0],x[1],y[1],x[2],y[2],x[3],y[3]);
 
}
/*
 *主函数
 *
 */
int main(int argc,char ** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glutInitWindowPosition(0, 0);
	glutInitWindowSize(500, 500);
	glutCreateWindow("Zerob13's Bezier Demo");
	printf("Please input 4 Points:\n");
	scanf("%lf %lf %lf %lf %lf %lf %lf %lf",x,y,x+1,y+1,x+2,y+2,x+3,y+3);
	glutDisplayFunc(display);
	glutMainLoop();
	return 0;
}

相关日志

  • 暂无相关日志

, ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:0

下面所列的是引用到本博客的链接
OpenGl 贝兹曲线程序 来自 混沌的云
顶部