Android上的OpenGL Artifact Gradient

时间:2016-10-27 19:04:49

标签: android opengl-es glsl opengl-es-2.0 google-project-tango

我遇到了一些Android设备的神器问题,如下图所示。

我正在运行一个由opengl和c ++设计的自己的渲染引擎,我在Mac,Windows,IOS和Anroid上渲染相同的东西。只有一个特定的设备,谷歌Tango平板电脑,我可以看到神器渐变。我尝试使用glsl没有纹理,我尝试使用纹理,但无论如何,结果是相同的。

这是一个用混合和&amp ;;渲染的纹理。纹理选项。

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 个答案:

答案 0 :(得分:1)

我认为该设备可能具有565渲染目标,因此8888纹理源最终会被量化。渲染目标的位深度可能在GLSurfaceView.java中设置(尽管它可能不依赖于您的应用程序所基于的框架)。可能选择更高的位深度,但并非所有设备都支持优于主要的565。

一个可能的解决方法是使用glEnable(GL_DITHER)启用抖动,这会破坏渐变并使其更难发现。

然而,一旦你的场景中有更多东西,你会发现渐变伪像无论如何都变得非常难以发现,因为其他所有东西都会产生噪音。