## object

object — Object manipulation

## Synopsis

    #include <g3d/object.h>

                        G3DObject;
                        G3DTransformation;
    void                g3d_object_free                     (G3DObject *object);
    gdouble             g3d_object_radius                   (G3DObject *object);
    gboolean            g3d_object_scale                    (G3DObject *object,
                                                             G3DFloat scale);
    gboolean            g3d_object_transform                (G3DObject *object,
                                                             G3DMatrix *matrix);
    gboolean            g3d_object_transform_normals        (G3DObject *object,
                                                             G3DMatrix *matrix);
    G3DObject *         g3d_object_duplicate                (G3DObject *object);
    gboolean            g3d_object_optimize                 (G3DObject *object);
    gboolean            g3d_object_smooth                   (G3DObject *object);
    gboolean            g3d_object_merge                    (G3DObject *o1,
                                                             G3DObject *o2);

## Description

Objects are parts of a model. In most file formats vertices and faces are grouped in some way into objects. Objects can be hierarchical, so what a model contains is basically an object tree.

## Details

### G3DObject

    typedef struct {
    	gchar *name;

    	GSList *materials;
    	GSList *faces;
    	GSList *objects;

    	/* transformation, may be NULL */
    	G3DTransformation *transformation;

    	/* don't render this object */
    	gboolean hide;

    	/* vertices */
    	guint32 vertex_count;
    	G3DVector *vertex_data;
    } G3DObject;

A three-dimensional object.

gchar *`name`; | name of object
GSList *`materials`; | list of materials
GSList *`faces`; | list of faces
GSList *`objects`; | list of sub-objects
G3DTransformation *`transformation`; | optional transformation
gboolean `hide`; | flag to disable object rendering
guint32 `vertex_count`; | number of vertices
G3DVector *`vertex_data`; | vertex vector data

### G3DTransformation

    typedef struct {
    	G3DMatrix matrix[16];
    	guint32 flags;
    } G3DTransformation;

A three-dimensional matrix transformation object.

G3DMatrix `matrix`[16]; | the transformation matrix
guint32 `flags`; | flags

### g3d_object_free ()

    void                g3d_object_free                     (G3DObject *object);

Frees all memory allocated for that object.

`object` : | the object to free

### g3d_object_radius ()

    gdouble             g3d_object_radius                   (G3DObject *object);

Calculates the radius of the object. This is the maximum from the center to a vertex.

`object` : | the object to measure
Returns : | the radius of the given object

### g3d_object_scale ()

    gboolean            g3d_object_scale                    (G3DObject *object,
                                                             G3DFloat scale);

Resizes the object by the factor `scale`.

`object` : | the object to scale
`scale` : | scale factor
Returns : | TRUE on success, FALSE else

### g3d_object_transform ()

    gboolean            g3d_object_transform                (G3DObject *object,
                                                             G3DMatrix *matrix);

Multiplies all vertices of the object with the transformation matrix.

`object` : | the object to transform
`matrix` : | the transformation matrix
Returns : | TRUE on success, FALSE else

### g3d_object_transform_normals ()

    gboolean            g3d_object_transform_normals        (G3DObject *object,
                                                             G3DMatrix *matrix);

Multiplies all normals of the object with the transformation matrix.

`object` : | the object to transform
`matrix` : | the transformation matrix
Returns : | TRUE on success, FALSE else

### g3d_object_duplicate ()

    G3DObject *         g3d_object_duplicate                (G3DObject *object);

Duplicates an object with all vertices, faces and materials.

`object` : | the object to duplicate
Returns : | the new clone object

### g3d_object_optimize ()

    gboolean            g3d_object_optimize                 (G3DObject *object);

Puts all vertex and face information into special arrays for faster rendering. It is deprecated and should not be used.

`object` : | the object to optimize
Returns : | TRUE on success, FALSE else

### g3d_object_smooth ()

    gboolean            g3d_object_smooth                   (G3DObject *object);

FIXME: unimplemented.

`object` : | the object to smooth
Returns : | TRUE on success, FALSE else

### g3d_object_merge ()

    gboolean            g3d_object_merge                    (G3DObject *o1,
                                                             G3DObject *o2);

Merges both objects into `o1`. FIXME: needs cleanup

`o1` : | first and target object
`o2` : | second object
Returns : | TRUE on success, FALSE else