计算机图形学 8连通边界填充算法
2011-11-01 22:50
323 查看
首先,
安装配置GLUT库:
OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。
下载“glut.zip”文件(我提供的资源中有)
将压缩包内的glut.h拷贝到...\\Microsoft Visual Studio\\VC98\\ Include \\GL目录下(若使用win7和vs2008,则拷贝到C:\Program Files\Microsoft SDKs\Windows\v6.0A \Include\gl);
将glut32.lib拷贝到...\\Microsoft Visual Studio\\VC98\\Lib目录下(若使用win7和vs2008,则拷贝到…\\Microsoft Visual Studio 9.0\VC\lib);
将glut32.dll拷贝到c:\\windows\\system32目录下(win7和vs2008配置过程相同)。
OpenGL建立了四个库:
OpenGL的基本库(GL):库文件:opengl32.lib,头文件:gl.h
OpenGL实用库(GLU):库文件:glu32.lib,头文件:glu.h
OpenGL Programming Guide辅助库(glaux): 库文件:glaux.lib,头文件:glaux.h
OpenGL的工具库(glut): 库文件:glut32.lib,头文件:glut.h
(l)新建一个项目:
选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。
(2)为项目添加文件
为了使用OpenGL,我们需要在项目中加入四个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib、glut32.Lib这四个文件位于\\Microsoft Visual Studio\vc98\lib目录中。选中菜单Project->Add To Project->Files项,把这四个文件加入项目,在FileView中会有显示。或者将这四个文件名添加到Project->Setting->Link->Object/library Modules 即可。
点击工具条中New Text File按钮,新建一个文本文件,存盘为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();
}
即可填充满多边形。
安装配置GLUT库:
OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。
下载“glut.zip”文件(我提供的资源中有)
将压缩包内的glut.h拷贝到...\\Microsoft Visual Studio\\VC98\\ Include \\GL目录下(若使用win7和vs2008,则拷贝到C:\Program Files\Microsoft SDKs\Windows\v6.0A \Include\gl);
将glut32.lib拷贝到...\\Microsoft Visual Studio\\VC98\\Lib目录下(若使用win7和vs2008,则拷贝到…\\Microsoft Visual Studio 9.0\VC\lib);
将glut32.dll拷贝到c:\\windows\\system32目录下(win7和vs2008配置过程相同)。
OpenGL建立了四个库:
OpenGL的基本库(GL):库文件:opengl32.lib,头文件:gl.h
OpenGL实用库(GLU):库文件:glu32.lib,头文件:glu.h
OpenGL Programming Guide辅助库(glaux): 库文件:glaux.lib,头文件:glaux.h
OpenGL的工具库(glut): 库文件:glut32.lib,头文件:glut.h
(l)新建一个项目:
选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。
(2)为项目添加文件
为了使用OpenGL,我们需要在项目中加入四个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib、glut32.Lib这四个文件位于\\Microsoft Visual Studio\vc98\lib目录中。选中菜单Project->Add To Project->Files项,把这四个文件加入项目,在FileView中会有显示。或者将这四个文件名添加到Project->Setting->Link->Object/library Modules 即可。
点击工具条中New Text File按钮,新建一个文本文件,存盘为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();
}
即可填充满多边形。
相关文章推荐
- 计算机图形学——边缘填充算法和边界填充算法
- 4连通边界填充算法
- 非典型扫描线填充正方形的4-连通边界填充算法
- 计算机图形学三角形基元填充算法即三角形光栅化重心双线性插值算法
- 计算机图形学——直线生成算法
- 计算机图形学概况
- 计算机图形学期刊杂志列表
- 图像处理,计算机视觉,计算机图形学之间的区别
- 计算机图形学(循环菱形、循环嵌套矩形)
- 计算机图形学(一) 视频显示设备_3_随机扫描显示器
- 计算机图形学图形变换和投影变换
- 计算机图形学(二)中点画圆算法讲解与源代码
- 理解计算机3D图形学中的坐标系变换
- 计算机图形学知识点总结
- 计算机图形学—DDA直线生成算法
- 计算机图形学 窗口 视口 世界坐标
- 【计算机图形学】基本图形元素:圆的生成算法
- 计算机图形学与计算机视觉与数字图像处理之间的区别与联系
- 计算机图形学(二)输出图元_10_多边形填充区_5_平面方程
- 计算机图形学(二)输出图元_14_OpenGL像素阵列函数_3_光栅操作