Class Model

java.lang.Object
com.badlogic.gdx.graphics.g3d.Model
All Implemented Interfaces:
Disposable

public class Model extends Object implements Disposable
A model represents a 3D assets. It stores a hierarchy of nodes. A node has a transform and optionally a graphical part in form of a MeshPart and Material. Mesh parts reference subsets of vertices in one of the meshes of the model. Animations can be applied to nodes, to modify their transform (translation, rotation, scale) over time.

A model can be rendered by creating a ModelInstance from it. That instance has an additional transform to position the model in the world, and allows modification of materials and nodes without destroying the original model. The original model is the owner of any meshes and textures, all instances created from the model share these resources. Disposing the model will automatically make all instances invalid!

A model is created from ModelData, which in turn is loaded by a ModelLoader.
  • Field Details

    • materials

      public final Array<Material> materials
      the materials of the model, used by nodes that have a graphical representation FIXME not sure if superfluous, allows modification of materials without having to traverse the nodes
    • nodes

      public final Array<Node> nodes
      root nodes of the model
    • animations

      public final Array<Animation> animations
      animations of the model, modifying node transformations
    • meshes

      public final Array<Mesh> meshes
      the meshes of the model
    • meshParts

      public final Array<MeshPart> meshParts
      parts of meshes, used by nodes that have a graphical representation FIXME not sure if superfluous, stored in Nodes as well, could be useful to create bullet meshes
    • disposables

      protected final Array<Disposable> disposables
      Array of disposable resources like textures or meshes the Model is responsible for disposing
  • Constructor Details

  • Method Details

    • load

      protected void load(ModelData modelData, TextureProvider textureProvider)
    • loadAnimations

      protected void loadAnimations(Iterable<ModelAnimation> modelAnimations)
    • loadNodes

      protected void loadNodes(Iterable<ModelNode> modelNodes)
    • loadNode

      protected Node loadNode(ModelNode modelNode)
    • loadMeshes

      protected void loadMeshes(Iterable<ModelMesh> meshes)
    • convertMesh

      protected void convertMesh(ModelMesh modelMesh)
    • loadMaterials

      protected void loadMaterials(Iterable<ModelMaterial> modelMaterials, TextureProvider textureProvider)
    • convertMaterial

      protected Material convertMaterial(ModelMaterial mtl, TextureProvider textureProvider)
    • manageDisposable

      public void manageDisposable(Disposable disposable)
      Adds a Disposable to be managed and disposed by this Model. Can be used to keep track of manually loaded textures for ModelInstance.
      Parameters:
      disposable - the Disposable
    • getManagedDisposables

      public Iterable<Disposable> getManagedDisposables()
      Returns:
      the Disposable objects that will be disposed when the dispose() method is called.
    • dispose

      public void dispose()
      Description copied from interface: Disposable
      Releases all resources of this object.
      Specified by:
      dispose in interface Disposable
    • calculateTransforms

      public void calculateTransforms()
      Calculates the local and world transform of all Node instances in this model, recursively. First each Node.localTransform transform is calculated based on the translation, rotation and scale of each Node. Then each Node.calculateWorldTransform() is calculated, based on the parent's world transform and the local transform of each Node. Finally, the animation bone matrices are updated accordingly.

      This method can be used to recalculate all transforms if any of the Node's local properties (translation, rotation, scale) was modified.
    • calculateBoundingBox

      public BoundingBox calculateBoundingBox(BoundingBox out)
      Calculate the bounding box of this model instance. This is a potential slow operation, it is advised to cache the result.
      Parameters:
      out - the BoundingBox that will be set with the bounds.
      Returns:
      the out parameter for chaining
    • extendBoundingBox

      public BoundingBox extendBoundingBox(BoundingBox out)
      Extends the bounding box with the bounds of this model instance. This is a potential slow operation, it is advised to cache the result.
      Parameters:
      out - the BoundingBox that will be extended with the bounds.
      Returns:
      the out parameter for chaining
    • getAnimation

      public Animation getAnimation(String id)
      Parameters:
      id - The ID of the animation to fetch (case sensitive).
      Returns:
      The Animation with the specified id, or null if not available.
    • getAnimation

      public Animation getAnimation(String id, boolean ignoreCase)
      Parameters:
      id - The ID of the animation to fetch.
      ignoreCase - whether to use case sensitivity when comparing the animation id.
      Returns:
      The Animation with the specified id, or null if not available.
    • getMaterial

      public Material getMaterial(String id)
      Parameters:
      id - The ID of the material to fetch.
      Returns:
      The Material with the specified id, or null if not available.
    • getMaterial

      public Material getMaterial(String id, boolean ignoreCase)
      Parameters:
      id - The ID of the material to fetch.
      ignoreCase - whether to use case sensitivity when comparing the material id.
      Returns:
      The Material with the specified id, or null if not available.
    • getNode

      public Node getNode(String id)
      Parameters:
      id - The ID of the node to fetch.
      Returns:
      The Node with the specified id, or null if not found.
    • getNode

      public Node getNode(String id, boolean recursive)
      Parameters:
      id - The ID of the node to fetch.
      recursive - false to fetch a root node only, true to search the entire node tree for the specified node.
      Returns:
      The Node with the specified id, or null if not found.
    • getNode

      public Node getNode(String id, boolean recursive, boolean ignoreCase)
      Parameters:
      id - The ID of the node to fetch.
      recursive - false to fetch a root node only, true to search the entire node tree for the specified node.
      ignoreCase - whether to use case sensitivity when comparing the node id.
      Returns:
      The Node with the specified id, or null if not found.