我在某些Android设备的工件上遇到了麻烦,例如下面这张图片。

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

它是使用blend&texture选项渲染的纹理。

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设备对此没有问题。

解决此问题的最佳方法是什么?
android - Android上的OpenGL Artifact Gradient-LMLPHP

最佳答案

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

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

但是,一旦场景中包含更多内容,就会发现由于任何正在发生的其他事情所带来的噪声,渐变伪影无论如何都变得很难发现。

10-08 18:34