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