2010-02-16 70 views
5

我不确定是否有这个名称,但基本上我需要做的是取两个不透明的子画面,以50%的不透明度绘制它们以及它们重叠的位置,它看起来更黑暗。渲染重叠半透明物体而没有变暗重叠

Example Image http://i45.tinypic.com/n35281.gif

左边的图像是它是如何最初呈现。然后,我想减少渲染的alpha,并且默认情况下,我在中间获取图像,但是我想要将图像放在右侧。

我在iPhone上使用cocos2d,现在我使用阿特拉斯精灵管理器渲染精灵,它没有自己的阿尔法,所以我试图通过减少每个阿尔法来减少阿尔法。 sprite,并且还会减少源图像的alpha,这两者我都没有预料到会发挥作用。

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

回答

3

AFAIK没有简单的方法。替代方案我能想到的是: -

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

2号正是我想到的这样做。那会特别慢吗? – 2010-02-16 17:46:43

+0

它基本上是UIKit在将UIView的不透明度设置为小于1.0时所做的 - 视图以其整个位图的形式呈现,然后将其合成到屏幕。这意味着您正在为您的形状进行任何渲染,并为离屏位图的每个像素进行2次读取和1次写入。我认为只要你没有为每个“精灵”做所有事情,并且你没有复制任何比你在混合操作中需要的像素更好的东西,那就可以。 – U62 2010-02-16 18:08:10