Mesh and Material, loaded from the assets folder by defaultInstances can be created at any time and must be loaded after or at the end of create_scene.
If loading fails, the model is replaced by placeholder_model.
import gamnit::depth
var model = new Model("path/in/assets.obj")
model.loadThe most simple model is LeafModel, composed of a single Mesh and Material.
It can be easily created programmatically to display simple geometries.
Whereas CompositeModel is composed of one or many LeafModel and is usually
loaded from the assets folder as a ModelAsset.
Instances of ModelAsset must be in the format OBJ and MAT,
and their texture in PNG or JPG.
gamnit :: Model :: defaultinit
gamnit :: Model :: dimensions
Dimensions of the bounding box containing all verticesgamnit :: Model :: dimensions=
Dimensions of the bounding box containing all verticesgamnit :: Model :: named_parts
Sub-models with names, usually declared in the asset filegamnit :: Model :: named_parts=
Sub-models with names, usually declared in the asset filecore :: Object :: class_factory
Implementation used byget_class to create the specific class.
			gamnit :: Model :: defaultinit
core :: Object :: defaultinit
gamnit :: Model :: dimensions
Dimensions of the bounding box containing all verticesgamnit :: Model :: dimensions=
Dimensions of the bounding box containing all verticescore :: Object :: is_same_instance
Return true ifself and other are the same instance (i.e. same identity).
			core :: Object :: is_same_serialized
Isself the same as other in a serialization context?
			core :: Object :: is_same_type
Return true ifself and other have the same dynamic type.
			gamnit :: Model :: named_parts
Sub-models with names, usually declared in the asset filegamnit :: Model :: named_parts=
Sub-models with names, usually declared in the asset filecore :: Object :: output_class_name
Display class name on stdout (debug only).
# 3D model composed of `Mesh` and `Material`, loaded from the assets folder by default
#
# Instances can be created at any time and must be loaded after or at the end of `create_scene`.
# If loading fails, the model is replaced by `placeholder_model`.
#
# ~~~
# import gamnit::depth
#
# var model = new Model("path/in/assets.obj")
# model.load
# ~~~
#
# The most simple model is `LeafModel`, composed of a single `Mesh` and `Material`.
# It can be easily created programmatically to display simple geometries.
# Whereas `CompositeModel` is composed of one or many `LeafModel` and is usually
# loaded from the assets folder as a `ModelAsset`.
# Instances of `ModelAsset` must be in the format OBJ and MAT,
# and their texture in PNG or JPG.
abstract class Model
	# Load this model in memory
	fun load do end
	# Errors raised at loading
	var errors = new Array[Error]
	# All `LeafModel` composing this model
	#
	# Usually, there is one `LeafModel` per material.
	# At each frame, each material is asked to draw all the live `LeafModel` instaces.
	fun leaves: Array[LeafModel] is abstract
	# Sub-models with names, usually declared in the asset file
	var named_parts = new Map[Text, Model]
end
					lib/gamnit/depth/depth_core.nit:85,1--119,3
				
redef class Model
	# Dimensions of the bounding box containing all vertices
	var dimensions = new Point3d[Float](max.x-min.x, max.y-min.y, max.z-min.z) is lazy, writable
	# Center coordinates of all the vertices
	var center = new Point3d[Float]((min.x+max.x)/2.0, (min.y+max.y)/2.0, (min.z+max.z)/2.0) is lazy, writable
	# Minimum coordinates of all vertices on each axes
	#
	# This is a corner of the bounding box.
	var min: Point3d[Float] is lazy do
		var mx = inf
		var my = inf
		var mz = inf
		for leaf in leaves do
			var lm = leaf.mesh.min
			mx = mx.min(lm.x)
			my = my.min(lm.y)
			mz = mz.min(lm.z)
		end
		return new Point3d[Float](mx, my, mz)
	end
	# Maximum coordinates of all vertices on each axes
	#
	# This is a corner of the bounding box.
	var max: Point3d[Float] is lazy do
		var mx = -inf
		var my = -inf
		var mz = -inf
		for leaf in leaves do
			var lm = leaf.mesh.max
			mx = mx.max(lm.x)
			my = my.max(lm.y)
			mz = mz.max(lm.z)
		end
		return new Point3d[Float](mx, my, mz)
	end
end
					lib/gamnit/depth/model_dimensions.nit:20,1--59,3