【问题标题】:Rendering overlapping translucent objects without darkening overlap渲染重叠的半透明对象而不使重叠变暗
【发布时间】:2011-01-17 11:14:18
【问题描述】:

我不确定这是否有名称,但基本上我需要做的是取两个不透明的精灵,以 50% 的不透明度绘制它们,并且它们重叠的地方不要让它看起来更暗。

左边的图像是它最初的渲染方式。然后,我想降低渲染的alpha,默认情况下,我得到的是中间的图像,但我想得到的是右边的图像。

我在 iPhone 上使用 cocos2d,现在我正在使用 Atlas Sprite Manager 渲染精灵,它没有自己的 alpha,所以我尝试通过降低每个精灵的 alpha 来降低 alpha单独并降低源图像的 alpha 值,我真的不希望这两种方法起作用。

是否有一些我可以启用的混合模式,或者某种(快速)方式将完全不透明的图像渲染到辅助缓冲区,然后在将其与主缓冲区混合之前降低缓冲区的不透明度?

【问题讨论】:

    标签: iphone opengl-es cocos2d-iphone


    【解决方案1】:

    AFAIK 没有简单的方法来解决这个问题。我能想到的替代方案是:-

    1. 修改几何图形,使对象不重叠(最难编码,但性能最高)。
    2. 将对象渲染为完全不透明的纹理,然后渲染该 alpha 混合。
    3. 使用模板缓冲区(如果 iPhone 支持模板缓冲区,我怀疑它不支持)。从模板设置为零开始,在绘制半透明多边形时将其设置为写入 1,并将条件设置为仅在缓冲区为 0 时绘制片段。

    【讨论】:

    • 2 号正是我想做的。不过那会特别慢吗?
    • 当您将 UIView 的不透明度设置为小于 1.0 时,这本质上就是 UIKit 所做的 - 视图将整体呈现到自己的位图上,然后合成到屏幕上。这意味着您正在为您的形状进行任何渲染,加上离屏位图的每个像素另外 2 次读取和 1 次写入。我怀疑只要你没有为每个“精灵”做整个事情,并且在混合操作中复制的像素不超过你需要的像素,就可以了。
    猜你喜欢
    • 2014-08-07
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2018-02-07
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多