com.badlogic.gdx.graphics.g3d
Class Model

java.lang.Object
  extended by 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.

Author:
badlogic, xoppa

Field Summary
 Array<Animation> animations
          animations of the model, modifying node transformations
 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
 Array<Mesh> meshes
          the meshes of the model
 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
 Array<Node> nodes
          root nodes of the model
 
Constructor Summary
Model()
          Constructs an empty model.
Model(ModelData modelData)
          Constructs a new Model based on the ModelData.
Model(ModelData modelData, TextureProvider textureProvider)
          Constructs a new Model based on the ModelData.
 
Method Summary
 BoundingBox calculateBoundingBox(BoundingBox out)
          Calculate the bounding box of this model instance.
 void calculateTransforms()
          Calculates the local and world transform of all Node instances in this model, recursively.
 void dispose()
          Releases all resources of this object.
 BoundingBox extendBoundingBox(BoundingBox out)
          Extends the bounding box with the bounds of this model instance.
 Animation getAnimation(String id)
           
 Animation getAnimation(String id, boolean ignoreCase)
           
 Iterable<Disposable> getManagedDisposables()
           
 Material getMaterial(String id)
           
 Material getMaterial(String id, boolean ignoreCase)
           
 Node getNode(String id)
           
 Node getNode(String id, boolean recursive)
           
 Node getNode(String id, boolean recursive, boolean ignoreCase)
           
 void manageDisposable(Disposable disposable)
          Adds a Disposable to be managed and disposed by this Model.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

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

Constructor Detail

Model

public Model()
Constructs an empty model. Manual created models do not manage their resources by default. Use manageDisposable(Disposable) to add resources to be managed by this model.


Model

public Model(ModelData modelData)
Constructs a new Model based on the ModelData. Texture files will be loaded from the internal file storage via an TextureProvider.FileTextureProvider.

Parameters:
modelData - the ModelData got from e.g. ModelLoader

Model

public Model(ModelData modelData,
             TextureProvider textureProvider)
Constructs a new Model based on the ModelData.

Parameters:
modelData - the ModelData got from e.g. ModelLoader
textureProvider - the TextureProvider to use for loading the textures
Method Detail

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.


Copyright © 2013. All Rights Reserved.