iphone - 渲染重叠的半透明对象而不使重叠变暗

标签 iphone opengl-es cocos2d-iphone

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

Example Image

左边的图像是它最初渲染的样子。然后,我想减少渲染的 Alpha,默认情况下,我得到中间的图像,但我想得到右边的图像。

我在iPhone上使用cocos2d,现在我使用Atlas Sprite Manager渲染 Sprite ,它没有自己的alpha,所以我尝试通过减少每个 Sprite 的alpha来减少alpha单独地并且还降低了源图像的 Alpha,这两者我真的不希望起作用。

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

最佳答案

据我所知,没有简单的方法可以解决这个问题。我能想到的替代方案是:-

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

关于iphone - 渲染重叠的半透明对象而不使重叠变暗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274206/

相关文章:

iphone - 将 block 放在同步 GCD 队列上是否会锁定阻塞并暂停其他队列?

objective-c - 使用 Objective C 访问 Sprite in Touch 事件

ios - 使用 Chipmunk 和 cocos2d 查找最近点

ios - UIPageViewController subview 在屏幕点击后移到状态栏后面

iOS:dyld:未加载库:@rpath/CocoaLumberjack.framework/CocoaLumberjack

android - 在 Android 上的 OpenGL 程序中调用 glViewport 是必要的吗?

c++ - 在 Windows 上开始使用 OpenGL ES 2.0

ios - Metal API 验证崩溃

iphone - 如何在Cocos2D-iPhone中暂停/恢复CCParticleSystem?

iphone - 如何在 iOS 中获取任意位置的图片