2013-08-12 13 views
8

Szukałem wszędzie sposobu na wyrównanie krawędzi krawędzi wypełnionych kształtów narysowanych za pomocą ShapeRenderer (tj. ShapeType.Filled), ale nie mogę znaleźć niczego na ten temat.Wygładzanie wypełnionych kształtów w libgdx

Linie działają dobrze z Gdx.gl.glEnable(GL10.GL_LINE_SMOOTH), ale nic, co próbowałem, nie działa z wypełnionymi kształtami. Czy ktoś ma jakieś sugestie?

Odpowiedz

3

Znalazłem anty-aliasing wsparcie w OpenGL być brakuje (jak rzeczywiste wsparcie zależy opcjonalnym wsparciem sprzętowym), szczególnie dla podstawowych prymitywów wielokąta. Istnieją dwa rozwiązania, które udało mi się znaleźć:

Po pierwsze, można uzyskać uzasadnione wielokrotne pobieranie próbek podczas korzystania z tekstur. Może więc wyrenderować wielokąt do obiektu FrameBuffer, a następnie skopiować go na ekran. Wciąż jest kilka zastrzeżeń, więcej informacji znajdziesz w artykule http://www.saschahlusiak.de/2012/10/opengl-antialiasing-in-android-with-transparent-textures/.

Po drugie, wyrenderuj wypełniony kształt za pomocą modułu cieniującego, który anty-aliasy, jak w tym pytaniu: Drawing Antialiased circle using Shaders. Jeśli twój wypełniony prymitywny kształt jest skomplikowany, może to być trochę pracy. Zobacz https://code.google.com/p/libgdx/wiki/OpenGLShader, aby dowiedzieć się, jak korzystać z modułu cieniującego w Libgdx. Ta opcja działa tylko z OpenGL ES 2.0.

2

Czy próbowałeś korzystać z poniższych wskazówek?

Gdx.gl.glEnable(GL10.GL_LINE_SMOOTH); 
Gdx.gl.glEnable(GL10.GL_POINT_SMOOTH); 
Gdx.gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST); 
Gdx.gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_NICEST); 
+1

Niestety, wymienione stałe nie wydają się być w najnowszej wersji libGDX. https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/GL20.java – Travis

+0

Tak, są one dostępne tylko w przypadku korzystania z OpenGL ES 1.0, a nie z wersji 2.0 – Wizche