Libgdx наложение текстур - PullRequest
1 голос
/ 04 июня 2011

У меня есть простая плоскость Mesh, которая составляет 100x100.Следуя инструкциям по libgdx, я успешно наложил текстуру на сетку.Тем не менее, это выглядит странно с самого начала, и даже страннее, когда я уменьшаю масштаб.Я стремлюсь к простой сетке.

Вот увеличенная плоскость:

Zoomed in

Теперь уменьшено:

Zoomed out

Сама текстура представляет собой небольшой квадрат размером 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);
}

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Я не уверен на 100%, но у меня есть сильное подозрение, потому что вы используете линейную интерполяцию для вашей текстуры. Когда вы увеличиваете и уменьшаете текстуру, OpenGL должен выбирать, как отображать текстуру в разных разрешениях. Хорошо известно, что использование линейной интерполяции приводит к эффекту, который показывают ваши скриншоты (иногда это называется Zagging). Это связано с тонкими линиями (высокая плотность информации) в используемой текстуре.

Попробуйте изменить режим текстур, чтобы использовать Mip Maps .

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

Это позволит предварительно рассчитать масштабированные версии ваших текстур и избежать эффекта загиба. Дайте мне знать, если это работает.

1 голос
/ 04 июня 2011

Не уверен, поможет ли это, но ваш 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

Не отрицательно, как в первой координате.Это может быть скинуть расчет текстурирования.

...