我有一个100x100的简单平面Mesh
。在libgdx教程之后,我已经成功地在网格上映射了一个纹理。然而,它从一开始看起来很奇怪,当我缩小时它甚至更奇怪。我的目标是一个简单的网格模式。
纹理本身是一个小的64x64方形,概述。
我的Grid
类看起来像这样(Grid扩展了gdx.graphics.Mesh):
private final int HALFWIDTH = 50, HALFLENGTH = 50;
private Texture texture;
public Grid() {
super( true, 4, 4,
new VertexAttribute(Usage.Position, 3, "a_position"),
new VertexAttribute(Usage.ColorPacked, 4, "a_color"),
new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoords")
);
setVertices(new float[] {
-HALFWIDTH, -HALFLENGTH, -2f, Color.toFloatBits(255, 0, 0, 255), -HALFWIDTH, HALFLENGTH,
HALFWIDTH, -HALFLENGTH, -2f, Color.toFloatBits(0, 255, 0, 255), HALFWIDTH, -HALFLENGTH,
-HALFWIDTH, HALFLENGTH, -2f, Color.toFloatBits(0, 0, 255, 255), -HALFWIDTH, HALFLENGTH,
HALFWIDTH, HALFLENGTH, -2f, Color.toFloatBits(0, 255, 255, 0), HALFWIDTH, HALFLENGTH
});
setIndices(new short[] { 0, 1, 2, 3 });
this.texture = new Texture( Gdx.files.internal("assets/grid.png") );
this.texture.setWrap( TextureWrap.Repeat, TextureWrap.Repeat );
this.texture.setFilter( TextureFilter.Linear, TextureFilter.Linear );
}
void draw() {
Gdx.graphics.getGL10().glEnable(GL10.GL_TEXTURE_2D);
this.texture.bind();
render(GL10.GL_TRIANGLE_STRIP, 0, 4);
}
答案 0 :(得分:3)
我不是百分百肯定,但我怀疑这是因为你在纹理上使用线性插值。放大和缩小纹理时,OpenGL必须选择如何以不同的分辨率显示纹理。众所周知,使用线性插值会导致屏幕截图显示的效果(有时称为Zagging)。这是由于您正在使用的纹理中的细线(高信息密度)。
尝试更改纹理模式以使用Mip Maps。
this.texture.setFilter(TextureFilter.MipMap, TextureFilter.MipMap);
这将预先计算纹理的缩放版本并避免锯齿效果。如果有效,请告诉我。
答案 1 :(得分:1)
不确定这是否有帮助,但你的HALFWIDTH与第一个不一样。
-HALFWIDTH, **-HALFLENGTH**, -2f, Color.toFloatBits(255, 0, 0, 255), -HALFWIDTH, **HALFLENGTH**,
HALFWIDTH, -HALFLENGTH, -2f, Color.toFloatBits(0, 255, 0, 255), HALFWIDTH, -HALFLENGTH,
-HALFWIDTH, HALFLENGTH, -2f, Color.toFloatBits(0, 0, 255, 255), -HALFWIDTH, HALFLENGTH,
HALFWIDTH, HALFLENGTH, -2f, Color.toFloatBits(0, 255, 255, 0), HALFWIDTH, HALFLENGTH
不是负面的,就像在第一个坐标中一样。这可能会使纹理计算失效。