1
我试图从使用glReadPixels
的像素获取数据。它工作了一段时间。但现在它停止工作,我不知道为什么。glReadPixels不起作用
我需要制作Flood fill
算法。
glBegin(GL_POINTS);
float target[3] = { 1.0, 1.0, 0.0 }; // target color
float border[3] = { 1.0, 1.0, 1.0 }; // border color
float clearp[3] = { 0.0, 0.0, 0.0 }; // clear color
std::stack<pixel*> colored; // stack with pixels
if (!stack.empty()) // stack contains first pixel
colored.push(stack.top());
while(!colored.empty()) {
pixel *p = colored.top();
glRasterPos2i(p->x, p->y);
glDrawPixels(1, 1, GL_RGB, GL_FLOAT, target);
colored.pop();
//up
float pix[3];
glReadPixels(p->x, p->y + 1, 1, 1, GL_RGB, GL_FLOAT, pix);
if (!compare(pix,border) && compare(pix,clearp)) {
pixel *pn = new pixel();
pn->x = p->x;
pn->y = p->y + 1;
colored.push(pn);
}
//down
glReadPixels(p->x, p->y - 1, 1, 1, GL_RGB, GL_FLOAT, pix);
if (!compare(pix,border) && compare(pix,clearp)) {
pixel *pn = new pixel();
pn->x = p->x;
pn->y = p->y - 1;
colored.push(pn);
}
//left
glReadPixels(p->x - 1, p->y, 1, 1, GL_RGB, GL_FLOAT, pix);
if (!compare(pix,border) && compare(pix,clearp)) {
pixel *pn = new pixel();
pn->x = p->x - 1;
pn->y = p->y;
colored.push(pn);
}
//right
glReadPixels(p->x + 1, p->y, 1, 1, GL_RGB, GL_FLOAT, pix);
if (!compare(pix,border) && compare(pix,clearp)) {
pixel *pn = new pixel();
pn->x = p->x + 1;
pn->y = p->y;
colored.push(pn);
}
}
glEnd();
但是数组pix
不包含RGB颜色数据。它通常是这样的-1.0737418e+008
问题在哪里?它应该工作正常...
'glGetError()'是否返回GL_NO_ERROR'(0)以外的任何东西?另外:'glBegin(GL_POINTS)'和相应的'glEnd()'在这里没用,因为你没有绘制任何点 - 你正在绘制像素,并且使用glReadPixels/glDrawPixels非常慢(通过加速图形标准)。 – user2802841
请问有人可以停止使用OpenGL glReadPixels/glDrawPixels实现洪水填充吗?这是操纵一些帧缓冲器像素的最低效方式。只是不要这样做。 – datenwolf
另一种获取和设置像素颜色的方法? – lapots