实验二OpenGL颜色填充Word格式.docx
- 文档编号:8170971
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:9
- 大小:89.54KB
实验二OpenGL颜色填充Word格式.docx
《实验二OpenGL颜色填充Word格式.docx》由会员分享,可在线阅读,更多相关《实验二OpenGL颜色填充Word格式.docx(9页珍藏版)》请在冰点文库上搜索。
stdio.h"
2.#include<
GL/glut.h>
3.#include<
math.h>
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);
149.case3:
setFillColor(0,0,255);
150.case4:
setFillColor(255,255,0);
151.case5:
setFillColor(255,0,255);
152.case6:
setFillColor(0,255,255);
153.case7:
setFillColor(0,0,0);
154.case8:
setFillColor(255,255,255);
155.case9:
glutPostRedisplay();
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.}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 OpenGL 颜色 填充
![提示](https://static.bingdoc.com/images/bang_tan.gif)