1

Ich habe ein Problem mit einigen Artefakten des Android-Geräts wie dieses Bild unten angehängt.OpenGL Artifact Gradient auf Android

Ich habe eine eigene Rendering-Engine, die von OpenGL und C++ entwickelt wurde, und ich rende die gleichen Dinge auf Mac, Windows, IOS und Anroid. In nur einem bestimmten Gerät, Google Tango Tablet, kann ich den Artefaktverlauf sehen. Ich versuchte es mit Glsl ohne Textur und ich versuchte es mit einer Textur, aber so oder so, das Ergebnis ist das gleiche.

Es ist eine Textur mit & Textur Optionen gerendert.

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); 

andere 5 Android-Geräte haben kein Problem damit.

Was ist der beste Ansatz, um dies zu lösen? enter image description here

Antwort

1

Ich denke, dass das Gerät wahrscheinlich ein 565 Render-Ziel hat, so dass die 8888 Textur-Quelle endet quantisiert werden. Die Bittiefe des Renderziels wird wahrscheinlich in GLSurfaceView.java festgelegt (obwohl es möglicherweise nicht davon abhängt, auf welchem ​​Framework Ihre App basiert). Es könnte möglich sein, eine höhere Bittiefe zu wählen, aber nicht alle Geräte unterstützen besser als 565 für das Hauptbit.

Eine mögliche Lösung ist Dithering mit glEnable (GL_DITHER) zu aktivieren, dies wird den Gradienten aufteilen und es viel schwieriger zu erkennen machen.

Sobald Sie jedoch mehr Sachen in Ihrer Szene haben, werden Sie feststellen, dass Gradientenartefakte aufgrund des Rauschens von allem, was gerade passiert, ziemlich schwer zu erkennen sind.

+0

Dithering ist standardmäßig aktiviert. Es sei denn, das OP verwendet eine Art Framework, das es natürlich explizit deaktiviert. –

+0

Sorry, zu spät zu sein, also habe ich gewählt, aber das hat nur einen Teil des Artefakts gelöst. Immer noch das Artefakt auf dem Bildschirm. – Sung