Class Model

  • All Implemented Interfaces:
    Disposable

    public class Model
    extends java.lang.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 Detail

      • 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
    • Method Detail

      • loadAnimations

        protected void loadAnimations​(java.lang.Iterable<ModelAnimation> modelAnimations)
      • loadNodes

        protected void loadNodes​(java.lang.Iterable<ModelNode> modelNodes)
      • loadMeshes

        protected void loadMeshes​(java.lang.Iterable<ModelMesh> meshes)
      • convertMesh

        protected void convertMesh​(ModelMesh modelMesh)
      • 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 java.lang.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​(java.lang.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​(java.lang.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​(java.lang.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​(java.lang.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​(java.lang.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​(java.lang.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​(java.lang.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.