Combining Models with ModelBuilder in LibGDX

I am new to LibGDX 3D objects and I wonder how I can combine two cylinders created using the ModelBuilder # createCylinder class . I have two models:

  • The first is a white cylinder,
  • Second red cylinder with the same properties

How to get only one cylinder for rendering (instance / model / object / everything that can be displayed), consisting of red over white (or vice versa).

Pixmap pixmap1 = new Pixmap(1, 1, Format.RGBA8888);
pixmap1.setColor(Color.WHITE);
pixmap1.fill();
Texture white = new Texture(pixmap1);
//...
Texture red = new Texture(pixmap2);

model1 = modelBuilder.createCylinder(4f, 6f, 4f, 16, 
        new Material(
                TextureAttribute.createDiffuse(white), 
                ColorAttribute.createSpecular(1,1,1,1), 
                FloatAttribute.createShininess(8f))
        , Usage.Position | Usage.Normal | Usage.TextureCoordinates);
model1I_white = new ModelInstance(model1, 0, 0, 0);
//...
model2I_red = new ModelInstance(model2, 0, 0, -2f);

Then I create ModelInstance with ModelBatch # render .

+4
source share
2 answers

createCylinder() 2 MeshBuilder ().

meshBuilder.begin();
meshBuilder.cylinder(4f, 6f, 4f, 16);
Mesh cylinder1 = meshBuilder.end();

meshBuilder.begin();
meshBuilder.cylinder(4f, 6f, 4f, 16);
Mesh cylinder2 = meshBuilder.end();


modelBuilder.begin();

modelBuilder.part("cylinder1", 
    cylinder1,
    Usage.Position | Usage.Normal | Usage.TextureCoordinates,
    new Material(
        TextureAttribute.createDiffuse(white), 
        ColorAttribute.createSpecular(1,1,1,1), 
        FloatAttribute.createShininess(8f)));

modelBuilder.part("cylinder2",
    cylinder2,
    Usage.Position | Usage.Normal | Usage.TextureCoordinates,
    new Material(
        TextureAttribute.createDiffuse(red), 
        ColorAttribute.createSpecular(1,1,1,1), 
        FloatAttribute.createShininess(8f)))
    .mesh.transform(new Matrix4().translate(0, 0, -2f));

Model finalCylinder = modelBuilder.end();
+4

Aurel .

, libGdx Api , ,

    MeshBuilder meshBuilder = new MeshBuilder();
    meshBuilder.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
    meshBuilder.part("id1", GL20.GL_TRIANGLES);
    meshBuilder.box(1f, 1f, 1f);
    Mesh mesh1 = meshBuilder.end();

    meshBuilder.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
    meshBuilder.part("id2", GL20.GL_TRIANGLES);
    meshBuilder.cylinder(1f, 1f, 1f, 16);
    Mesh mesh2 = meshBuilder.end();


    ModelBuilder modelBuilder = new ModelBuilder();
    modelBuilder.begin();

    modelBuilder.part("part1",
            mesh1,
            GL20.GL_TRIANGLES,
            new Material(ColorAttribute.createDiffuse(Color.RED)));

    modelBuilder.part("part2",
            mesh2,
            GL20.GL_TRIANGLES,
            new Material(ColorAttribute.createDiffuse(Color.RED)))
            .mesh.transform(new Matrix4().translate(1, 0, 0f));

, VertxtAttributes.Usage.ColorPacked meshBuilder.begin()

        meshBuilder.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.ColorPacked);
+1

Source: https://habr.com/ru/post/1526110/


All Articles