实验二OpenGL颜色填充.docx

上传人:b****8 文档编号:11020765 上传时间:2023-02-24 格式:DOCX 页数:10 大小:86.27KB
下载 相关 举报
实验二OpenGL颜色填充.docx_第1页
第1页 / 共10页
实验二OpenGL颜色填充.docx_第2页
第2页 / 共10页
实验二OpenGL颜色填充.docx_第3页
第3页 / 共10页
实验二OpenGL颜色填充.docx_第4页
第4页 / 共10页
实验二OpenGL颜色填充.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验二OpenGL颜色填充.docx

《实验二OpenGL颜色填充.docx》由会员分享,可在线阅读,更多相关《实验二OpenGL颜色填充.docx(10页珍藏版)》请在冰豆网上搜索。

实验二OpenGL颜色填充.docx

实验二OpenGL颜色填充

实验二、OpenGL颜色填充

1、实验目的

1)了解OpenGL图形库的功能和结构;

2)学习了解OpenGL程序的基本结构,及常用函数;

3)学习使用OpenGL颜色填充算法;

2、实验内容

1)使用OpenGL编写一个简单的C++程序,使该程序能够填充多边形和圆等图形。

2)使用OpenGL编写一个简单的C++程序,使该程序能够填充已填充过的图形。

3、实验过程

1)在系统上配置好OpenGL的环境(头文件,库文件,和链接库文件);

2)使用VisualV++6.0新建一个C++文档,并创建相应的工程;

3)在文档中引入OpenGL的头文件,编辑代码实现:

对不同图形的不同颜色填充。

4、实验结果

可单击鼠标左键,填充选中的图形;

可单击鼠标右键,调出菜单,可改变填充颜色,可恢复为填充状态。

结果截图:

1.初始状态:

2.填充多边形:

3.调出菜单,选择颜色:

4.填充圆形:

5.填充已填充的图形:

 

5、实验代码

1.#include"stdio.h"

2.#include

3.#include

4.#include"windows.h"

5.

6.////////////程序还有问题,不知如何解决

7.////////圆周率

8.constGLfloatPi=3.1415926536f;

9.///////////窗口长宽

10.GLfloatWinWidth=600.0,WinHeight=600.0;

11.//////////种子点

12.GLintfillx,filly;

13.////////填充色

14.GLubytefillColor[3]={255,0,255};

15./////////判定点色

16.GLubytePixel[3];

17./////////取点色

18.GLubyteOldColor[3];

19.

20.//////////绘制初始化

21.voidinit(void)

22.{

23.glClearColor(1.0,1.0,1.0,1.0);

24.glViewport(0,0,WinWidth,WinHeight);

25.glMatrixMode(GL_PROJECTION);

26.///////调用单位矩阵,去掉以前的投影参数设置

27.glLoadIdentity();

28.gluOrtho2D(0.0,WinWidth,0.0,WinHeight);

29.}

30.//////////比较颜色是否相同

31.boolEqualColor(GLubytec1[],GLubytec2[]){

32.if(c1[0]==c2[0]&&c1[1]==c2[1]&&c1[2]==c2[2])

33.returntrue;

34.elsereturnfalse;

35.}

36.///////////填充点色

37.voidsetPixel(GLintx,GLinty){

38.glColor3f(fillColor[0],fillColor[1],fillColor[2]);

39.glBegin(GL_POINTS);

40.glVertex3f(x,y,0.0);

41.glEnd();

42.}

43.

44.//////////////种子填充函数,四联通,递归

45.voidfill(GLintx,GLinty){

46.glReadPixels(x,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);

47.if(EqualColor(fillColor,OldColor))

48.return;

49.setPixel(x,y);

50.//Sleep

(1);

51.

52.glReadPixels(x,y-1,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);

53.if(EqualColor(Pixel,OldColor))

54.{fill(x,y-1);

55.}

56.

57.glReadPixels(x-1,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);

58.if(EqualColor(Pixel,OldColor))

59.{fill(x-1,y);

60.}

61.

62.glReadPixels(x+1,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);

63.if(EqualColor(Pixel,OldColor))

64.{fill(x+1,y);

65.}

66.

67.glReadPixels(x,y+1,1,1,GL_RGB,GL_UNSIGNED_BYTE,Pixel);

68.if(EqualColor(Pixel,OldColor))

69.{fill(x,y+1);

70.}

71.//////////

72.return;

73.}

74.

75.///////////////////画圆函数

76.voidDrawCircle(GLintx,GLinty,GLfloatR,GLintn)

77.{

78.inti;

79.

80.glBegin(GL_LINE_LOOP);

81.for(i=0;i<=n;++i)

82.glVertex2f(R*cos(2*Pi/n*i)+x,R*sin(2*Pi/n*i)+y);

83.glEnd();

84.}

85.

86.voiddisplay(void)

87.{

88.glClear(GL_COLOR_BUFFER_BIT);

89.//////////画填充三角形

90.glColor3f(0,200,0);

91.glBegin(GL_TRIANGLES);

92.glVertex3f(150,50,0.0);

93.glVertex3f(250,50,0.0);

94.glVertex3f(250,150,0.0);

95.glEnd();

96.//////////画一个四角星

97.glColor3f(200,0,0);

98.glBegin(GL_LINE_LOOP);

99.glVertex3f(50,50,0.0);

100.glVertex3f(75,60,0.0);

101.glVertex3f(100,50,0.0);

102.glVertex3f(90,75,0.0);

103.glVertex3f(100,100,0.0);

104.glVertex3f(75,90,0.0);

105.glVertex3f(50,100,0.0);

106.glVertex3f(60,75,0.0);

107.glEnd();

108.///////////画一个多边形

109.glColor3f(0.0,0.0,0.9);

110.DrawCircle(150,100,50,8);

111./////////画一个近似圆

112.glColor3f(0.0,0.9,0.9);

113.DrawCircle(300,100,50,1000);

114.

115.glFlush();

116.

117.}

118.

119./////////////////鼠标点击

120.voidMousePlot(GLintbutton,GLintaction,GLintxMouse,GLintyMouse){

121.if(button==GLUT_LEFT_BUTTON&&action==GLUT_DOWN){

122.fillx=xMouse;

123.filly=WinHeight-yMouse;

124.glReadPixels(fillx,filly,1,1,GL_RGB,GL_UNSIGNED_BYTE,&Pixel);

125.OldColor[0]=Pixel[0];

126.OldColor[1]=Pixel[1];

127.OldColor[2]=Pixel[2];

128.///////////填充

129.fill(fillx,filly);

130.//printf("x:

%d,y:

%d-R:

%d,G:

%d,B:

%d\n",fillx,filly,Pixel[0],Pixel[1],Pixel[2]);

131.}

132.if(button==GLUT_RIGHT_BUTTON&&action==GLUT_UP){

133.glutPostRedisplay();

134.}

135.}

136.

137.voidsetFillColor(GLintR,GLintG,GLintB){

138.fillColor[0]=R;

139.fillColor[1]=G;

140.fillColor[2]=B;

141.}

142.

143.voidProcessMenu(intvalue)

144.{

145.//iMode=value;

146.switch(value){

147.case1:

setFillColor(255,0,0);break;

148.case2:

setFillColor(0,255,0);break;

149.case3:

setFillColor(0,0,255);break;

150.case4:

setFillColor(255,255,0);break;

151.case5:

setFillColor(255,0,255);break;

152.case6:

setFillColor(0,255,255);break;

153.case7:

setFillColor(0,0,0);break;

154.case8:

setFillColor(255,255,255);break;

155.case9:

glutPostRedisplay();break;

156.

157.}

158.//glutPostRedisplay();

159.}

160.

161.intmain(intargc,char**argv)

162.{

163.glutInit(&argc,argv);

164.glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

165.glutInitWindowSize(WinWidth,WinHeight);

166.glutInitWindowPosition(300,100);

167.glutCreateWindow("颜色填充");

168.init();

169.

170.////////////创建菜单并定义菜单回调函数/////////

171.////////创建填充颜色菜单

172.intnGlFillColor=glutCreateMenu(ProcessMenu);

173.glutAddMenuEntry("红(255,000,000)",1);

174.glutAddMenuEntry("绿(000,255,000)",2);

175.glutAddMenuEntry("蓝(000,000,255)",3);

176.glutAddMenuEntry("黄(255,255,000)",4);

177.glutAddMenuEntry("紫(255,000,255)",5);

178.glutAddMenuEntry("青(000,255,255)",6);

179.glutAddMenuEntry("黑(000,000,000)",7);

180.glutAddMenuEntry("白(255,255,255)",8);

181.//////////创建主菜单

182.intnMainMenu=glutCreateMenu(ProcessMenu);

183.glutAddSubMenu("填充颜色",nGlFillColor);

184.glutAddMenuEntry("恢复未填充",9);

185./////右键调出菜单

186.glutAttachMenu(GLUT_RIGHT_BUTTON);

187.

188.glutDisplayFunc(display);

189.//////调用鼠标点击函数

190.glutMouseFunc(MousePlot);

191.glutMainLoop();

192.

193.return0;

194.}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1