首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >glReadPixels在对象单击时不给出RGBA值

glReadPixels在对象单击时不给出RGBA值
EN

Stack Overflow用户
提问于 2012-11-24 23:19:28
回答 2查看 1.2K关注 0票数 0

我试图在我的应用程序中实现一些简单的对象选择,但从一开始就遇到了问题。对于测试,我尝试使用本教程中给出的:OpenGL Programming/Object selection

在我的代码中,我现在执行以下操作:

代码语言:javascript
运行
复制
GLbyte color[4];
GLfloat depth;
GLuint index;
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, color);
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_INT, &index);

printf("Clicked on pixel %d, %d, color %02hhx%02hhx%02hhx%02hhx, depth %f, stencil index %u\n", click->x, click->y, color[0], color[1], color[2], color[3], depth, index);

它给出了以下输出:

没有RGBA或模具索引的值。我只有一个放置glStencilFunc(GL_ALWAYS, 99, -1);的对象,所以我不希望在大多数地方看到模板索引。然而,对于颜色,我不认为需要任何额外的东西?

为了调试,下面是我的OGL初始化代码的一些核心部分:

代码语言:javascript
运行
复制
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_MULTISAMPLE);

glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

和SDL初始化代码:

代码语言:javascript
运行
复制
   SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
   SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
   SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
   SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
   SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); 
   window = SDL_CreateWindow(windowTitle.c_str(), SDL_WINDOWPOS_CENTERED, 
    SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);

从这些信息中,是否可以提取出为什么我的glReadPixels没有报告RGBA值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-25 03:07:49

找到了这个问题的解决方案...

它在运行glReadPixels之前交换缓冲区。

票数 0
EN

Stack Overflow用户

发布于 2012-11-25 02:22:56

代码语言:javascript
运行
复制
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, color);

你错过了一个&

代码语言:javascript
运行
复制
glReadPixels(click->x, WINDOW_HEIGHT - click->y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &color);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13542551

复制
相关文章

相似问题

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