实验二OpenGL颜色填充.docVIP

  • 59
  • 0
  • 约4.86千字
  • 约 12页
  • 2017-12-13 发布于河南
  • 举报
实验二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)

1亿VIP精品文档

相关文档