【问题标题】:Opengl, blend only when destination pixels' alpha value is positiveOpengl,仅当目标像素的 alpha 值为正时才混合
【发布时间】:2016-04-19 08:16:46
【问题描述】:

我正在寻找一种功能/方法来使混合仅在目标像素(即后台缓冲区)的 alpha 值大于 0 时起作用。

我正在寻找类似于 glAlphaFunc 的东西,它测试传入的片段,但在我的情况下,我想测试已经在后台缓冲区中找到的片段。

有什么想法吗?

提前谢谢你

ps。我无法在绘图函数中进行逐像素测试,因为它被设置为用户的回调函数。

【问题讨论】:

  • 你试过glBendFunc吗?
  • 定义“使混合工作”。你已经有混合功能了吗?也就是说,你是结合源颜色和目标颜色,还是只是想根据目标 alpha 是否大于零有条件地写入源颜色?
  • 我正在尝试实现第二个,即根据目标 alpha 是否大于零有条件地写入源颜色。我要做的是在各种纹理上保存后台缓冲区,并根据需要使用混合函数(GL_SOURCE_ALPHA、GL_ONE_MINUS_SOURCE_ALPHA)在后台缓冲区上重绘它们(很可能会用其他东西重绘)。
  • 根据定义,alpha 值为 [0..1]。所以总是积极的。也许解释你想做什么,而不是你想怎么做。

标签: opengl alpha blend


【解决方案1】:

等等,你的回答有点令人困惑,但我认为你正在寻找的是这样的:opengl - blending with previous contents of framebuffer

【讨论】:

    【解决方案2】:

    对此感到抱歉,但我认为最好回答而不是评论。

    所以,让我举个例子更好地解释一下。

    假设我们必须绘制一些东西(无论用户想要什么,比如一张桌子),然后(当然是在交换缓冲区之前)我们必须使用混合在它上面绘制“保存”的纹理。

    假设我们要绘制两个透明的盒子。如果要将这些框保存在不同的纹理中,可以通过以下方式完成:

    1. 用 (0, 0, 0, 0) 清屏
    2. 设置混合函数(GL_ONE、GL_ZERO)
    3. 画框
    4. 将其保存到纹理中。

    现在,每当用户想要全部重绘它们时,他只需绘制主题(表格),然后使用混合函数(GL_SOURCE_ALPHA、GL_ONE_MINUS_SOURCE_ALPHA)在其上绘制纹理。

    这很好用。但是如果用户想要将两个框保存在一个纹理中并且框重叠,我们如何保存这两个框的混合而不将它们与“清除”背景混合?

    总而言之,整幅画的最终图像应该是一张桌子,上面有两个盒子(比如说一个黄色和一个绿色盒子),并与函数(GL_SOURCE_ALPHA、GL_ONE_MINUS_SOURCE_ALPHA)混合。

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 2011-12-14
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2015-03-30
      • 1970-01-01
      相关资源
      最近更新 更多