Заполнение флудом кода GLUT не работает

Я написал следующий фрагмент кода для заливки как часть разрабатываемой мной программы рисования:

void setPixel(int x, int y)
{
glColor4f(red, green, blue, alpha);
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();
glFlush();
}
void floodFill(int x, int y)
{
unsigned char pick_col[3];
float R, G, B;
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pick_col);
R = (float) pick_col[0]/255.0;
G = (float) pick_col[1]/255.0;
B = (float) pick_col[2]/255.0;

//std::cout<<R<<" "<<G<<" "<<B<<"\n";

if(R!=0.0 || G!=0.0 || B!=0.0) //true for any non-black colour (BTW, my canvas is black)
return;

setPixel(x,y);

floodFill(x+1,y);
floodFill(x,y+1);
floodFill(x,y-1);
floodFill(x-1,y);
}

К сожалению, этот код не работает. Например, я сначала нарисовал прямоугольник и попытался заполнить прямоугольник. На самом деле произошло то, что с точки, где я щелкнул, чтобы заполнить, пиксели справа начали заполняться линией, и в итоге пиксели возле самого правого края начали рисоваться. Но это все, что случилось. Я не понимаю почему.

0

Решение

Прежде всего: не делай этого. Делать это полностью на процессоре будет порядки величины быстрее, чем сделать 2 туда и обратно в GPU на пиксель.

Сказав это, я все еще вижу проблему с вашей реализацией: вы никогда не проверяете границы. glReadPixels просто вернусь не определено результаты, если вы попытаетесь прочитать обратно пиксели, которые лежат за пределами кадрового буфера, и это вполне может быть все нули.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]