`
mmdev
  • 浏览: 12919903 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

计算机图形学 8连通边界填充算法

 
阅读更多
首先,

安装配置GLUT

OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。

下载“glut.zip”文件(我提供的资源中有)

将压缩包内的glut.h拷贝到...\\MicrosoftVisualStudio\\VC98\\Include\\GL目录下(若使用win7和vs2008则拷贝到C:\ProgramFiles\MicrosoftSDKs\Windows\v6.0A\Include\gl)

将glut32.lib拷贝到...\\MicrosoftVisualStudio\\VC98\\Lib目录下(若使用win7vs2008,则拷贝到…\\MicrosoftVisualStudio9.0\VC\lib);

将glut32.dll拷贝到c:\\windows\\system32目录下(win7vs2008配置过程相同)

OpenGL建立了四个库:

OpenGL的基本库(GL):库文件:opengl32.lib,头文件:gl.h

OpenGL实用库(GLU):库文件:glu32.lib,头文件:glu.h

OpenGLProgrammingGuide辅助库(glaux):库文件:glaux.lib,头文件:glaux.h

OpenGL的工具库(glut):库文件:glut32.lib,头文件:glut.h

(l)新建一个项目:

选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32ConsoleApplication项,然后填入你自己的Projectname,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。

(2)为项目添加文件

为了使用OpenGL,我们需要在项目中加入四个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib、glut32.Lib这四个文件位于\\MicrosoftVisualStudio\vc98\lib目录中。选中菜单Project->AddToProject->Files项,把这四个文件加入项目,在FileView中会有显示。或者将这四个文件名添加到Project->Setting->Link->Object/libraryModules即可。

点击工具条中NewTextFile按钮,新建一个文本文件,存盘为Test.cpp作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。

代码如下:


#include <GL/glut.h>
#include <math.h>
typedef float Color[3];
rgbColorEqual(Color c1,Color c2)
{
if(abs(c1[1]-c2[1])<0.001 && abs(c1[2]-c2[2])<0.001 && abs(c1[0]-c2[0])<0.001)
return true;
else
return false;
}
void setPixel(GLint x, GLint y)
{
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}
void getPixel(GLint x, GLint y, Color c)
{
glReadPixels(x,y,1,1,GL_RGB,GL_FLOAT,c);
}

void BoundaryFill8(int x, int y,Color fillColor,Color borderColor)
{
Color currentColor;
getPixel(x,y,currentColor);
if((!rgbColorEqual(currentColor,fillColor))&&(!rgbColorEqual(currentColor,borderColor)))
{
//setColor(fillColor);
setPixel(x,y);
BoundaryFill8( x+1, y, fillColor, borderColor);
BoundaryFill8( x+1, y+1, fillColor, borderColor);
BoundaryFill8( x+1, y-1, fillColor, borderColor);
BoundaryFill8( x-1, y, fillColor, borderColor);
BoundaryFill8( x-1, y-1, fillColor, borderColor);
BoundaryFill8( x-1, y+1, fillColor, borderColor);
BoundaryFill8( x, y, fillColor, borderColor);
BoundaryFill8( x, y+1, fillColor, borderColor);
BoundaryFill8( x, y-1, fillColor, borderColor);

}


}
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 200.0);

}
void Draw(void)
{
Color a={0.0,0.0,1.0},b={0.0,1.0,1.0};
glColor3fv(b);
glClear(GL_COLOR_BUFFER_BIT);
//设置边界线宽,否则填充时会溢出
glLineWidth(4.0);
//绘制多边形区域
glBegin(GL_LINE_LOOP);
glVertex2i(90, 40);
glVertex2i(120, 100);
glVertex2i(90, 160);
glVertex2i(60, 160);
glVertex2i(60, 40);
glEnd();
glColor3fv(a);
BoundaryFill8(70,60,a,b);
glFlush();
}
void main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(200, 200);
glutCreateWindow("8连通边界填充算法!");
init();
glutDisplayFunc(Draw);
glutMainLoop();
}

即可填充满多边形。

分享到:
评论

相关推荐

    计算机图形学 边界定义的8连通区域的种子填充算法

    计算机图形学 边界定义的8连通区域的种子填充算法 计算机图形学 边界定义的8连通区域的种子填充算法 计算机图形学 边界定义的8连通区域的种子填充算法

    计算机图形学 边界定义的8连通区域的种子填充算法源代码

    计算机图形学 边界定义的8连通区域的种子填充算法源代码 计算机图形学 边界定义的8连通区域的种子填充算法源代码

    计算机图形学OpenGL、codeblock、边界填充算法

    实验二 (选做)种子填充算法 (选做)扫描线算法

    openGl填充算法

    描述了OpenGL实现4连通递归填充算法

    扫描线填充算法

    基于扫描线填充算法编写的程序。适用于计算机图形学研究人员。运行平台vs2008。

    计算机图形学 种子填充算法 MFC、VC

    种子填充算法,自己写的,希望对大家有用 // 种子法View.cpp : implementation of the CMyView class // #include "stdafx.h" #include "种子法.h" #include "种子法Doc.h" #include "种子法View.h" #ifdef _...

    四连通填充算法图形学

    计算机图形学实验 基于c++6.0的MFC类库实现的单界面程序源代码四连通

    计算机图形学—多边形扫描与填充

    包含了AET扫描算法、边界填充法、四连通种子算法

    tuxing.zip_4连通_easyx画线_区域填充_种子区域填充_种子填充

    计算机图形学--区域填充算法的实现 一、实验目的和要求: 1、掌握区域填充算法基本知识 2、理解区域的表示和类型,能正确区分四连通和八连通的区域 3、了解区域填充的实现原理,利用Microsoft Visual C++ 6.0(及...

    橡皮筋画边界,右键点击闭合,四连通种子填充。

    橡皮筋算法画边界,右键点击闭合。四连通种子填充区域。可以改变 边界,以及填充颜色。

    八后递归算法(C++)

    用来解决八后问题,递归的典型用法!得到所有解! 以下是第一个解: NO....┌─┬─┬─┬─┬─┬─┬─┬─┐ │0│ │ │ │ │ │ │ │ ├─┼─┼─┼─┼─┼─┼─┼─┤ │ │ │ │ │4│ │ │ │ ...

    基于扫描线区域填充算法

    基于扫描线区域填充算法,大家可以参考一下,开发一下思路。

    华东《计算机图形学》2017年春学期在线作业(一).doc

    利用种子填充算法实现多边形填充时,边界和内点的连通性要求是〔 〕. A. 内点为4连通时,边界必须为4连通 B. 内点为4连通时,边界必须为8连通 C. 内点为8连通时,边界必须为4连通 D. 内点为8连通时,边界必须为8连通 ...

    计算机图形学作业.doc

    (10分)图中已知种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺 序给出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. (10分)名词解释:...

    基于VC++的等值线追踪与填充算法 (2011年)

    针对传统绘制等值线算法用于追踪生成及颜色填充等值线图效率不高的问题,对传统网格追踪及区域填充算法进行改进,提出优化的追踪算法及基于边界点追踪的区域填充算法。通过描述等值线的数据结构、选取等值点实现了优化...

    计算机图形学作业36归纳.doc

    〔10分〕图中种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺序给 出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. 〔10分〕名词解释:坐标...

    计算机图形学作业3-6.doc

    (10分)图中已知种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺 序给出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. (10分)名词解释:...

    计算机图形学作业3-6(1).doc

    〔10分〕图中种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺序给 出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. 〔10分〕名词解释:坐标...

    【9A文】计算机图形学作业3-6.doc

    (10分)图中已知种子O,试根据简单四连通种子填充算法按左、上、右、下入栈的顺 序给出象素点填充的次序。 " " " " " " " " "3 "O "4 "5 " " " "2 "1 " "6 " " " " " " " " " 第五章作业 1. (10分)名词解释:...

Global site tag (gtag.js) - Google Analytics