首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glReadPixels不起作用

glReadPixels不起作用
EN

Stack Overflow用户
提问于 2013-10-13 23:37:24
回答 1查看 1.9K关注 0票数 3

我正在尝试使用glReadPixels从像素中获取数据。已经用了一段时间了。但现在它停止工作了,我不知道为什么。

我需要做Flood fill算法。

代码语言:javascript
复制
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

问题出在哪里?应该会很好..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-14 00:26:43

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

因此,如果您的OpenGL实现遵循OpenGL规范,则由于在glBegin/glEnd组中调用,glReadPixels应该立即返回而不执行。从您的调用中删除这些内容,glReadPixels应该会像预期的那样工作。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19351568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档