Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 桌面上的libGDX抗锯齿似乎无效_Java_Graphics_Libgdx_Antialiasing - Fatal编程技术网

Java 桌面上的libGDX抗锯齿似乎无效

Java 桌面上的libGDX抗锯齿似乎无效,java,graphics,libgdx,antialiasing,Java,Graphics,Libgdx,Antialiasing,我正在用libGDX开发一个桌面游戏。我想减少锯齿,这是非常强烈的 有关于这方面的文件。神奇的事情应该发生在DesktopLauncher类中,行config.samples=samplingNumber 我尝试了2、4、8和16个抽样数。我看不出有什么不同 这是我的DesktopLauncher类 public class DesktopLauncher { public static void main (String[] arg) { LwjglApplicatio

我正在用libGDX开发一个桌面游戏。我想减少锯齿,这是非常强烈的

有关于这方面的文件。神奇的事情应该发生在DesktopLauncher类中,行
config.samples=samplingNumber

我尝试了2、4、8和16个抽样数。我看不出有什么不同

这是我的DesktopLauncher类

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        config.title = "AA Test";
        config.width = 1280;
        config.height = 720;
        config.samples = 8;
        new LwjglApplication(new MyGdxGame(), config);
    }
}
这是一张显示no AA和MSAA 16x之间差异的图片。对于MSAA 2x、4x和8x,观察到相同的结果。


我是否缺少将MSAA应用于我的libGDX项目的内容?

您的GPU芯片无法支持MSAA,尽管它应该支持MSAA

要使其正常工作,您需要更换

    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

渲染方法中。然后将桌面的
config.samples
或Android的
config.numSamples
设置为所需值


阅读有关LibGDX AA的详细信息MSAA仅影响多边形的边,而多边形的边通常在二维场景中不可见,因为精灵通常不会一直流血到其矩形边。(不透明矩形精灵和使用ShapeRenderer绘制的形状除外。)

在我看来,您的图像质量好像没有使用mip映射过滤器。使用
useMipMaps
参数true加载纹理,并使用MipMapLinearLinear或mipmapLinearNet的最小过滤器(第一个看起来更好,成本更高)。注意:如果未使用
useMipMaps
true加载纹理,MipMap过滤器将不会执行任何操作


有一些AA技术可以处理屏幕上的所有像素,但它们比简单地使用mip映射和三线性过滤更昂贵。一个例子是FXAA,它不是通过配置设置完成的,而是通过将场景绘制到帧缓冲区对象,然后使用特殊着色器将FBO的纹理绘制到屏幕上。

我找到了解决此问题的方法

texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 
正如您所经历的,采样字段没有任何效果,但在纹理上设置此过滤器确实有效

如果正在使用TextureAtlas,则可以对TextureAtlas对象执行以下操作

atlas.getTextures().forEach(t -> t.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear));

如何生成此对象?它是一个真实的“对象”还是你加载的图像?它是一个图像,包装在纹理图集中。我也使用线性滤波器。我实际上试过任何类型的过滤器,试过Mipmap。。。没有改变任何事情。但是别名问题无论如何都不应该与过滤器有关。正如我在一个JavaGaming论坛上读到的,AA不会影响图像/纹理。你是如何生成TextureAtlas的?您尝试了哪个MipMap过滤器?我使用libGDX纹理打包器生成了TextureAtlas。我尝试了纹理打包机提出的每个MipMap过滤器。在这个例子中,我使用了MipmapLinearNet,这是我在项目中经常使用的过滤器。是的,该页面是我为解决MSAA问题而参考的页面之一。CSAA也不起作用。我想这是因为,正如Andreas Brunnet在我的帖子中指出的,AA不会影响纹理。是的,我总是使用MipMap过滤器。我在上面的示例中使用mipmaplinearNet。我必须确定图像是移动的。在屏幕截图中,它们是旋转的。法线图像完全垂直,但在旋转过程中会出现大量锯齿。这不是MipMap筛选器可以解决的问题。我想我会尝试在高分辨率FBO中绘制屏幕,生成纹理的MipMap并缩小到屏幕分辨率。纹理过滤器是纹理像素的采样和插值方式,因此它们绝对决定了精灵中像素的外观。您是否绝对确定您的纹理已生成mip贴图?如果在没有加载所有mip级别的纹理上使用mip贴图过滤器,则它仍然不是mip贴图。在某些情况下,由于过度下采样,这将导致锯齿。请允许我试试MipMapLinearLinear。顺便说一句,你所描述的是所谓的SSAA,它比FXAA要贵得多,只需稍微改进一下。我在贴花内部使用了纹理,无法将其与此配合使用
atlas.getTextures().forEach(t -> t.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear));