Example usage for com.badlogic.gdx.graphics.g3d.utils ModelBuilder node

List of usage examples for com.badlogic.gdx.graphics.g3d.utils ModelBuilder node

Introduction

In this page you can find the example usage for com.badlogic.gdx.graphics.g3d.utils ModelBuilder node.

Prototype

Node node

To view the source code for com.badlogic.gdx.graphics.g3d.utils ModelBuilder node.

Click Source Link

Document

The node currently being build

Usage

From source file:com.github.fauu.helix.game.Game.java

License:Open Source License

@Override
public void create() {
    camera = new Camera(new Vector3(32, 32, 0));

    cameraInputController = new CameraInputController(camera);
    //    Gdx.input.setInputProcessor(cameraInputController);

    assets = new AssetManager();
    assets.setLoader(GeometrySet.class, new GeometrySetLoader(new InternalFileHandleResolver()));
    assets.setLoader(MapRegion.class, new MapRegionLoader(new InternalFileHandleResolver()));
    assets.load("assets/mapregions/0.hmr", MapRegion.class);
    assets.finishLoading();/*from  ww  w . ja  va 2s. com*/

    mapRegion = assets.get("assets/mapregions/0.hmr", MapRegion.class);

    spriteBatch = new SpriteBatch();

    renderer = new Renderer();

    player = new Player(new Vector2(8, 17), new Texture(Gdx.files.internal("assets/sprites/player.png")));
    camera.move(player.getRealPosition());

    final ModelBuilder modelBuilder = new ModelBuilder();

    waterTexture = new Texture("assets/textures/water.png");

    final MeshPartBuilder.VertexInfo corner00 = new MeshPartBuilder.VertexInfo();
    corner00.hasPosition = true;
    corner00.hasNormal = true;
    corner00.hasUV = true;
    corner00.setPos(0, 0, 0);
    corner00.setNor(0, 1, 0);
    corner00.setUV(0, 0);

    final MeshPartBuilder.VertexInfo corner10 = new MeshPartBuilder.VertexInfo();
    corner10.hasPosition = true;
    corner10.hasNormal = true;
    corner10.hasUV = true;
    corner10.setPos(4, 0, 0);
    corner10.setNor(0, 1, 0);
    corner10.setUV(0, 1);

    final MeshPartBuilder.VertexInfo corner11 = new MeshPartBuilder.VertexInfo();
    corner11.hasPosition = true;
    corner11.hasNormal = true;
    corner11.hasUV = true;
    corner11.setPos(4, 0, 14);
    corner11.setNor(0, 1, 0);
    corner11.setUV(1, 1);

    final MeshPartBuilder.VertexInfo corner01 = new MeshPartBuilder.VertexInfo();
    corner01.hasPosition = true;
    corner01.hasNormal = true;
    corner01.hasUV = true;
    corner01.setPos(0, 0, 14);
    corner01.setNor(0, 1, 0);
    corner01.setUV(1, 0);

    modelBuilder.begin();
    modelBuilder.node();
    MeshPartBuilder meshPartBuilder = modelBuilder.part("water1", GL20.GL_TRIANGLES,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.TextureCoordinates,
            new Material(TextureAttribute.createDiffuse(waterTexture),
                    ColorAttribute.createDiffuse(Color.WHITE),
                    new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)));
    meshPartBuilder.rect(corner00, corner10, corner11, corner01);

    waterModel = modelBuilder.end();

    waterModelInstance = new ModelInstance(waterModel);
    WaterData waterData = new WaterData();
    waterData.waveAmplitude = 0.02f;
    waterData.waveAngle = 0;
    waterData.waveFrequency = 0.5f;
    waterModelInstance.userData = waterData;
    //    waterModelInstance.userData = new float[2];
    //    ((float[]) waterModelInstance.userData)[0] = 0; // waveAngle
    //    ((float[]) waterModelInstance.userData)[1] = 0.1f; // waveAmplitude

    waterModelInstance.transform.translate(8, -0.1f, 19).rotate(0, 1, 0, -90).scale(1, 1, -1);
    //    ((float[]) waterModelInstance.userData)[2] = 8; // startX
    //    ((float[]) waterModelInstance.userData)[3] = 7; // sizeX
    //    ((float[]) waterModelInstance.userData)[4] = 19; // startZ
    //    ((float[]) waterModelInstance.userData)[5] = 5; // sizeZ
}

From source file:com.mbrlabs.mundus.editor.utils.UsefulMeshs.java

License:Apache License

public static Model createArrowStub(Material mat, Vector3 from, Vector3 to) {
    ModelBuilder modelBuilder = new ModelBuilder();
    modelBuilder.begin();/*w w  w  . j av a 2 s.c  om*/
    MeshPartBuilder meshBuilder;
    // line
    meshBuilder = modelBuilder.part("line", GL20.GL_LINES,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.ColorUnpacked, mat);
    meshBuilder.line(from.x, from.y, from.z, to.x, to.y, to.z);
    // stub
    Node node = modelBuilder.node();
    node.translation.set(to.x, to.y, to.z);
    meshBuilder = modelBuilder.part("stub", GL20.GL_TRIANGLES, Usage.Position | Usage.Normal, mat);
    BoxShapeBuilder.build(meshBuilder, 2, 2, 2);
    return modelBuilder.end();
}

From source file:com.mygdx.game.utilities.ModelFactory.java

License:Apache License

public static Model buildCompassModel() {
    float compassScale = 5;
    ModelBuilder modelBuilder = new ModelBuilder();
    Model arrow = modelBuilder.createArrow(Vector3.Zero, Vector3.Y.cpy().scl(compassScale), null,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
    modelBuilder.begin();/*from  w ww .  j av  a  2 s  . com*/

    Mesh zArrow = arrow.meshes.first().copy(false);
    zArrow.transform(new Matrix4().rotate(Vector3.X, 90));
    modelBuilder.part("part1", zArrow, GL20.GL_TRIANGLES,
            new Material(ColorAttribute.createDiffuse(Color.BLUE)));

    modelBuilder.node();
    Mesh yArrow = arrow.meshes.first().copy(false);
    modelBuilder.part("part2", yArrow, GL20.GL_TRIANGLES,
            new Material(ColorAttribute.createDiffuse(Color.GREEN)));

    modelBuilder.node();
    Mesh xArrow = arrow.meshes.first().copy(false);
    xArrow.transform(new Matrix4().rotate(Vector3.Z, -90));
    modelBuilder.part("part3", xArrow, GL20.GL_TRIANGLES,
            new Material(ColorAttribute.createDiffuse(Color.RED)));

    arrow.dispose();
    return modelBuilder.end();
}

From source file:org.ah.gcode.preview.gcode.Layer.java

License:Open Source License

protected Mesh process(List<GCodeMovement> movements, int verticeElements, int indiceElements, int meshNo,
        ModelBuilder modelBuilder, Material material, float layerHeight) {

    MeshDetails meshDetails = new MeshDetails(verticeElements, indiceElements, meshNo);

    Mesh mesh = new Mesh(true, verticeElements, indiceElements, VertexAttribute.Position(),
            VertexAttribute.ColorUnpacked(), VertexAttribute.Normal(), VertexAttribute.TexCoords(0));

    int vi = 0;/*from   ww w. j  a v  a2s.  com*/
    int ii = 0;
    GCodeMovement previousMovement = null;
    for (GCodeMovement movement : movements) {

        movement.process(nextOrdinaryNumber, meshDetails, layerHeight, previousMovement);
        if (movement.isExtrude()) {
            previousMovement = movement;
        } else {
            previousMovement = null;
        }
        nextOrdinaryNumber = nextOrdinaryNumber + 1;

        vi = vi + movement.getVerticeElementsPerSegment();
        ii = ii + movement.getIndiceElementsPerSegment();
    }

    mesh.setVertices(meshDetails.vertices);
    mesh.setIndices(meshDetails.indices);

    Node node = modelBuilder.node();
    node.id = Integer.toString(meshNo);
    modelBuilder.part(Integer.toString(meshNo), mesh, GL20.GL_TRIANGLES, material);
    return mesh;
}

From source file:org.ah.gcode.preview.utils.ModelBuilders.java

License:Open Source License

public static void createTorus3(ModelBuilder modelBuilder, Material material, float zDiameter, float xDiameter,
        int zSections, int xSections, int bones) {

    float zAngle = FULL_CIRCLE / zSections;
    float xAngle = FULL_CIRCLE / xSections;
    float boneAngle = FULL_CIRCLE / bones;

    Mesh mesh = new Mesh(true, (zSections + 1) * (xSections + 1), zSections * xSections * 6,
            VertexAttribute.Position(), VertexAttribute.ColorUnpacked(), VertexAttribute.Normal(),
            VertexAttribute.TexCoords(0), VertexAttribute.BoneWeight(0), VertexAttribute.BoneWeight(1));

    float[] vertices = new float[(zSections + 1) * (xSections + 1) * 16];

    int bone1Index = 0;
    int bone2Index = 0;
    float bone1Weight = 0.0f;
    float bone2Weight = 0.0f;

    float zSectionToBoneRatio = (float) (zSections + 1) / (float) bones;
    float zSectionAngle = 0.0f;
    float zSectionWeight = 0.0f;

    for (int i = 0; i < zSections + 1; i++) {

        bone1Index = (int) (i / zSectionToBoneRatio);
        if (bone1Index >= bones) {
            throw new IllegalStateException();
        }// w w  w. j  av a 2 s .  c  o  m
        bone2Index = bone1Index + 1;
        if (bone2Index >= bones) {
            bone2Index = 0;
        }

        zSectionAngle = i * zAngle - bone1Index * boneAngle;
        if (zSectionAngle > FULL_CIRCLE) {
            zSectionAngle = zSectionAngle - FULL_CIRCLE;
        }
        zSectionWeight = zSectionAngle / boneAngle;
        bone1Weight = 1 - zSectionWeight;
        bone2Weight = zSectionWeight;

        for (int j = 0; j < xSections + 1; j++) {
            int v = (j * (zSections + 1) * 16) + i * 16;
            createTorusVertice3(zDiameter, xDiameter, zSections, xSections, zAngle, xAngle, vertices, j, i, v,
                    bone1Index, bone1Weight, bone2Index, bone2Weight);
        }
    }
    mesh.setVertices(vertices);

    short[] indices = new short[zSections * xSections * 6];

    createTorusIndices2(zSections, xSections, indices);

    mesh.setIndices(indices);

    Node node = modelBuilder.node();
    node.id = "torus";
    modelBuilder.part("torus", mesh, GL20.GL_TRIANGLES, material);
    Matrix4[] boneMatrixes = new Matrix4[bones];
    for (int i = 0; i < boneMatrixes.length; i++) {
        boneMatrixes[i] = new Matrix4().idt();
    }

    Array<NodePart> parts = node.parts;
    Object[] items = parts.items;
    NodePart item = (NodePart) items[0];
    item.bones = boneMatrixes;
    //node.parts.items[0].bones = boneMatrixes;
}