gpt4 book ai didi

c++ - glReadPixels 不起作用

转载 作者:行者123 更新时间:2023-11-30 00:52:20 25 4
gpt4 key购买 nike

我正在尝试使用 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

问题出在哪里?它应该工作正常......

最佳答案

glBeginglEnd 之间调用非常有限的函数集以外的任何函数都是错误的。该列表主要由与指定顶点属性相关的函数组成(例如,glVertexglNormalglColorglTexCoord等)。

因此,如果您的 OpenGL 实现遵循 OpenGL 规范,glReadPixels 应该立即返回而不执行,因为它是在 glBegin/glEnd 组中调用的。从您的调用周围移除那些,glReadPixels 应该会按预期工作。

关于c++ - glReadPixels 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19351568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com