word计 算 机 图 形 学课程实验报告某某:学号: / 目 录实验一 直线的DDA算法一、【实验目的】1.掌握DDA算法的基本原理2.掌握DDA直线扫描转换算法3.深入了解直线扫描转换的编程思想二、【实验容】1.利用DDA的算法原理,编程实现对直线的扫描转换2.加强对DDA算法的理解和掌握三、【测试数据及其结果】四、【实验源代码】#include#include#include#includeGLsizei winWidth=500;GLsizei winHeight=500;void Initial(void){ glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0);}void DDALine(int x0,int y0,int x1,int y1){,0.0); int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glVertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre; y+=yIncre; }}void Display(void){ glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush();}void winReshapeF(GLint newWidth, GLint newHeight){ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight)); glClear(GL_COLOR_BUFFER_BIT); winWidth=newWidth; winHeight=newHeight;}int main(int argc,char*argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(400,300); glutInitWindowPosition(100,120); glutCreateWindow("line"); Initial(); glutDisplayFunc(Display); glutReshapeFunc(winReshapeF); glutMainLoop(); return 0;}实验二 Bresenham绘制直线和圆一、【实验目的】1.掌握Bresenham算法扫描转换圆和直线的基本原理。
二、【实验容】1.利用Bresenham算法扫描转换圆和直线的基本原理编程实现对圆和直线的扫描转换三、【测试数据及其结果】四、【实验源代码】绘制直线:#include#include#include#includeGLsizei winWidth=500;GLsizei winHeight=500;void lineBres(int x0, int y0, int xEnd, int yEnd){ glColor3f(0.0, 0.0, 1.0); int dx=fabs(xEnd-x0), dy=fabs(yEnd-y0); int p=2*dy-dx; int twoDy=2*dy, twoDyMinusDx=2*(dy-dx); int x, y; if (x0>xEnd) { x=xEnd; y=yEnd; xEnd=x0; } else{ x=x0; y=y0; } glPointSize(6); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); while (xvoid init(){ glClearColor(0,0,0,0);}void MidBresenhamCircle(int r){ int x,y,d; x=0; y=r; d=1-r; glBegin(GL_LINE_STRIP); while(x<=y){glVertex2f(x,y); if(d<0) d+=2*x+3; else{ d+=2*(x-y)+5; y--; } x++; } glEnd();}void display(){ glClearColor(1,1,1,1); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1,0,0); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glutSwapBuffers();}void reshape(int w,int h){ glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-10,10,-10,10);}int main(int argc,char**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(400,400); glutInitWindowPosition(100,100); glutCreateWindow("扫描转换圆"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0;}实验三 反走样及五环的绘制一、【实验目的】1.了解走样和反走样的容,熟练掌握用opengl实现图形的反走样。
2.学会用反走样消除走样现象3.学会五环的绘制方法二、【实验容】1.通过学习反走样相关课程,用opengl实现光栅图形的反走样2.绘制五环三、【测试数据及其结果】四、【实验源代码】反走样:#include#pragma ment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")GLuint lineList; //指定显示列表void Initial(){ glClearColor(,,,); glLineWidth(); glColor4f(0.0,0.6,1.0,1.0); lineList=glGenLists(1); //获得一个显示列表标识 glNewList(lineL。