Я не могу залить заливку эллипса, который я только что создал, потому что glReadPixels возвращает странные числа (либо все 0, либо все -1.07374e + 08, в зависимости от того, является ли пиксель с плавающей точкой [3] глобальной или локальной переменной).
Я попытался изменить месторасположение пикселя [3], а также изменить алгоритм заливки, чтобы он работал рекурсивно вместо очереди, оба из которых не работали.
`
void FFill(int xin, int yin, float colorin[3]) {
float pixel[3], clearc[3];
glReadPixels(xin, yin, 1.0, 1.0, GL_RGB, GL_FLOAT, clearc);
glVertex2i(xin, yin);
std::queue<vector<int>> q;
vector<int> n = { xin, yin };
q.push(n);
while (!q.empty())
{
n = q.front();
q.pop();
n[0] -= 1;
glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
{
glVertex2i(n[0], n[1]);
q.push(n);
}
n[0] += 2;
glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
{
glVertex2i(n[0], n[1]);
q.push(n);
}
n[1] -= 1;
glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
{
glVertex2i(n[0], n[1]);
q.push(n);
}
n[1] += 2;
glReadPixels(n[0], n[1], 1.0, 1.0, GL_RGB, GL_FLOAT, pixel);
if (pixel[0] == clearc[0] && pixel[1] == clearc[1] && pixel[2] == clearc[2])
{
glVertex2i(n[0], n[1]);
q.push(n);
}
n.clear();
}
}
`
Итак, когда я запускаю этот код, я ожидаю, что он заполнит эллипс, но вместо этого он просто заполняет очередь, пока не выйдет из строя.