我使用 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。
在 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);