【问题标题】:glReadPixels() alpha with overlapping textures具有重叠纹理的 glReadPixels() alpha
【发布时间】:2012-09-01 16:06:34
【问题描述】:

我正在尝试使用 glReadPixel() 获取纹理的 alpha 值。我遇到的问题是,一旦 alpha 值像素低于 0.5f,它就会开始合并背景对象的 alpha 值。我永远无法获得 0.0f 到 0.49999f 的 alpha 值。有没有办法忽略任何背景对象的 alpha 值并仅获取顶部纹理或对象的 1 像素 alpha 值?

std::vector< float > pixels( 1 * 1 * 4 );
glReadPixels(mouse.x,mouse.y,1,1,GL_RGBA,GL_FLOAT,&pixels[0]);

printf("alpha value = %f", pixels[3]);

【问题讨论】:

  • 既然你有一个纹理,你可能在内存的某个地方有它。为什么不直接从中读取呢?
  • 这就是我最终所做的。工作完美。清理完代码后,我会发布答案。

标签: opengl opengl-es textures alpha glreadpixels


【解决方案1】:

我正在尝试使用 glReadPixel() 获取纹理的 alpha 值

glReadPixels 从 帧缓冲区 返回数据,而不是纹理。因此,您将受制于已渲染的所有内容(以及当时使用的混合功能)。

我怀疑你在试图解决的任何问题上都走错了路。

【讨论】:

  • 我只是想在单击像素时获得纹理或对象的真实 Alpha 值。这都是需要的。
  • 我可以按照 if(pixelIsInObject(x,y,object)){alpha = GetObjectAlpha(x,y,&object);}
  • 一旦像素被渲染并混合到帧缓冲区中,它们的原始值就会丢失。您需要获取在渲染的三角形上单击的位置并计算纹理坐标并从原始纹理中读取 alpha 值。就像我说的,我认为您应该告诉我您要解决的问题,而不是如何解决您的解决方案。
  • 好的。所以如果我能告诉你纹理的 x,y 像素,那么我们如何获得纹理那部分的 alpha 值。我不一定有1个问题。我想在我的程序的许多部分使用这种能力。
  • “我想在我的程序的许多部分使用这种能力。” .. 为什么?可能有更好的方法。
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2023-03-31
  • 2012-08-05
相关资源
最近更新 更多