填充
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);
}
#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);
}
相关文章推荐
- python编程关键字
- GCD多线程
- 十一、访问者模式(行为型模式)
- Android4.4 系统移植问题备忘
- start.S解析1
- http的get和post请求
- OpenCV坐标体系+minMaxLoc的使用细节
- SourceTree里GitFlow的使用
- 唱衰平板何以成风?坚守品质乃长胜之道
- 多位数乘一位数
- 两位数乘一位数
- dialog强退
- uva 10816 Travel in Desert(简单的好题~两种方法)
- 读《CSS.Secrets》,记录下——box-shadow,outline
- vb中的乘法运算
- 求大神指教
- Java小程序之计算三角形/圆形/矩形的周长和面积
- Struts2动态调用方法报错
- Unity3d 中 UI 开发的 MVC 模式
- 浅谈C中的malloc和free