如何在 LibGDX 2D 模式下设置抗锯齿?

问题描述 投票:0回答:1

我使用 LibGDX 创建一个视频游戏。 我想打开抗锯齿功能,因为我的游戏像素化程度很高。 领域:

int samples = 0;

在课堂上

Lwjgl3ApplicationConfiguration

不那么公开,不能通过 setter 进行更改。 我使用原始的 Lwjgl3ApplicationConfiguration 作为模板创建了自己的类,并更改了此变量样本,但没有帮助。 我还尝试使用下一行 setBackBufferConfig() :

config.setBackBufferConfig(8, 8, 8, 8, 16, 0, samplesValue);

但这没有帮助。我使用了 1 到 4 之间的样本值。 在渲染过程开始时我使用命令:

Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT | (Gdx.graphics.getBufferFormat().coverageSampling?GL20.GL_COVERAGE_BUFFER_BIT_NV:0));

我的显卡是 NVIDIA RTX A2000。

java opengl libgdx game-development
1个回答
0
投票

在 libGDX 不和谐中,我被告知样本仅在纹理之间应用抗锯齿,并且我需要一个着色器在纹理内应用抗锯齿。这就是我得到的(代码来自ShaderToy):

#ifdef GL_ES
    precision mediump float;
#endif

uniform sampler2D u_texture;
varying vec4 v_color;
varying vec2 v_texCoords;

vec2 saturate(vec2 x) {
    return clamp(x, vec2(0.0), vec2(1.0));
}

vec2 magnify(vec2 uv, vec2 resolution) {
    uv *= resolution;
    return (saturate(fract(uv) / saturate(fwidth(uv))) + floor(uv) - 0.5) / resolution;
}

void main() {
    vec2 resolution = vec2(textureSize(u_texture, 0));
    gl_FragColor = texture2D(u_texture, magnify(v_texCoords, resolution)) * v_color;
}

该着色器操纵正在绘制的像素的坐标。因此它依赖于线性插值:

texture.setFilter(Linear, Linear);
© www.soinside.com 2019 - 2024. All rights reserved.