资源描述:
《计算机图形学实验报告(一)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验一OpenGL开发环境及扫描转换算法1、实验目的与要求1.通过实验掌握OpenGL中编程环境的设置,了解相关函数用途及设置步骤;2.通过实验掌握基本图形元素的生成,给出相关代码和运行结果;3.用WINDOWSGDI函数编写生成直线或区域填充的程序(选DDA或Bresenham直线算法,活性边表算法填充多边形),演示算法过程。4.画矩形,调用一个函数画一个矩形。画椭圆,调用一个函数画一个椭圆。画Bezier曲线。2、实验方案请描述为达到实验的需要完成哪些方面的实验,列举出实验的基本要点和重点。在工程W
2、inAPIEX加入voidcreateLine(HDCtmpDC)和voidPolyline(tmpDC)在voidcreateLine(HDCtmpDC)用DDA直线算法或Bresenham直线算法生成直线在voidPolyline(tmpDC)添加活泩边表填充算法,生成填充四边形和八边形加入Rectangle(tmpDC,x0,y0,x1,y1);加入Ellipse(tmpDC,x0,y0,a,b);加入PolyBezier(tmpDC,arr_vertex,4);3、实验结果和数据处理1)生成直线
3、的DDA直线算法在createLine(tmpDC)中加入以下代码intx0,y0,x1,y1,color;//自定义直线的起点(x0,y0)和终点(x1,y1),及颜色colorfloatdx,dy,x,y;intlength,i;x0=50;y0=160;x1=900;y1=200;//此处修改了color=1000;color=1;if(abs(x1-x0)>=abs(y1-y0))length=abs(x1-x0);elselength=abs(y1-y0);dx=(x1-x0)/(float)
4、length;dy=(y1-y0)/(float)length;i=1;x=(float)x0;y=(float)y0;while(i<=length){SetPixel(tmpDC,int(x+0.5),int(y+0.5),color);x+=dx;y+=dy;i++;}2)区域填充的程序在voidPolyline(tmpDC)添加活性边表填充voidPolyline(HDCtmpDC)//多边形边数.{constintPOINTNUM=4;//或者是八边形8/******定义结构体用于活性边表AE
5、T和新边表NET***********************************/typedefstructXET{floatx;floatdx,ymax;XET*next;}AET,NET;/******定义点结构体point******************************************************/structpoint{floatx;floaty;}polypoint[POINTNUM]={100,100,400,100,400,400,100,400};/
6、/正方形//polypoint[POINTNUM]={600,100,700,100,800,200,800,300,700,400,600,400,500,300,500,200};//八边形顶点/******计算最高点的y坐标(扫描到此结束)****************************************/intMaxY=0;inti;for(i=0;iMaxY)MaxY=(int)polypoint[i].y;/***
7、****初始化AET表***********************************************************/AET*pAET=newAET;pAET->next=NULL;/******初始化NET表************************************************************/NET*pNET[1024];for(i=0;i<=MaxY;i++){pNET[i]=newNET;pNET[i]->next=NULL;}/****
8、**扫描并建立NET表*********************************************************/for(i=0;i<=MaxY;i++){for(intj=0;jpolypoint[j].y){NET*p=newNET;p->x=polypoint[