2016-10-27 36 views
1

我遇到了下面附加的一些Android设备的工件,如下图所示。Android上的OpenGL Artifact Gradient

我正在运行由opengl和C++设计的我自己的渲染引擎,并且我在Mac,Windows,IOS和Anroid上渲染了相同的东西。在仅有的一款特定设备Google Tango Tablet中,我可以看到神器渐变。我尝试了使用没有纹理的glsl,我尝试使用纹理,但无论哪种方式,结果都是一样的。

这是一个纹理渲染与混合&纹理选项。

1. glBlendFunc(GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR); 

2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

其他5个android设备对此没有问题。

解决此问题的最佳方法是什么? enter image description here

回答

1

我认为该设备可能有一个565渲染目标,所以8888纹理源最终被量化下来。渲染目标的位深度可能在GLSurfaceView.java中设置(尽管它可能不取决于您的应用所基于的框架)。有可能选择更高的比特深度,但并非所有设备的主要比565都好。

一个可能的修复方法是使用glEnable(GL_DITHER)启用抖动,这将打破梯度并使其难以找到。

但是,一旦你的场景中有更多的东西,你会发现渐变伪影变得很难找到反正因为其他一切正在发生的噪音。

+0

抖动默认情况下处于启用状态。除非OP使用某种明确禁用它的框架,当然。 –

+0

对不起,所以我投了票,但只解决了神器的一部分。仍然显示在屏幕上的神器。 – Sung