Example #1
0
  @Deprecated
  public static Model createFromMesh(
      final Mesh mesh,
      int indexOffset,
      int vertexCount,
      int primitiveType,
      final Material material) {
    Model result = new Model();
    MeshPart meshPart = new MeshPart();
    meshPart.id = "part1";
    meshPart.indexOffset = indexOffset;
    meshPart.numVertices = vertexCount;
    meshPart.primitiveType = primitiveType;
    meshPart.mesh = mesh;

    NodePart partMaterial = new NodePart();
    partMaterial.material = material;
    partMaterial.meshPart = meshPart;
    Node node = new Node();
    node.id = "node1";
    node.parts.add(partMaterial);

    result.meshes.add(mesh);
    result.materials.add(material);
    result.nodes.add(node);
    result.meshParts.add(meshPart);
    result.manageDisposable(mesh);
    return result;
  }
Example #2
0
 /**
  * Adds the nodes of the specified model to a new node the model being build. After this method
  * the given model can no longer be used. Do not call the {@link Model#dispose()} method on that
  * model.
  *
  * @return The newly created node containing the nodes of the given model.
  */
 public Node node(final String id, final Model model) {
   final Node node = new Node();
   node.id = id;
   node.children.addAll(model.nodes);
   node(node);
   for (final Disposable disposable : model.getManagedDisposables()) manage(disposable);
   return node;
 }
Example #3
0
  public static Model getTankModel() {
    Material material = new Material(ColorAttribute.createDiffuse(Color.GREEN));
    ModelBuilder modelBuilder = new ModelBuilder();
    modelBuilder.begin();

    Node node1 = modelBuilder.node();
    node1.id = "body";
    node1.translation.set(0, 1f, 0);
    MeshPartBuilder meshBuilder =
        modelBuilder.part(
            "bodyPart",
            GL20.GL_TRIANGLES,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal,
            material);
    meshBuilder.box(10, 2, 6);

    Node node2 = modelBuilder.node();
    node2.id = "tower";
    node2.translation.set(1f, 3f, 0f);
    meshBuilder =
        modelBuilder.part(
            "towerPart",
            GL20.GL_TRIANGLES,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal,
            material);
    meshBuilder.box(4, 2, 3);

    Node node3 = modelBuilder.node();
    node3.id = "gun";
    node3.translation.set(5f, 3f, 0f);
    node3.rotation.set(new Vector3(0, 0, 1), 90f);
    meshBuilder =
        modelBuilder.part(
            "gunPart",
            GL20.GL_TRIANGLES,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal,
            material);
    meshBuilder.cylinder(0.5f, 5f, 0.5f, 6);

    Model model = modelBuilder.end();

    return model;
  }
Example #4
0
  private Node loadNode(Node parent, ModelNode modelNode) {
    Node node = new Node();
    node.id = modelNode.id;
    node.parent = parent;

    if (modelNode.translation != null) node.translation.set(modelNode.translation);
    if (modelNode.rotation != null) node.rotation.set(modelNode.rotation);
    if (modelNode.scale != null) node.scale.set(modelNode.scale);
    // FIXME create temporary maps for faster lookup?
    if (modelNode.parts != null) {
      for (ModelNodePart modelNodePart : modelNode.parts) {
        MeshPart meshPart = null;
        Material meshMaterial = null;

        if (modelNodePart.meshPartId != null) {
          for (MeshPart part : meshParts) {
            if (modelNodePart.meshPartId.equals(part.id)) {
              meshPart = part;
              break;
            }
          }
        }

        if (modelNodePart.materialId != null) {
          for (Material material : materials) {
            if (modelNodePart.materialId.equals(material.id)) {
              meshMaterial = material;
              break;
            }
          }
        }

        if (meshPart == null || meshMaterial == null)
          throw new GdxRuntimeException("Invalid node: " + node.id);

        if (meshPart != null && meshMaterial != null) {
          NodePart nodePart = new NodePart();
          nodePart.meshPart = meshPart;
          nodePart.material = meshMaterial;
          node.parts.add(nodePart);
          if (modelNodePart.bones != null) nodePartBones.put(nodePart, modelNodePart.bones);
        }
      }
    }

    if (modelNode.children != null) {
      for (ModelNode child : modelNode.children) {
        node.children.add(loadNode(node, child));
      }
    }

    return node;
  }
Example #5
0
  private Node loadNode(Node parent, ModelNode modelNode) {
    Node node = new Node();
    node.id = modelNode.id;
    // node.boneId = modelNode.boneId; // FIXME check meaning of this, breadth first index of node
    // hierarchy?
    node.parent = parent;
    if (modelNode.translation != null) node.translation.set(modelNode.translation);
    if (modelNode.rotation != null) node.rotation.set(modelNode.rotation);
    if (modelNode.scale != null) node.scale.set(modelNode.scale);
    // FIXME create temporary maps for faster lookup?
    if (modelNode.parts != null) {
      for (ModelNodePart modelNodePart : modelNode.parts) {
        MeshPart meshPart = null;
        Material meshMaterial = null;
        if (modelNodePart.meshPartId != null) {
          for (MeshPart part : meshParts) {
            // FIXME need to make sure this is unique by adding mesh id to mesh part id!
            if (modelNodePart.meshPartId.equals(part.id)) {
              meshPart = part;
              break;
            }
          }
        }
        if (modelNodePart.materialId != null) {
          for (Material material : materials) {
            if (modelNodePart.materialId.equals(material.id)) {
              meshMaterial = material;
              break;
            }
          }
        }

        // FIXME what if meshPart is set but meshMaterial isn't and vice versa?
        if (meshPart != null && meshMaterial != null) {
          NodePart nodePart = new NodePart();
          nodePart.meshPart = meshPart;
          nodePart.material = meshMaterial;
          node.parts.add(nodePart);
          if (modelNodePart.bones != null) nodePartBones.put(nodePart, modelNodePart.bones);
        }
      }
    }

    if (modelNode.children != null) {
      for (ModelNode child : modelNode.children) {
        node.children.add(loadNode(node, child));
      }
    }

    return node;
  }
Example #6
0
 /**
  * Add a node to the model.
  *
  * @return The node being created.
  */
 public Node node() {
   final Node node = new Node();
   node(node);
   node.id = "node" + model.nodes.size;
   return node;
 }