Эффективное добавление текстур в 3D-игре с использованием libGDX - PullRequest
0 голосов
/ 22 ноября 2018

Я пишу 3D-игру на Java с использованием libGDX.В моей игре есть пример экземпляра комнаты, стены которого просто прямоугольники.Я пытаюсь добавить эффект "пулевых отверстий", которые являются просто текстурой, которая появляется на стене, когда игрок стреляет в нее.Я пытаюсь понять, какой оптимальный способ его реализации?Очевидным способом является просто создание экземпляра модели, построенного из одного прямоугольника с текстурой отверстия для каждого пулевого отверстия - но таким образом будет вызов вызова для каждого из этих отверстий, что не является AFAIK с точки зрения производительности.

Фрагмент кода, который я создаю для стен:

 Texture wallTexture = new Texture(Gdx.files.internal("wall.png"));
    wallTexture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
    Material wallMaterial = new Material(TextureAttribute.createDiffuse(wallTexture));
    MeshPartBuilder meshBuilder = modelBuilder.part("walls", GL20.GL_TRIANGLES,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal |
                    VertexAttributes.Usage.TextureCoordinates, wallMaterial);
    meshBuilder.setUVRange(0, 0, C.ROOM_SIZE, 3);
    corner00.set(C.ROOM_SIZE, 0, 0);
    corner10.set(0, 0, 0);
    corner11.set(0, 0, 6);
    corner01.set(C.ROOM_SIZE, 0, 6);
    normal.set(0, 1, 0);
    line1000.setNormalDirection(auxVector2.set(0, 1).angle());
    meshBuilder.rect(corner00, corner10, corner11, corner01, normal);
    corner00.set(C.ROOM_SIZE, C.ROOM_SIZE, 0);
    corner10.set(C.ROOM_SIZE, 0, 0);
    corner11.set(C.ROOM_SIZE, 0, 6);
    corner01.set(C.ROOM_SIZE, C.ROOM_SIZE, 6);
    normal.set(-1, 0, 0);
    line1110.setNormalDirection(auxVector2.set(-1, 0).angle());
    meshBuilder.rect(corner00, corner10, corner11, corner01, normal);
    corner00.set(0, C.ROOM_SIZE, 0);
    corner10.set(C.ROOM_SIZE, C.ROOM_SIZE, 0);
    corner11.set(C.ROOM_SIZE, C.ROOM_SIZE, 6);
    corner01.set(0, C.ROOM_SIZE, 6);
    normal.set(0, -1, 0);
    line0111.setNormalDirection(auxVector2.set(0, -1).angle());
    meshBuilder.rect(corner00, corner10, corner11, corner01, normal);
    corner00.set(0, 0, 0);
    corner10.set(0, C.ROOM_SIZE, 0);
    corner11.set(0, C.ROOM_SIZE, 6);
    corner01.set(0, 0, 6);
    normal.set(1, 0, 0);
    line0001.setNormalDirection(auxVector2.set(1, 0).angle());
    meshBuilder.rect(corner00, corner10, corner11, corner01, normal);
    Model levelModel = modelBuilder.end();
    levelModelInstance = new ModelInstance(levelModel);

Эта часть появляется только один раз при загрузке уровня.Предполагается, что пулевые отверстия появятся в игре.

...