您的位置:首页 > 其它

填充

2016-04-21 17:45 316 查看
//#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#include<gl\glut.h>
#include<gl\GL.h>
#include<gl\glaux.h>
#include<iostream>

#include<gl\glut.h>
#include<math.h>
using namespace std;
#define PI 3.1415926
#define R 100
#define r 50
int a1[5];
int b1[5];
int a2[5];
int b2[5];

float *old_color = new float[3];
float *new_color = new float[3];
float *new_color2 = new float[3];
float *old_color2 = new float[3];

void Init() {
old_color[0] = 1;
old_color[1] = 1;
old_color[2] = 0;
new_color[0] = 1;
new_color[1] = 1;
new_color[2] = 1;

new_color2[0] = 0;
new_color2[1] = 0;
new_color2[2] = 1;

old_color2[0] = 1;
old_color2[1] = 0;
old_color2[2] = 1;
glClearColor(0, 1.0, 1, 1.0);
gluOrtho2D(-200, 200, 200, -200);
}

float *GetColor(int x, int y) {
float *color = new float[3];
glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color);
//cout << color[0] << " " << color[1] << " " << color[2] << endl;
return color;
}

void SetColor(int x, int y, float rc, float gc, float bc) {
glColor3f(rc, gc, bc);
glBegin(GL_POINTS);
/*if (x > 0&&y>0) {
glVertex2d(x - 200, y - 200);
}
else if(x<0&&y<0){
glVertex2d(x +200, y + 200);
}
else if (x<0 && y>0) {
glVertex2d(x + 200, y - 200);
}
else if (x>0 && y<0) {
glVertex2d(x - 200, y + 200);
}*/
glVertex2d(x , y );
cout << "hehhe" <<endl;
glEnd();
glFlush();
}

void FloodFill4(int x, int y, float old_color1[3] ,float new_color1[3])
{
float* color;
color =GetColor(x, y);
//cout << color[0] << " " << color[1] << " " << color[2] << endl;
//cout << old_color1[0] << " " << old_color1[1] << " " << old_color1[2] << endl;
if (color[0]==old_color1[0]&& color[1] == old_color1[1] && color[2] == old_color1[2])
{
cout << color[0] << " " << color[1] << " " << color[2] << endl;
cout << old_color1[0] << " " << old_color1[1] << " " << old_color1[2] << endl;

SetColor(x, y, new_color1[0], new_color1[1], new_color1[2]);
//glFlush();
FloodFill4(x, y + 1, old_color1, new_color1);
FloodFill4(x, y - 1, old_color1, new_color1);
FloodFill4(x - 1, y, old_color1, new_color1);
FloodFill4(x + 1, y, old_color1, new_color1);
}
if (color[0] == old_color2[0] && color[1] == old_color2[1] && color[2] == old_color2[2])
{
cout << color[0] << " " << color[1] << " " << color[2] << endl;
cout << old_color1[0] << " " << old_color1[1] << " " << old_color1[2] << endl;

SetColor(x, y, new_color2[0], new_color2[1], new_color2[2]);
//glFlush();
FloodFill4(x, y + 1, old_color1, new_color1);
FloodFill4(x, y - 1, old_color1, new_color1);
FloodFill4(x - 1, y, old_color1, new_color1);
FloodFill4(x + 1, y, old_color1, new_color1);
}

}

void Calculate() {
int angle = 40;
for (int i = 0; i < 5; i++) {

a1[i] = 200+R*cos(angle*PI / 180);
b1[i] = 200+R*sin(angle*PI / 180);
a2[i] = 200+r*cos(PI / 5 + angle*PI / 180);
b2[i] = 200+r*sin(PI / 5 + angle*PI / 180);
cout << a1[i] << b1[i] << endl;
angle += 72;
}
}

void CALLBACK draw() {
Calculate();
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
for (int i = 0;i < 5;i++) {
glColor3f(1, 1, 0);
glVertex2f(a1[i], b1[i]);
glVertex2f(a2[i], b2[i]);
glVertex2f(200, 200);
glColor3f(1, 0, 1);
glVertex2f(a2[i], b2[i]);
if (i < 4) {
glVertex2f(a1[i + 1], b1[i + 1]);
}
else {
glVertex2f(a1[0], b1[0]);
}
glVertex2f(200, 200);
}
glEnd();
glFlush();
FloodFill4(200,200, old_color, new_color);
}

void main()
{
//{
// glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
// glutInitWindowPosition(100, 100);
// glutInitWindowSize(400, 400);
// glutCreateWindow("第一个 OpenGL 程序");
// Init();
// glutDisplayFunc(draw);
//
// //
// glutMainLoop();
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
auxInitPosition(100, 100, 500, 500);
auxInitWindow(L"填充");

Init();
auxMainLoop(draw);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: