计算机图形学实验报告范文_第1页
计算机图形学实验报告范文_第2页
计算机图形学实验报告范文_第3页
计算机图形学实验报告范文_第4页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机图形学实验报告范文 计算机图形学实验报告 姓名:_ _ 学号:_ _ 班级:_ _ 时间:_20xx 年 xx 月_ 实验一 opengl 编程与图形绘制 1实验目的 了解 opengl 编程,并熟悉 opengl 的主要功能、绘制流程和基本语法。学会配置opengl 环境,并在该环境中编程绘图。 2实验内容 opengl 的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实时动画和交互技术。 opengl 的绘制流程分为两个方面:一个完整的窗口系统的 opengl 图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四

2、层为 opengl,最上面的层为应用软件;opengl 命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。 opengl 的基本语法中相关库有:opengl 核心库:gl、opengl 实用程序库: glu、openg编程辅助库:aux、opengl 实用程序工具包(opengl utility toolkit,glut):glut、windows专用库:wgl。 opengl 的基本语法中命名规则为:opengl 函数都遵循一个命名约定,即采用以下格式:lt;库前缀gt;lt;根命令gt;l

3、t;可选的参数个数gt;lt;可选的参数类型gt;。 了解了上述基础知识后,配置好 opengl 环境,然后在该环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制 。 3实验代码及结果 3.1 点的绘制: #includelt;gl/glut.hgt; 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 display

4、(void) glclear(gl_color_buffer_bit); /用当前背景颜色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红 / glrectf(50.0f,100.0f,150.0f,50.0f); /绘制一个矩形 glpointsize(10); /三个点 glbegin(gl_points); glcolor3f(1.0f,0.0f,0.0f); glvertex2i(2,148); glvertex2i(100,75); glvertex2i(198,2); glend(); glflush(); /清空 opengl 命令缓冲区,

5、执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); glutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的显示模式 glutinitwindowsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形quot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完

6、成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 运行结果: 3.2 直线的绘制: #includelt;gl/glut.hgt; 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 display(void) glclear(gl_color_buffer_bit); /用当前背景颜色填充窗口

7、 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 / glrectf(50.0f,100.0f,150.0f,50.0f); /绘制一个矩形 glbegin(gl_line_loop); /五角星 glvertex2i(10,10); glvertex2i(30,35); glvertex2i(50,10); glvertex2i(5,25); glvertex2i(55,25); glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(am

8、p;argc,argv); glutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的显示模式 glutinitwindowsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形quot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 运行

9、结果: 3.3 多边形面的绘制: #includelt;gl/glut.hgt; 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 display(void) glclear(gl_color_buffer_bit); /用当前背景颜色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 / glrectf

10、(50.0f,100.0f,150.0f,50.0f); /绘制一个矩形 glbegin(gl_triangles); /等边三角形 glvertex2f(0.0,0.0); glvertex2f(15,25.95); glvertex2f(30,0); glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); glutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的显示模式 glutinitwindo

11、wsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形quot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 运行结果: 实验二 直线绘制实验 1. 实验目的 为了进一步熟悉 opengl 编程,了解基本图形生成算法中的直线绘制,学会直线绘制算法中最常用的三种算法:数值微分法、

12、中点画线算法和 bresenham 算法。 2. 实验内容 (一)数值微分法 数值微分法直接从直线的微分方程生成直线。给定直线的两端点:p0(x0,y0)和p1(x1,y1),得到直线的微分方程 dy/dx=y/x=(y1-y0)/(x1-x0)=k。 数值微分算法的原理是,由于直线的一阶导数是连续的,而且x 和y 是成比例的,因此通过在当前位置(xi,yi)分别加上两个小增量x 和y(为无穷小的正数)来 求下一点(x(i+1),y(i+1))的 x,y 坐标。 (二)中点画线算法 给定直线的两端点:p0(x0,y0)和 p1(x1,y1),可得到直线方程 f(x,y)=y-kx-b=0 且

13、k=y/x=(y1-y0)/(x1-x0)。 绘图过程如下: 1 .输入直线的两端点 p0(x0,y0)和 p1(x1,y1)。 2 .计算初始值x, y,d=x-2y,x=x0,y=y0. 3 .绘制点(x,y)。判断 d 的符号,若 dlt;0,则(x,y)更新为(x+1,y+1),d 更新为 d+2x-2y;否则(x,y)更新为(x+1,y),d 更新为y。 4 .当直线没有画完时,重复步骤 3 ,否则结束。 (三)bresenham 算法 算法步骤如下: 1 .输入直线两端点 p0(x0,y0)和 p1(x1,y1)。 2 .计算初始值x, y,e=-x,x=x0,y=y0。 3 .绘

14、制点(x,y)。 4 .e 更新为 e+2y。判断 e 的符号,若 egt;0,则(x,y)更新为(x+1,y+1),同样将 e 更新为e-2x;否则(x,y)更新为(x+1,y)。 5 .当直线没有画完时,重复步骤 3 和 4 ;否则结束。 3. 实验代码及结果 3.1 数值微分算法编程绘制直线代码: #includelt;gl/glut.hgt; #includelt;windows.hgt; void initial(void) glclearcolor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色 glmatrixmode(gl_projection); /指定

15、设置投影参数 gluortho2d(0.0,200.0,0.0,150.0); /设置投影参数 void display(void) glclear(gl_color_buffer_bit); /用当前背景颜色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 glbegin(gl_lines); int x0=10;int y0=20;int x1=30;int y1=40;int color=10; int dx,dy,epsl,k; float x,y,xincre,yincre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; /

16、 if(abs(dx)gt;abs(dy) epsl=abs(dx); else epsl=abs(dy); xincre=(float)dx/(float)epsl; yincre=(float)dy/(float)epsl; for(k=0;klt;=epsl;k+) glvertex2i(int(x+0.5),(int)(y+0.5); x+=xincre; y+=yincre; glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); g

17、lutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的显示模式 glutinitwindowsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形quot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 实验结果: 2.2 中点画线算法编

18、程绘制直线代码: #includelt;gl/glut.hgt; #includelt;windows.hgt; 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 display(void) glclear(gl_color_buffer_bit); /用当前背景颜色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘

19、图颜色为红色 glbegin(gl_points); int x0=50;int y0=20;int x1=100;int y1=120;int color=10; int dx,dy,d,upincre,downincre,x,y; if(x0gt;x1) x=x1;x1=x0;x0=x; y=y1;y1=y0;y0=y; x=x0;y=y0; dx=x1-x0;dy=y1-y0; d=dx-2*dy; upincre=2*dx-2*dy; downincre=2*dy; while(xlt;=x1) glvertex2i(x,y); x+; if(dlt;0) y+; d+=upincre

20、; else d+=downincre; glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); glutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的显示模式 glutinitwindowsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形quot;); /创建一个名为矩形

21、的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 实验结果: 2.3bresenham 算法编程绘制直线代码: #include lt;gl/glut.hgt; #include lt;windows.hgt; void initial(void) glclearcolor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色 glmatrixmode(gl_projection); /指定设置投影参数 gluo

22、rtho2d(0.0,200.0,0.0,150.0); /设置投影参数 void display(void) glclear(gl_color_buffer_bit); /用当前背景色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 /bresenham 算法 glbegin(gl_points); int x0 = 10;int y0 = 20;int x1 = 90;int y1 = 90;int color=10; int x,y,dx,dy,e; dx = x1-x0;dy = y1-y0; e=-dx;x=x0;y=y0; while(xl

23、t;=x1) glvertex2i(x,y); x+; e=e+2*dy; if(egt;0) y+; e=e-2*dx; glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); glutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的现实模式 glutinitwindowsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,200); /设置窗口的位置

24、 glutcreatewindow(quot;点quot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示函数 initial(); /完成窗口的初始化 glutmainloop(); /启动主 glut 事件处理循环 return 0; 实验结果: 实验三 圆绘制实验 1. 实验目的 2. 实验内容 (一) 八分法画圆 圆心位于原点的圆有 4 条对称轴 x=0,y=0,y=x,y=-x。若已知圆上任一点(x,y),可以得到其在圆周上关于四条对称轴的另外 7 个点(y,x),(-x,y),(-x,-y),(-y,-x),(y,-x),(x

25、,-y)。 (二) 中点 bresenham 画圆算法 算法步骤如下: 1 输入圆的半径 r 2 计算初始值 d=1-r,x=0,y=r。 3 绘制点(x,y)及其在八分圆中的另外 7 个对称点。 4 判断 d 的符号。若 dlt;0,则先将 d 更新为 d+2x+3,再将(x,y)更新为(x+1,y);否则先将d 更新为 d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。 5 当 xlt;y 时,重复步骤 3 和 4 ;否则结束。 (三) 椭圆的中点 bresenham 算法 算法步骤如下: 1 输入椭圆的长半轴 a 和短半轴 b。 2 计算初始值 d=b2+a2(-b+0.25

26、),x=0,y=b。 3 绘制点(x,y)及其在四分象限上的另外三个对称点。 4 判断 d 的符号。若 dlt;=0,则先将 d 更新为 d+b2(2x+3),再将(x,y)更新为(x+1,y);否则先将 d 更新为 d+b2(2x+3)+a2(-2y+2),再将(x,y)更新为(x+1,y-1)。 5 当 b2(x+1)lt;a2(y-0.5)时,重复步骤3 和4 ;否则转到步骤6 。 6 用 上 半 部 分 计 算 的 最 后 点 (x,y) 来 计 算 下 半 部 分 中 d 的 初 值d=b2(x+0.5)2+a2(y-1)2-a2b2 7 绘制点(x,y)及其在四分象限上的另外三个对

27、称点。 8 判断 d 的符号。若 dlt;=0,则先将 d 更新为 d+b2(2x+2)+a2(-2y+3),再将(x,y)更新为(x+1,y-1);否则先将 d 更新为 d+a2(-2y+3),再将(x,y)更新为(x,y-1)。 9 当 ygt;=0 时,重复步骤7 和8 ;否则结束。 3. 实验代码及结果 3.1 八分法画圆程序代码: #includelt;gl/glut.hgt; #includelt;windows.hgt; void initial(void) glclearcolor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色 glmatrixmode(

28、gl_projection); /指定设置投影参数 gluortho2d(0.0,200.0,0.0,150.0); /设置投影参数 void circlepoint(int x,int y,int color) glvertex2i(x+50,y+50); glvertex2i(y+50,x+50); glvertex2i(-y+50,x+50); glvertex2i(-x+50,y+50); glvertex2i(-x+50,-y+50); glvertex2i(-y+50,-x+50); glvertex2i(y+50,-x+50); glvertex2i(x+50,-y+50); v

29、oid display(void) glclear(gl_color_buffer_bit); /用当前背景颜色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 glpointsize(10); glbegin(gl_points); circlepoint(10,20,20); glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); glutinitdisplaymode(glut_single|gl

30、ut_rgb); /初始化窗口的显示模式 glutinitwindowsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形quot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 实验结果: 3.2 中点 bresenham 算法绘制圆代码 #includelt;gl/glut.

31、hgt; #includelt;windows.hgt; 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 circlepoint(int x,int y,int color) glvertex2i(x+50,y+50); glvertex2i(y+50,x+50); glvertex2i(-y+50,x+50); glvertex2i(-x+

32、50,y+50); glvertex2i(-x+50,-y+50); glvertex2i(-y+50,-x+50); glvertex2i(y+50,-x+50); glvertex2i(x+50,-y+50); void midbresenhamcircle(int r,int color) int x,y,d; x=0;y=r;d=1-r; while(xlt;=y) circlepoint(x,y,color); if(dlt;0) d+=2*x+3; else d+=2*(x-y)+5; y-; x+; void display(void) glclear(gl_color_buff

33、er_bit); /用当前背景颜色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 glpointsize(3); glbegin(gl_points); midbresenhamcircle(20,10); glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); glutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的显示模式 glutinitwindows

34、ize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形quot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 实验结果: 3.3 中点 bresenham 算法绘制椭圆代码: #includelt;gl/glut.hgt; #includelt;windows.hgt; void

35、initial(void) glclearcolor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色 glmatrixmode(gl_projection); /指定设置投影参数 gluortho2d(0.0,200.0,0.0,150.0); /设置投影参数 void midbresenhamellipse(int a,int b,int color) int x,y; float d1,d2; x=0;y=b; d1=b*b+a*a*(-b+0.25); glvertex2i(x+50,y+50); glvertex2i(-x+50,-y+50); glvertex2

36、i(-x+50,y+50); glvertex2i(x+50,-y+50); while(b*b*(x+1)lt;a*a*(y-0.5) if(d1lt;=0) d1+=b*b*(2*x+3); x+; else d1+=b*b*(2*x+3)+a*a*(-2*y+2); x+;y-; glvertex2i(x+50,y+50); glvertex2i(-x+50,-y+50); glvertex2i(-x+50,y+50); glvertex2i(x+50,-y+50); d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)-a*a*b*b; while(ygt;0) if(d2

37、lt;=0) d2+=b*b*(2*x+2)+a*a*(-2*y+3); x+;y-; else d2+=a*a*(-2*y+3); y-; glvertex2i(x+50,y+50); glvertex2i(-x+50,-y+50); glvertex2i(-x+50,y+50); glvertex2i(x+50,-y+50); void display(void) glclear(gl_color_buffer_bit); /用当前背景颜色填充窗口 glcolor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 glpointsize(3); glbegin(gl_poi

38、nts); midbresenhamellipse(40,25,10); glend(); glflush(); /清空 opengl 命令缓冲区,执行 opengl 程序 int main(int argc,char*argv) glutinit(amp;argc,argv); glutinitdisplaymode(glut_single|glut_rgb); /初始化窗口的显示模式 glutinitwindowsize(400,300); /设置窗口的尺寸 glutinitwindowposition(100,120); /设置窗口位置 glutcreatewindow(quot;矩形q

39、uot;); /创建一个名为矩形的窗口 glutdisplayfunc(display); /设置当前窗口的显示回调函数 initial(); /完成窗口初始化 glutmainloop(); /完成窗口 glut 事件处理循环 return 0; 实验结果: 实验四 填充算法实验 1. 实验目的 掌握用扫描线种子填充法,实现扫描线种子填充算法填充任一多边形区域的程序 2. 实验内容 算法步骤如下: (1)种子像素入栈。 (2)执行如下三步操作: 1 栈顶像素出栈。 2 填充出栈像素所在扫描线的连续像素段,从出栈的像素开始沿扫描线向左和向右填充,直到遇到边界像素为止,即每出栈一个像素,就对包含

40、该像素的整个扫描线区间进行填充, 并且记录下此时扫描线区间的 x 坐标范围x1,x2。 3 分别检查上、下两条扫描线上位于x1,x2坐标区间内的未被填充的连续水平像素段,将每个连续像素段的最左像素取作种子像素压人栈堆。 (3)检查栈是否为空,若栈非空重复执行步骤(2),若栈为非空则结束。 3. 实验代码及结果 代码: #include quot;gl/glut.hquot; #include quot;math.hquot; #include quot;stdlib.hquot; #include quot;conio.hquot; #include lt;stackgt; typedef f

41、loat color3; struct point glint x; glint y; ; std:stacklt;pointgt; stk; void init(void) glclearcolor(1.0,1.0,1.0,1.0);/set display-window color white. glmatrixmode(gl_projection); gluortho2d(0.0,400.0,0.0,400.0); void setpixel(glint x,glint y);/种子像素坐标 void setpixel(point cur_point) glbegin(gl_points

42、); glvertex2i(cur_point.x,cur_point.y); glend(); glflush(); void getpixel(point cur_point,color c) glreadpixels(cur_point.x,cur_point.y,1,1,gl_rgb,gl_float,c); bool rgbcolorequal(color c1,color c2) /c1 颜色数据与 c2 颜色数据,当正负误差不超过 0.0001 时,返回值为 1,否则为 0 if(abs(c10-c20)gt;0.001)|(abs(c11-c21)gt;0.001)|(abs(

43、c12-c22)gt;0.001) return 0; else return 1; int filllineregion(point cur_point,color fillcolor,color bordercolor,int direction) int count=0; color interiorcolor; glcolor3f(fillcolor0,fillcolor1,fillcolor2); getpixel(cur_point,interiorcolor); while(!(rgbcolorequal(interiorcolor,bordercolor)amp;amp;!(r

44、gbcolorequal(interiorcolor,fillcolor) /这个判断保证读取的像素的颜色数据与边界颜色还有填充颜色数据在数值上相差较大 /即当正读取像素不是多边形边界,且也没有被填充,则执行以下花括号内的操作 setpixel(cur_point); /setcolot of pixel to fillcolor. /为坐标为(x,y)的像素上色 if(direction=0) cur_point.x+; else cur_point.x-; getpixel(cur_point,interiorcolor); count+; return count; int ispixe

45、lvalid(point cur_point,color fillcolor,color bordercolor) color interiorcolor; getpixel(cur_point,interiorcolor); if(!(rgbcolorequal(interiorcolor,bordercolor)amp;amp;!(rgbcolorequal(interiorcolor,fillcolor) return 1; else return 0; void searchlinenewseed(int xleft,int xright,int y,color fillcolor,c

46、olor bordercolor)/在种子像素所在扫描线上一条或下一条是扫描线寻找新种子像素 int xt=xleft; int seed_left=-1; point seed_point; point temp_point; while(xtlt;=xright) seed_left=-1; temp_point.x=xt; temp_point.y=y; while(xtlt;=xright) /find the first valid point if(ispixelvalid(temp_point,fillcolor,bordercolor) seed_left=temp_point

47、.x; break; else xt+; temp_point.x=xt; while(xtlt;=xright) /find the next invalid point if(ispixelvalid(temp_point,fillcolor,bordercolor) xt+; temp_point.x=xt; else break; if(seed_left!=-1) seed_point.x=seed_left; seed_point.y=y; stk.push(seed_point); void scanline(point cur_point,color fillcolor,color bordercolor) int count=0; int right,left; point temp_point; while(!stk.empty() point seed_point=stk.top(); stk.pop(); /种子像素出栈 count=filllineregion(seed_point,fillcolor,bordercolor,0);/填充种子像素所在的扫描线右边 right=seed_point.x+count-1; temp_point.x=seed_point.x-1; temp_point.y=seed_point

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论