我正在为 Android 和 iOS 开发跨平台游戏。对于几个类似广告牌的对象,我使用glBlend(GL_ONE, GL_ONE)
带有黑色背景纹理的加法混合()。渲染的对象几乎在任何地方看起来都很好(即纹理中的黑色像素看起来完全透明)。然而,在两个不同的 Android 设备上使用 Adreno GPU(一个 Nexus 4 和另一个 Sony Xperia Go)我有这样的人工制品:
正如汉堡包图标可见,背景颜色渗入渲染的四边形。我假设它是背景颜色渗色,因为当广告牌四边形直接位于背景前面时效果不可见。为了让事情变得更奇怪,当我从设备截屏时效果不可见,所以我必须用另一个相机拍摄屏幕照片。我还注意到,当我Disable HW Overlays
从 Android 开发人员设置中启用时,这些伪影消失了。当我在屏幕上有另一个透明窗口时,人工制品也会消失,例如按下音量按钮时的音量滑块。
当我渲染我的场景时,我首先在第一遍渲染不透明对象,然后在第二遍渲染透明广告牌,glBlend(GL_ONE, GL_ONE)
并禁用深度写入。