@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; }
/** * 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; }
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; }
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; }
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; }
/** * 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; }