OpenGL实现边缘填充算法
边缘填充的思想:枚举每一条边,对这条边右边的像素进行求补操作,就是有填充则去掉,无填充就进行填充
#include#include #include #include #include #include usingnamespacestd; intx[]={10,70,70,60,40,30,20}; inty[]={10,10,50,40,60,20,30}; intvis[500][500];//判断该坐标的点是否存在 voidinit() { glClearColor(0.0,0.0,0.0,0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } voidMidBresenhamCircle() { memset(vis,0,sizeof(vis)); glClear(GL_COLOR_BUFFER_BIT); glLineWidth(2); glBegin(GL_LINES);//绘制多边形形状 for(inti=0;i<7;++i) { glVertex2i(x[i],y[i]); glVertex2i(x[(i+1)%7],y[(i+1)%7]); } glEnd(); glFlush(); glPointSize(2); glBegin(GL_POINTS); for(inti=x[1],j=y[1];i<300;++i)//特殊处理k=0的边 { if(!vis[i][j]) { glColor3f(0.0f,1.0f,0.0f); glVertex2i(i,j); vis[i][j]=1; } else { glColor3f(0.0f,0.0f,0.0f); glVertex2i(i,j); vis[i][j]=1; } } for(intj=y[1];j<=y[2];++j)//特殊处理k不存在的边 { for(inti=x[1];i<300;++i) { if(!vis[i][j]) { glColor3f(0.0f,1.0f,0.0f); glVertex2i(i,j); vis[i][j]=1; } else { glColor3f(0.0f,0.0f,0.0f); glVertex2i(i,j); vis[i][j]=1; } } } for(intp=2;p<7;++p) { intk=(y[(p+1)%7]-y[p])/(x[(p+1)%7]-x[p]);//求出斜率 intx1=x[(p+1)%7],x0=x[p],y1=y[(p+1)%7],y0=y[p];//根据斜率推导出这条直线的各个点 if(y1 效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。