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 개의 안드로이드 장치는 문제가 없습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? enter image description here

답변

1

저는 장치가 아마도 565 렌더링 타겟을 가지고 있다고 생각합니다. 따라서 8888 텍스처 소스는 양자화되는 경향이 있습니다. 렌더 타겟의 비트 깊이는 아마도 GLSurfaceView.java에서 설정 될 것입니다 (그러나 앱이 어떤 프레임 워크를 기반으로하는지에 달려 있지는 않습니다). 더 높은 비트 심도를 선택할 수도 있지만 모든 장치가 기본 장치보다 565를 지원하는 것은 아닙니다.

가능한 해결 방법 중 하나는 glEnable (GL_DITHER)로 디더링을 활성화하는 것입니다. 그러면 그라디언트가 깨져서 더 잘 보이지 않게됩니다.

그러나 일단 장면에 물건이 더 있으면 그라디언트 아티팩트가 그 밖의 모든 것의 노이즈로 인해 어둡게 찍히기가 꽤 어려워집니다.

+0

디더링은 기본적으로 사용됩니다. OP가 그것을 명시 적으로 불가능하게하는 일종의 프레임 워크를 사용하지 않는다면 말이지. –

+0

늦어서 죄송합니다. 그래서 투표했지만 유물의 일부분 만 해결했습니다. 아직도 인공물이 화면에 나타납니다. – Sung