Mash Reference Manual | ||||
---|---|---|---|---|
Top | Description | Object Hierarchy | Implemented Interfaces | Properties |
MashModel; struct MashModelClass; ClutterActor * mash_model_new (void
); ClutterActor * mash_model_new_from_file (MashDataFlags flags
,const gchar *filename
,GError **error
); CoglHandle mash_model_get_material (MashModel *self
); void mash_model_set_material (MashModel *self
,CoglHandle material
); MashData * mash_model_get_data (MashModel *self
); void mash_model_set_data (MashModel *self
,MashData *data
); gboolean mash_model_get_fit_to_allocation (MashModel *self
); void mash_model_set_fit_to_allocation (MashModel *self
,gboolean fit_to_allocation
); MashLightSet * mash_model_get_light_set (MashModel *self
); void mash_model_set_light_set (MashModel *self
,MashLightSet *light_set
);
MashModel implements ClutterScriptable, ClutterAnimatable and AtkImplementorIface.
"data" MashData* : Read / Write "fit-to-allocation" gboolean : Read / Write "light-set" MashLightSet* : Read / Write "material" CoglHandle* : Read / Write
MashModel is an actor subclass that can be used to render a 3D model. The model is a normal ClutterActor that can be animated and positioned with the methods of ClutterActor.
By default the model will be scaled to best fit within the size of
the actor. Therefore it is possible to take a small model that may
have positions ranging between -1 and 1 and draw it at a larger
size just by setting the size on the actor. This behaviour can be
disabled with mash_model_set_fit_to_allocation()
.
The actual data for the model is stored in a separate object called
MashData. This can be used to share the data for a model
between multiple actors without having to duplicate resources of
the data. Alternatively mash_model_new_from_file()
can be
used as a convenience wrapper to easily make an actor out of a PLY
without having to worry about MashData. To share the data
with another actor, call mash_model_get_data()
on an
existing actor then call mash_model_set_data()
with the
return value on a new actor.
The model can be rendered with any Cogl material. By default the model will use a solid white material. The material color is blended with the model's vertex colors so the white material will cause the vertex colors to be used directly. MashData is able to load texture coordinates from the PLY file so it is possible to render a textured model by setting a texture layer on the material, like so:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* Create an actor out of a PLY model file */ ClutterActor *model = mash_model_new_from_file ("some-model.ply", NULL); /* Get a handle to the default material for the actor */ CoglHandle material = mash_model_get_material (MASH_MODEL (model)); /* Load a texture image from a file */ CoglHandle texture = cogl_texture_new_from_file ("some-image.png", COGL_TEXTURE_NONE, COGL_PIXEL_FORMAT_ANY, NULL); /* Set a texture layer on the material */ cogl_material_set_layer (material, 0, texture); /* The texture is now referenced by the material so we can drop the reference we have */ cogl_handle_unref (texture); |
struct MashModelClass { };
The MashModelClass structure contains only private data.
ClutterActor * mash_model_new (void
);
Constructs a new MashModel. Nothing will be rendered by the
model until a MashData is attached using
mash_model_set_data()
.
Returns : |
a new MashModel. |
ClutterActor * mash_model_new_from_file (MashDataFlags flags
,const gchar *filename
,GError **error
);
This is a convenience function that creates a new MashData
and immediately loads the data in filename
. If the load succeeds a
new MashModel will be created for the data. The model has a
default white material so that if vertices of the model have any
color attributes they will be used directly. The material does not
have textures by default so if you want the model to be textured
you will need to modify the material.
|
Flags for loading the data. |
|
The name of a PLY file to load. |
|
Return location for a GError or NULL . |
Returns : |
a new MashModel or NULL if the load failed. |
CoglHandle mash_model_get_material (MashModel *self
);
Gets the material that will be used to render the model. The material can be modified to affect the appearence of the model. By default the material will be solid white.
|
A MashModel instance |
Returns : |
a handle to the Cogl material used by the model. |
void mash_model_set_material (MashModel *self
,CoglHandle material
);
Replaces the material that will be used to render the model with the given one. By default a MashModel will use a solid white material. However the color of the material is still blended with the vertex colors so the white material will cause the vertex colors to be used directly. If you want the model to be textured you will need to create a material that has a texture layer and set it with this function.
If a MashLightSet is used with the model then the material given here will be modified to use the program generated by that light set. If multiple models are expected to use the same material with different light sets, it would be better to use a different copy of the same material for each set of models so that they don't repeatedly change the program on the material during paint.
|
A MashModel instance |
|
A handle to a Cogl material |
MashData * mash_model_get_data (MashModel *self
);
Gets the model data that will be used to render the actor.
void mash_model_set_data (MashModel *self
,MashData *data
);
Replaces the data used by the actor with data
. A reference is
taken on data
so if you no longer need it you should unref it with
g_object_unref()
.
gboolean mash_model_get_fit_to_allocation (MashModel *self
);
|
A MashModel instance |
Returns : |
whether the actor will try to scale the model to fit within the allocation. |
void mash_model_set_fit_to_allocation (MashModel *self
,gboolean fit_to_allocation
);
This sets whether the actor should scale the model to fit the
actor's allocation. If it's TRUE
then all of the axes of the model
will be scaled by the same amount to fill the allocation as much as
possible without distorting the aspect ratio. The model is also
translated so that it is at the center of the allocation and
centered at 0 along the z axis. The size along the z axis is not
considered when calculating a scale so if the model is largest
along that axis then the actor may appear too large. The
transformations are applied in addition to the actor's
transformations so it is still possible scale the actor further
using the scale-x and scale-y properties. The preferred size of the
actor will be the width and height of the model. If
width-for-height or height-for-width allocation is being used then
MashModel will return whatever width or height will exactly
preserve the aspect ratio.
If the value is FALSE
then the actor is not transformed so the
origin of the model will be the top left corner of the actor. The
preferred size of the actor will be maximum extents of the model
although the allocation is not considered during paint so if the
model extends past the allocated size then it will draw outside the
allocation.
The default value is TRUE
.
|
A MashModel instance |
|
New value |
MashLightSet * mash_model_get_light_set (MashModel *self
);
|
A MashModel instance |
Returns : |
the MashLightSet previously set with
mash_model_set_light_set() . |
Since 0.2
void mash_model_set_light_set (MashModel *self
,MashLightSet *light_set
);
This sets the MashLightSet that will be used to render the
model. Alternatively NULL
can be passed to disable lighting for
this model. The light set represents a collection of MashLights that will affect the appearance of the model.
|
A MashModel instance |
|
A new MashLightSet |
Since 0.2
"fit-to-allocation"
property "fit-to-allocation" gboolean : Read / Write
Whether to transform the model so that it fills the actor's allocation while preserving the aspect ratio.
Default value: TRUE
"light-set"
property"light-set" MashLightSet* : Read / Write
The MashLightSet to use for the lighting model.