《图形学》实验三:DDA算法画直线
开发环境:
VC++6.0,OpenGL
实验内容:
使用DDA算法画直线。
实验结果:
代码:
1 #include <gl/glut.h>
2 #include <math.h>
3
4 #define WIDTH 500 //窗口宽度
5 #define HEIGHT 500 //窗口高度
6
7 #define DRAWLINE1 DDALine(100,200,200,100); //画直线
8 #define DRAWLINE2 DDALine(200,100,450,400); //画直线
9
10 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //取消控制台
11
12 void Init() //初始化
13 {
14 glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明
15 glColor3f(1.0f,0.0f,0.0f); //设置画笔颜色
16
17 glMatrixMode(GL_PROJECTION); //设置投影
18 gluOrtho2D(0.0, WIDTH, 0.0, HEIGHT); //设置投影区域
19 }
20
21 void DDALine(int x0,int y0,int x1,int y1) //DDA算法画线
22 {
23 int dx,dy,eps1,i;
24 float x,y,xIncre,yIncre;
25 dx = x1-x0;
26 dy = y1-y0;
27 x = x0,y = y0;
28 if(abs(dx)>abs(dy))
29 eps1 = abs(dx);
30 else
31 eps1 = abs(dy);
32 xIncre = (float)dx / float(eps1);
33 yIncre = (float)dy / float(eps1);
34 for(i=0;i<=eps1;i++){
35 glBegin(GL_POINTS);
36 glVertex2i(int(x+0.5),int(y+0.5));
37 glEnd();
38 x+=xIncre;
39 y+=yIncre;
40 }
41 }
42
43 void Display() //显示函数
44 {
45 glClear(GL_COLOR_BUFFER_BIT); //清空颜色堆栈
46
47 DRAWLINE1
48 DRAWLINE2
49
50 glFlush(); //清空缓冲区指令
51 }
52
53 int main(int argc,char** argv)
54 {
55 glutInit(&argc,argv);
56 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化显示模式
57 glutInitWindowSize(WIDTH,HEIGHT); //设置窗口尺寸
58 glutInitWindowPosition(200,100); //设置窗口位置
59 glutCreateWindow("画直线"); //创建窗口
60
61 glutDisplayFunc(Display); //注册显示函数
62 Init(); //初始化
63 glutMainLoop(); //进入程序循环
64 return 0;
65 }
Freecode : www.cnblogs.com/yym2013