- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二OpenGL颜色填充
实验二、OpenGL颜色填充
1、 实验目的
1)了解OpenGL 图形库的功能和结构;
2)学习了解OpenGL 程序的基本结构,及常用函数;
3)学习使用OpenGL 颜色填充算法;
2、 实验内容
1)使用OpenGL 编写一个简单的C++程序,使该程序能够填充多边形和圆等图形。
2 )使用OpenGL 编写一个简单的C++程序,使该程序能够填充已填充过的图形。
3、 实验过程
1)在系统上配置好OpenGL的环境(头文件,库文件,和链接库文件);
2)使用Visual V++6.0 新建一个C++文档,并创建相应的工程;
3)在文档中引入OpenGL的头文件,编辑代码实现:对不同图形的不同颜色填充。
4、 实验结果
可单击鼠标左键,填充选中的图形;
可单击鼠标右键,调出菜单,可改变填充颜色,可恢复为填充状态。
结果截图:
初始状态:
填充多边形:
调出菜单,选择颜色:
填充圆形:
填充已填充的图形:
5、 实验代码
#include stdio.h
#include GL/glut.h
#include math.h
#include windows.h
////////////程序还有问题,不知如何解决
////////圆周率
const GLfloat Pi = 3.1415926536f;
///////////窗口长宽
GLfloat WinWidth=600.0, WinHeight=600.0;
//////////种子点
GLint fillx,filly;
////////填充色
GLubyte fillColor[3]={255,0,255};
/////////判定点色
GLubyte Pixel[3];
/////////取点色
GLubyte OldColor[3];
//////////绘制初始化
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 1.0) ;
glViewport(0,0,WinWidth,WinHeight);
glMatrixMode(GL_PROJECTION);
///////调用单位矩阵,去掉以前的投影参数设置
glLoadIdentity();
gluOrtho2D(0.0, WinWidth, 0.0, WinHeight);
}
//////////比较颜色是否相同
bool EqualColor(GLubyte c1[],GLubyte c2[]){
if(c1[0]==c2[0]c1[1]==c2[1]c1[2]==c2[2])
return true;
else return false;
}
///////////填充点色
void setPixel(GLint x,GLint y){
glColor3f(fillColor[0], fillColor[1], fillColor[2]);
glBegin(GL_POINTS);
glVertex3f(x,y,0.0);
glEnd();
}
//////////////种子填充函数,四联通,递归
void fill(GLint x, GLint y){
glReadPixels(x,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);
if(EqualColor(fillColor,OldColor))
return;
setPixel(x,y);
//Sleep(1);
glReadPixels(x,y-1,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);
if(EqualColor(Pixel,OldColor))
{fill(x,y-1);
}
glReadPixels(x-1,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);
if(EqualColor(Pixel,OldColor))
{fill(x-1,y);
}
glReadPixels(x+1,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);
if(EqualColor(Pixel,OldColor))
{fill(x+1,y);
}
glReadPixels(x,y+1,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);
if(EqualColor(Pixel,OldColor))
{fill(x,y+1);
}
//////////
return;
}
///////////////////画圆函数
文档评论(0)