2016-10-27 77 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