【发布时间】:2013-08-12 11:57:15
【问题描述】:
我一直在寻找一种方法来消除使用ShapeRenderer(即ShapeType.Filled)绘制的填充形状的边缘的抗锯齿,但找不到任何相关信息。
Lines 与Gdx.gl.glEnable(GL10.GL_LINE_SMOOTH) 配合得很好,但我尝试过的任何方法都不适用于填充形状。那么,有人有什么建议吗?
【问题讨论】:
我一直在寻找一种方法来消除使用ShapeRenderer(即ShapeType.Filled)绘制的填充形状的边缘的抗锯齿,但找不到任何相关信息。
Lines 与Gdx.gl.glEnable(GL10.GL_LINE_SMOOTH) 配合得很好,但我尝试过的任何方法都不适用于填充形状。那么,有人有什么建议吗?
【问题讨论】:
也许这个链接会有所帮助:MULTI SAMPLING ANTI-ALASING IN LIBGDX ON ANDROID
通常,您必须启用多重采样才能使填充形状的边缘平滑。
【讨论】:
我发现 OpenGL 中缺乏抗锯齿支持(因为实际支持取决于可选的硬件支持),尤其是对于基本的多边形图元。我发现有两种可行的解决方案:
首先,您可以在使用纹理时获得合理的多重采样。因此,也许将您的多边形渲染到 FrameBuffer 对象,然后将其复制到屏幕上。还有很多注意事项,请参阅http://www.saschahlusiak.de/2012/10/opengl-antialiasing-in-android-with-transparent-textures/ 了解更多详情。
其次,使用抗锯齿着色器渲染填充的形状,如以下问题:Drawing Antialiased circle using Shaders。如果你填充的原始形状很复杂,这可能是相当多的工作。有关如何将着色器与 Libgdx 一起使用,请参阅 https://code.google.com/p/libgdx/wiki/OpenGLShader。此选项也仅适用于 OpenGL ES 2.0。
【讨论】:
您是否尝试过以下提示?
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);
【讨论】: