Android 在一些安卓设备上添加混合人工制品与OpenGL ES 2.0
我正在为Android和iOS开发一款跨平台游戏。对于两个类似广告牌的对象,我使用黑色背景纹理的加法混合(Android 在一些安卓设备上添加混合人工制品与OpenGL ES 2.0,android,opengl-es,opengl-es-2.0,Android,Opengl Es,Opengl Es 2.0,我正在为Android和iOS开发一款跨平台游戏。对于两个类似广告牌的对象,我使用黑色背景纹理的加法混合(glBlend(GL\u ONE,GL\u ONE))。渲染对象几乎处处看起来都很好(即,纹理中的黑色像素看起来完全透明)。然而,在两个不同的安卓设备上(一个是Nexus 4,另一个是Sony Xperia Go),我有如下人工制品: 当汉堡图标可见时,背景色会流入渲染的四边形中。我假设它是背景色出血,因为当广告牌四边形直接位于背景前面时,效果不可见。更奇怪的是,当我从设备上拍摄屏幕截图时,
glBlend(GL\u ONE,GL\u ONE)
)。渲染对象几乎处处看起来都很好(即,纹理中的黑色像素看起来完全透明)。然而,在两个不同的安卓设备上(一个是Nexus 4,另一个是Sony Xperia Go),我有如下人工制品:
当汉堡图标可见时,背景色会流入渲染的四边形中。我假设它是背景色出血,因为当广告牌四边形直接位于背景前面时,效果不可见。更奇怪的是,当我从设备上拍摄屏幕截图时,效果是不可见的,所以我必须用另一台相机拍摄屏幕。我还注意到,当我从Android开发者设置中启用禁用硬件覆盖时,人工制品消失了。当我在屏幕上有另一个透明窗口时,人工制品也会消失,例如当我按下音量按钮时的音量滑块
当我渲染场景时,我首先在第一遍渲染不透明对象,然后在第二遍渲染透明广告牌,使用glBlend(GL\u ONE,GL\u ONE)
和禁用深度写入。仅为了记录,我花了很长时间才找到罪犯,但最终我找到了原因。事实证明,并非所有“假定”不透明对象都是真正不透明的(即,它们的alpha值小于1.0)
因此,在使用硬件覆盖的设备上,人工制品变得可见,而在使用单一硬件覆盖的设备上,人工制品看起来很好。我不是100%确定,但当我在应用程序窗口顶部有一个覆盖窗口(如系统音量栏)时,这与覆盖有关
在我确定我所有的不透明对象都是真正的不透明对象之后,问题就消失了。除了在这里发帖,还可以在高通开发者网络论坛上试试。你尝试过不同的纹理内部格式吗?谢谢你的建议,我也会尝试的。