首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glReadPixels()不准确

glReadPixels()不准确
EN

Stack Overflow用户
提问于 2021-05-06 07:49:52
回答 1查看 95关注 0票数 1

我想做鼠标选择基于颜色。这是我的代码:

代码语言:javascript
复制
bool Geometry::IsObjectClicked(int x, int y, float color[4])
{
   glFlush();
   glFinish();
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
   struct { GLubyte red, green, blue; } pixel;
   glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &pixel);
   float clickedColor[3];
   clickedColor[0] = (float)((float)pixel.red / 255);
   clickedColor[1] = (float)((float)pixel.green / 255);
   clickedColor[2] = (float)((float)pixel.blue / 255);
   if (clickedColor[0] == color[0] && clickedColor[1] == color[1] && clickedColor[2] == color[2])
   {
       return true;
   }
   return false;
}

我有不同颜色的三角形。当我点击三角形的中心时,它给了我正确的行为,但是当我点击三角形的其他地方时,它就不能识别出那个像素的颜色。有时,它甚至不能识别一些不简单的代码,如rgb(255,0,0)的一些极端颜色。我认为我的x和y坐标可能不正确,但我认为glfwGetCursorPos()工作得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-06 09:15:06

第一个评论是对的,你必须把y改为高度-y。至于颜色的比较,我注意到这两种颜色之间有细微的差别,这使得比较错误。所以我加了一个0.01f的公差:

代码语言:javascript
复制
if ((clickedColor[0] == color[0] || abs(clickedColor[0]-color[0]) < 0.01f) && (clickedColor[1] == color[1] || abs(clickedColor[1] - color[1]) < 0.01f) && (clickedColor[2] == color[2] || abs(clickedColor[2] - color[2]) < 0.01f))
{
    return true;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67413924

复制
相关文章

相似问题

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