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.

Introduced properties

fun center: Point3d[Float]

gamnit :: Model :: center

Center coordinates of all the vertices
fun center=(center: Point3d[Float])

gamnit :: Model :: center=

Center coordinates of all the vertices
fun dimensions: Point3d[Float]

gamnit :: Model :: dimensions

Dimensions of the bounding box containing all vertices
fun dimensions=(dimensions: Point3d[Float])

gamnit :: Model :: dimensions=

Dimensions of the bounding box containing all vertices
fun errors: Array[Error]

gamnit :: Model :: errors

Errors raised at loading
protected fun errors=(errors: Array[Error])

gamnit :: Model :: errors=

Errors raised at loading
abstract fun leaves: Array[LeafModel]

gamnit :: Model :: leaves

All LeafModel composing this model
fun load

gamnit :: Model :: load

Load this model in memory
fun max: Point3d[Float]

gamnit :: Model :: max

Maximum coordinates of all vertices on each axes
protected fun max=(max: Point3d[Float])

gamnit :: Model :: max=

Maximum coordinates of all vertices on each axes
fun min: Point3d[Float]

gamnit :: Model :: min

Minimum coordinates of all vertices on each axes
protected fun min=(min: Point3d[Float])

gamnit :: Model :: min=

Minimum coordinates of all vertices on each axes
fun named_parts: Map[Text, Model]

gamnit :: Model :: named_parts

Sub-models with names, usually declared in the asset file
protected fun named_parts=(named_parts: Map[Text, Model])

gamnit :: Model :: named_parts=

Sub-models with names, usually declared in the asset file
init new(path: Text): Model

gamnit :: Model :: new

Prepare to load a model from the assets folder

Redefined properties

redef type SELF: Model

gamnit $ Model :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
fun center: Point3d[Float]

gamnit :: Model :: center

Center coordinates of all the vertices
fun center=(center: Point3d[Float])

gamnit :: Model :: center=

Center coordinates of all the vertices
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun dimensions: Point3d[Float]

gamnit :: Model :: dimensions

Dimensions of the bounding box containing all vertices
fun dimensions=(dimensions: Point3d[Float])

gamnit :: Model :: dimensions=

Dimensions of the bounding box containing all vertices
fun errors: Array[Error]

gamnit :: Model :: errors

Errors raised at loading
protected fun errors=(errors: Array[Error])

gamnit :: Model :: errors=

Errors raised at loading
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
abstract fun leaves: Array[LeafModel]

gamnit :: Model :: leaves

All LeafModel composing this model
fun load

gamnit :: Model :: load

Load this model in memory
fun max: Point3d[Float]

gamnit :: Model :: max

Maximum coordinates of all vertices on each axes
protected fun max=(max: Point3d[Float])

gamnit :: Model :: max=

Maximum coordinates of all vertices on each axes
fun min: Point3d[Float]

gamnit :: Model :: min

Minimum coordinates of all vertices on each axes
protected fun min=(min: Point3d[Float])

gamnit :: Model :: min=

Minimum coordinates of all vertices on each axes
fun named_parts: Map[Text, Model]

gamnit :: Model :: named_parts

Sub-models with names, usually declared in the asset file
protected fun named_parts=(named_parts: Map[Text, Model])

gamnit :: Model :: named_parts=

Sub-models with names, usually declared in the asset file
init new(path: Text): Model

gamnit :: Model :: new

Prepare to load a model from the assets folder
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
package_diagram gamnit::Model Model core::Object Object gamnit::Model->core::Object gamnit::CompositeModel CompositeModel gamnit::CompositeModel->gamnit::Model gamnit::LeafModel LeafModel gamnit::LeafModel->gamnit::Model gamnit::ModelAsset ModelAsset gamnit::ModelAsset->gamnit::Model

Parents

interface Object

core :: Object

The root of the class hierarchy.

Children

class CompositeModel

gamnit :: CompositeModel

Model composed of one or many other LeafModel
class LeafModel

gamnit :: LeafModel

Basic model with a single mesh and material
class ModelAsset

gamnit :: ModelAsset

Model loaded from a file in the asset folder

Class definitions

gamnit $ Model
# 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

gamnit :: model_dimensions $ Model
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

gamnit :: more_models $ Model
redef class Model
	# Prepare to load a model from the assets folder
	new(path: Text) do return new ModelAsset(path.to_s)
end
lib/gamnit/depth/more_models.nit:26,1--29,3