libGDX текстура 2d ландшафта

Я работаю над игрой про грузовики с libgdx и box2d. В моей игре 1 метр = 100 пикселей. Мой 2d ландшафт сгенерирован мной и сделан по точкам.

введите здесь описание изображения

Что я сделал, так это создал полигональную область для всего полигона и использовал texturewrap.repeat. Проблема в том, что размер моей игры уменьшен в 100 раз, чтобы соответствовать единицам box2d.

Итак, ширина моей камеры 800/100, а высота 480/100. (8x4,8 пикселей)

Как я создал полигональную область

box = new Texture(Gdx.files.internal("box.png"));
    box.setFilter(TextureFilter.Linear, TextureFilter.Linear);
    box.setWrap(TextureWrap.Repeat, TextureWrap.Repeat);

    TextureRegion region = new TextureRegion(box);

    psb = new PolygonSpriteBatch();

    float[] vertices = new float[paul.size];
    for (int i = 0; i < paul.size; i++) {
        vertices[i] = paul.get(i);
        if (i % 2 == 1)
            vertices[i] += 1f;

    }

    EarClippingTriangulator a = new EarClippingTriangulator();
    ShortArray sar = a.computeTriangles(vertices);
    short[] shortarray = new short[sar.size];
    for (int i = 0; i < sar.size; i++)
        shortarray[i] = sar.get(i);
    PolygonRegion pr = new PolygonRegion(region, vertices, shortarray);

    System.out.println(vertices.length + " " + shortarray.length);

    ps = new PolygonSprite(pr);

Теперь я просто нарисую полигонспрайт в свою партию полигонспрайтов. Это приведет к многократному рендерингу текстуры на полигоне, но картинка будет в 100 раз больше и сильно растянута. Левый пример — это то, что я хочу сделать, а правый — это то, как выглядит моя игра.

введите здесь описание изображения


person Boldijar Paul    schedule 03.05.2014    source источник
comment
Я тоже боролся с такой проблемой, не смог найти решение, чтобы моя текстура не растягивалась. Если я не установлю матрицу проекции на polygonBatch, тогда она будет отображаться нормально, но текстура не будет двигаться вместе с камерой. Текстура остается статической, когда я поворачиваю камеру.   -  person lifo    schedule 11.02.2015


Ответы (3)


Этот PR был объединен, что выглядит так, как будто он делает то, что вы хотите: https://github.com/libgdx/libgdx/pull/3799

См. RepeatablePolygonSprite.

person NateS    schedule 19.12.2016
comment
Очень приятно увидеть это после стольких лет! С тех пор, как я задал этот вопрос, многое изменилось, и я надеюсь, что у меня снова появится свободное время, чтобы начать работать над такими играми :) - person Boldijar Paul; 20.12.2016

Я не совсем уверен, решит ли это вашу проблему (не могу проверить это прямо сейчас), но вам нужно установить координаты текстуры вашего TextureRegion на более высокое значение, вероятно, ваш коэффициент 100.

Таким образом, вы можете попробовать использовать region.setU2(100) и region.setV2(100). Поскольку координаты текстуры обычно идут от [0,1], значения выше этого будут снаружи. И поскольку вы установили TextureWrap на повторение, ваша текстура будет повторяться снова и снова.

Таким образом, TextureRegion уже покажет вашу единственную текстуру, повторенную 100 раз по осям x и y. Если вы затем скажете PolygonSprite использовать этот регион, он должен показать его, как на изображении, которое вы опубликовали.

Надеюсь, это поможет... :)

person florianbaethge    schedule 03.05.2014

Вы можете создать новую текстуру по коду. Возьмите размер вашего уровня и заполните его своей текстурой, затем удалите фоном верхнюю сторону. Посмотрите на пиксельмап. Может быть, это поможет вам.

Редактировать:

TextureRegion не повторяется, чтобы соответствовать размеру, даже если вы используете текстуру или используете TiledDrawable.

person Rareș Smeu    schedule 07.05.2014
comment
Мне не нужны простые растровые изображения, мне нужно помещать такие вещи, как текстуры земли, сделанные в Photoshop и Illustrator. - person Boldijar Paul; 08.05.2014