Рендеринг Libgdx для 3D-игры

В моей первой трехмерной игре я хочу рендерить пол, который на самом деле представляет собой плоскость (а не libgdx Plane) на y = 0,

Я хочу добавить Texture к этому, так что я могу иметь разные этажи на каждом уровне.

Теперь мой вопрос: каков наилучший способ создания и рендеринга этого текстурированного пола?

Я думал об использовании основных Block Models сделано с ModelBuilder а затем добавил Texture, но, как я могу видеть только 1 из 6 лиц 2d Texture было бы достаточно, поэтому я подумал о Plane,

Могу ли я добавить Texture к PlaneКак это бесконечное лицо в 3D комнате? Последней вещью, о которой я тогда думал, были Decals.

Являются Decals что я ищу? И как я могу их использовать? Или у вас есть другое решение.

Любой учебник или другая помощь будет здорово.

Спасибо

1 ответ

Решение

Сначала о декалях, декали похожи на спрайтов, но в 3D-координате используйте это так:

частная переводная картинка; частный DecalBatch decalBatch;

в show() или create()

decalBatch = new DecalBatch();
CameraGroupStrategy cameraGroupStrategy = new CameraGroupStrategy(camera);
decal = Decal.newDecal(textureRegion, true);
decal.setPosition(5, 8, 1);
decal.setScale(0.02f);
decalBatch.setGroupStrategy(cameraGroupStrategy);

в рендере ()

//Add all your decals then flush()
decalBatch.add(decal);
decalBatch.flush();

также утилизируйте с помощью decalBatch.dispose();

обратите внимание, что в будущем переводная картинка будет частью 3d, я лично не советую вам использовать переводные картинки как сам, используя 3d-плоскость, и я столкнулся с некоторыми проблемами, связанные с использованием 3d-плоскостей, вот такие, я вставляю некоторые из своих кодов сюда

private Model createPlaneModel(final float width, final float height, final Material material, 
            final float u1, final float v1, final float u2, final float v2) {

modelBuilder.begin();
MeshPartBuilder bPartBuilder = modelBuilder.part("rect", 
GL10.GL_TRIANGLES, Usage.Position | Usage.Normal | Usage.TextureCoordinates, 
material);
//NOTE ON TEXTURE REGION, MAY FILL OTHER REGIONS, USE GET region.getU() and so on
bPartBuilder.setUVRange(u1, v1, u2, v2);
        bPartBuilder.rect(
                -(width*0.5f), -(height*0.5f), 0, 
                (width*0.5f), -(height*0.5f), 0, 
                (width*0.5f), (height*0.5f), 0, 
                -(width*0.5f), (height*0.5f), 0,
                0, 0, -1);


        return (modelBuilder.end());
    }

Текстура может быть добавлена ​​в качестве атрибута материала

material.set(new TextureAttribute(TextureAttribute.Diffuse, texture)

для прозрачной плоскости, которая имеет альфа добавить к другому атрибуту

attributes.add( new BlendingAttribute(color.getFloat(3)));          
attributes.add( new FloatAttribute(FloatAttribute.AlphaTest, 0.5f));

material.set(attributes);

Инициируйте ModelInstance, чтобы получить модель, которая вернула

modelInstance = new ModelInstance(createPlaneModel(...))

рендеринг в render() с объектом ModelBatch

modelBatch.render(modelInstance );

Смотрите эти ссылки тоже. http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=11884

это мой тест на Plane vs Decals http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=12493

Другие вопросы по тегам