1

Mesh私は100x100の単純な平面を持っています。libgdxチュートリアルに従って、メッシュ上にテクスチャを正常にマッピングしました。しかし、最初から奇妙に見え、ズームアウトするとさらに奇妙に見えます。私が目指しているのは、シンプルなグリッドパターンです。

ズームインした平面は次のとおりです。

ズームイン

ズームアウトしました:

ズームアウト

テクスチャ自体は、輪郭が描かれた小さな64x64の正方形です。

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);
}
4

2 に答える 2

3

100% 確信があるわけではありませんが、テクスチャに線形補間を使用しているためではないかと強く疑っています。テクスチャをズームインおよびズームアウトするとき、OpenGL は異なる解像度でテクスチャを表示する方法を選択する必要があります。線形補間を使用すると、スクリーンショットに表示される効果が生じることがよく知られています (Zagging とも呼ばれます)。これは、使用しているテクスチャの細い線 (情報密度が高い) によるものです。

Mip Mapsを使用するようにテクスチャ モードを変更してみてください。

this.texture.setFilter(TextureFilter.MipMap, TextureFilter.MipMap);

これにより、テクスチャのスケーリングされたバージョンが事前に計算され、ザグ効果が回避されます。これがうまくいくかどうか教えてください。

于 2011-06-17T05:51:22.143 に答える
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

最初の座標のように、負ではありません。これは、テクスチャリングの計算を延期している可能性があります。

于 2011-06-04T18:24:10.060 に答える