matrix 3 LIBG3D Library matrix Matrix manipulation and calculation Synopsis #include <g3d/matrix.h> typedef G3DMatrix; gboolean g3d_matrix_identity (G3DMatrix *matrix); gboolean g3d_matrix_multiply (G3DMatrix *m1, G3DMatrix *m2, G3DMatrix *rm); gboolean g3d_matrix_translate (G3DFloat x, G3DFloat y, G3DFloat z, G3DMatrix *rm); gboolean g3d_matrix_rotate (G3DFloat angle, G3DFloat ax, G3DFloat ay, G3DFloat az, G3DMatrix *rm); gboolean g3d_matrix_rotate_xyz (G3DFloat rx, G3DFloat ry, G3DFloat rz, G3DMatrix *rm); gboolean g3d_matrix_scale (G3DFloat x, G3DFloat y, G3DFloat z, G3DMatrix *rm); gboolean g3d_matrix_transpose (G3DMatrix *matrix); G3DFloat g3d_matrix_determinant (G3DMatrix *matrix); gboolean g3d_matrix_dump (G3DMatrix *matrix); Description Matrices in libg3d have the following layout: G3DMatrix matrix[16]: matrix[col * 4 + row] = f; Details G3DMatrix G3DMatrixtypedef G3DFloat G3DMatrix; Matrix element type. g3d_matrix_identity () g3d_matrix_identitygboolean g3d_matrix_identity (G3DMatrix *matrix); Sets the given matrix to the identity matrix. matrix : 4x4 matrix (float[16]) Returns : TRUE on success, FALSE else g3d_matrix_multiply () g3d_matrix_multiplygboolean g3d_matrix_multiply (G3DMatrix *m1, G3DMatrix *m2, G3DMatrix *rm); Multiplies the matrixes. m1 : first matrix m2 : second matrix rm : resulting matrix Returns : TRUE on success, FALSE else g3d_matrix_translate () g3d_matrix_translategboolean g3d_matrix_translate (G3DFloat x, G3DFloat y, G3DFloat z, G3DMatrix *rm); Adds a translation to the the matrix. x : x translation y : y translation z : z translation rm : resulting matrix Returns : TRUE on success, FALSE else g3d_matrix_rotate () g3d_matrix_rotategboolean g3d_matrix_rotate (G3DFloat angle, G3DFloat ax, G3DFloat ay, G3DFloat az, G3DMatrix *rm); Adds a rotation to the matrix. angle : rotation angle ax : x component of rotation axis ay : y component of rotation axis az : z component of rotation axis rm : resulting matrix Returns : TRUE on success, FALSE else g3d_matrix_rotate_xyz () g3d_matrix_rotate_xyzgboolean g3d_matrix_rotate_xyz (G3DFloat rx, G3DFloat ry, G3DFloat rz, G3DMatrix *rm); Adds a rotation around the 3 coordinate system axes to the matrix. rx : rotation around x axis ry : rotation around y axis rz : rotation around z axis rm : resulting matrix Returns : TRUE on success, FALSE else g3d_matrix_scale () g3d_matrix_scalegboolean g3d_matrix_scale (G3DFloat x, G3DFloat y, G3DFloat z, G3DMatrix *rm); Adds a scaling to the matrix. x : x factor y : y factor z : z factor rm : resulting matrix Returns : TRUE on success, FALSE else g3d_matrix_transpose () g3d_matrix_transposegboolean g3d_matrix_transpose (G3DMatrix *matrix); Transposes the matrix. matrix : the matrix Returns : TRUE on success, FALSE else g3d_matrix_determinant () g3d_matrix_determinantG3DFloat g3d_matrix_determinant (G3DMatrix *matrix); Calculate the determinant of the matrix (FIXME: not verified). matrix : the matrix Returns : the determinant. g3d_matrix_dump () g3d_matrix_dumpgboolean g3d_matrix_dump (G3DMatrix *matrix); If debugging is enabled, this function dump the matrix to stderr. matrix : the matrix Returns : TRUE if matrix is dumped, FALSE else