الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أحتاج كود Flood Filling

مغلق
بدأه بسوووم في 29 أبريل 2007 · 2 رد · 731 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أحتاج كود FLOOD FILLING (كود لتعبئة الاشكال بالألوان) باستخدام openGL

شكر مقدما ..

#2

حصلت هذا الكود لكنه لا يعمل اذا كان الشكل دائره .. ما ادري وين الخطأ !!!


//
// Problems occur Randomly, acutally...
//

void floodFill(int w, int h, float* newcolor, float* oldcolor)
{
float thisColor[3];
if ((w < 100) || (w > iWindowWidth)) return;
if ((h < 0) || (h > iWindowHeight)) return;
glReadPixels(w, iWindowHeight-h, 1, 1, GL_RGB, GL_FLOAT, thisColor);
if(thisColor[0] == newcolor[0] && thisColor[1] == newcolor[1]
&& thisColor[2] == newcolor[2] ) return;
if(thisColor[0] == oldcolor[0] && thisColor[1] == oldcolor[1]
&& thisColor[2] == oldcolor[2] )
{
glColor3fv(newcolor);
glBegin(GL_POINTS);
glVertex2i(w, h);
glEnd();
floodFillN(w, h-1, newcolor, oldcolor);//d) WORKS alone & with a)
floodFillE(w+1, h, newcolor, oldcolor);//a) WORKS alone & with c)
floodFillS(w, h+1, newcolor, oldcolor);//b) WORKS alone, but weird...
floodFillW(w-1, h, newcolor, oldcolor);//c) WORKS alone

}
}


// FLOOD FILL ends
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

// FAST FLOOD FILL -- Future use...

void floodFillE(int w, int h, float* newcolor, float* oldcolor)
{
float thisColor[3];
if (w > iWindowWidth) return;
glReadPixels(w, iWindowHeight-h, 1, 1, GL_RGB, GL_FLOAT, thisColor);
if(thisColor[0] == newcolor[0] && thisColor[1] == newcolor[1]
&& thisColor[2] == newcolor[2] ) return;
if(thisColor[0] == oldcolor[0] && thisColor[1] == oldcolor[1]
&& thisColor[2] == oldcolor[2] )
{
glColor3fv(newcolor);
glBegin(GL_POINTS);
glVertex2i(w, h);
glEnd();
floodFillE(w+1, h, newcolor, oldcolor);
floodFillN(w, h-1, newcolor, oldcolor);
floodFillS(w, h+1, newcolor, oldcolor);
}
}
///////////////////////////////////////////////////////////////////////
void floodFillN(int w, int h, float* newcolor, float* oldcolor)
{
float thisColor[3];
if (h < 0) return;
glReadPixels(w, iWindowHeight-h, 1, 1, GL_RGB, GL_FLOAT, thisColor);
if(thisColor[0] == newcolor[0] && thisColor[1] == newcolor[1]
&& thisColor[2] == newcolor[2] ) return;
if(thisColor[0] == oldcolor[0] && thisColor[1] == oldcolor[1]
&& thisColor[2] == oldcolor[2] )
{
glColor3fv(newcolor);
glBegin(GL_POINTS);
glVertex2i(w, h);
glEnd();
floodFillE(w+1, h, newcolor, oldcolor);
floodFillN(w, h-1, newcolor, oldcolor);
floodFillW(w-1, h, newcolor, oldcolor);
}
}
/////////////////////////////////////////////////////////////////////
void floodFillW(int w, int h, float* newcolor, float* oldcolor)
{
float thisColor[3];
if (w < 100) return;
glReadPixels(w, iWindowHeight-h, 1, 1, GL_RGB, GL_FLOAT, thisColor);
if(thisColor[0] == newcolor[0] && thisColor[1] == newcolor[1]
&& thisColor[2] == newcolor[2] ) return;
if(thisColor[0] == oldcolor[0] && thisColor[1] == oldcolor[1]
&& thisColor[2] == oldcolor[2] )
{
glColor3fv(newcolor);
glBegin(GL_POINTS);
glVertex2i(w, h);
glEnd();
floodFillN(w, h-1, newcolor, oldcolor);
floodFillW(w-1, h, newcolor, oldcolor);
floodFillS(w, h+1, newcolor, oldcolor);
}
}
//////////////////////////////////////////////////////////////////////
void floodFillS(int w, int h, float* newcolor, float* oldcolor)
{
float thisColor[3];
if (h > iWindowHeight) return;
glReadPixels(w, iWindowHeight-h, 1, 1, GL_RGB, GL_FLOAT, thisColor);
if(thisColor[0] == newcolor[0] && thisColor[1] == newcolor[1]
&& thisColor[2] == newcolor[2] ) return;
if(thisColor[0] == oldcolor[0] && thisColor[1] == oldcolor[1]
&& thisColor[2] == oldcolor[2] )
{
glColor3fv(newcolor);
glBegin(GL_POINTS);
glVertex2i(w, h);
glEnd();
floodFillE(w+1, h, newcolor, oldcolor);
floodFillW(w-1, h, newcolor, oldcolor);
floodFillS(w, h+1, newcolor, oldcolor);
}
}
///////////////////////////////////////////////////////
/ FLOOD FILL starts

#3

الكود السابق يعمل مع الاشكال الهندسيه ماعدا الدائرة !!

هذا الموضوع مغلق.

مواضيع مشابهة