盐城师范学院数学科学学院实验报告课程名称计算机图形学班级08(6)学号15号姓名陈叶玲实验地点主楼B408 实验日期4月21日实验学时2课时实验名称DDA算法生成直线实验类型 基础性 综合性 设计性实验目的:理解基本图形元素光栅化的基本原理,掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法。
实验环境:(包括软件平台和硬件平台)工具:VC++6.0操作系统版本:WINGDOWS-XP2,主要硬件:CPU 2.4GHz,内存 512M,显示器:三星SyncMaster793DF实验内容及步骤 (含源程序):直线是图形中最基本的元素,DDA算法是基于数字微分思想的直线声成算法,而Bresenham算法是比较常用和效果良好的直线算法。
通过本次试验学生对比学习直线的生成算法和图形效果的优良评价。
近一步巩固学生的程序设计能力和图形库使用的能力,以及图形算法的理解和掌握。
源程序:#include <GL/glut.h>void LineDDA(int x0,int y0,int x1,int y1/*,int color*/){int x, dy, dx, y;float m;dx=x1-x0;dy=y1-y0;m=dy/dx;y=y0;glColor3f (1.0f, 1.0f, 0.0f);glPointSize(1);for(x=x0;x<=x1; x++){glBegin (GL_POINTS);glVertex2i (x, (int)(y+0.5));glEnd ();y+=m;}}void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f (1.0f, 0.0f, 0.0f);glRectf(25.0, 25.0, 75.0, 75.0);glPointSize(5);glBegin (GL_POINTS);glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (0.0f, 0.0f);glEnd ();LineDDA(0, 0, 200, 300);glBegin (GL_LINES);glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (100.0f, 0.0f);glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (180.0f, 240.0f); glEnd ();glFlush();}void Init(){glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);}void Reshape(int w, int h){glViewport(0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("Hello World!");Init();glutDisplayFunc(myDisplay);glutReshapeFunc(Reshape);glutMainLoop();return 0;}实验结果及分析:通过本次实验,初步了解了计算机图形学在计算机图像处理,工程制作,平面设计上的应用,掌握了计算机绘制圆和直线的几种算法,DDA直线和圆的生成算法,并且理解和掌握了他们的优缺点,在以后的实验中会努力学习,争取把这门计算机图形学课学好。