libgpac Documentation of the core library of GPAC
Math 3d

3D Mathematics More...

Collaboration diagram for Math 3d:

## Data Structures

struct  SFVec3f
3D point or vector More...

struct  SFVec4f
4D vector More...

struct  GF_Matrix_unexposed
3D matrix More...

struct  GF_BBox
3D Bounding Box More...

struct  GF_Plane
Plane object. More...

struct  GF_Ray
3D Ray More...

## Macros

#define gf_vec_equal(v1, v2)

#define gf_vec_rev(v)

#define gf_vec_diff(res, v1, v2)

#define gf_quat_len(v)

#define gf_quat_norm(v)

#define gf_mx_init(_obj)
matrix initialization More...

#define gf_mx_is_identity(_obj)   ((!(_obj).m[1] && !(_obj).m[2] && !(_obj).m[3] && !(_obj).m[4] && !(_obj).m[6] && !(_obj).m[7] && !(_obj).m[8] && !(_obj).m[9] && !(_obj).m[11] && !(_obj).m[12] && !(_obj).m[13] && !(_obj).m[14] && ((_obj).m[0]==FIX_ONE) && ((_obj).m[5]==FIX_ONE)&& ((_obj).m[10]==FIX_ONE)&& ((_obj).m[15]==FIX_ONE)) ? 1 : 0)

#define gf_mx_copy(_obj, from)
matrix copy More...

## Enumerations

enum  { GF_BBOX_FRONT, GF_BBOX_INTER, GF_BBOX_BACK }

## Functions

Fixed gf_vec_len (GF_Vec v)
get 3D vector length More...

Fixed gf_vec_len_p (GF_Vec *v)
get 3D vector length More...

Fixed gf_vec_lensq (GF_Vec v)
get 3D vector square length More...

Fixed gf_vec_lensq_p (GF_Vec *v)
get 3D vector square length More...

Fixed gf_vec_dot (GF_Vec v1, GF_Vec v2)
get 3D vector dot product More...

Fixed gf_vec_dot_p (GF_Vec *v1, GF_Vec *v2)
get 3D vector dot product More...

void gf_vec_norm (GF_Vec *v)
vector normalization More...

GF_Vec gf_vec_scale (GF_Vec v, Fixed f)
vector scaling More...

GF_Vec gf_vec_scale_p (GF_Vec *v, Fixed f)
vector scaling More...

GF_Vec gf_vec_cross (GF_Vec v1, GF_Vec v2)
vector cross product More...

GF_Vec gf_vec_cross_p (GF_Vec *v1, GF_Vec *v2)
vector cross product More...

GF_Vec4 gf_quat_to_rotation (GF_Vec4 *quat)
quaternion to rotation More...

GF_Vec4 gf_quat_from_rotation (GF_Vec4 rot)
quaternion from rotation More...

GF_Vec4 gf_quat_get_inv (GF_Vec4 *quat)

GF_Vec4 gf_quat_multiply (GF_Vec4 *q1, GF_Vec4 *q2)
quaternion multiplication More...

GF_Vec gf_quat_rotate (GF_Vec4 *quat, GF_Vec *vec)
quaternion vector rotating More...

GF_Vec4 gf_quat_from_axis_cos (GF_Vec axis, Fixed cos_a)
quaternion from axis and cos More...

GF_Vec4 gf_quat_slerp (GF_Vec4 q1, GF_Vec4 q2, Fixed frac)
quaternion interpolation More...

void gf_bbox_refresh (GF_BBox *b)

void gf_bbox_from_rect (GF_BBox *box, GF_Rect *rc)

void gf_rect_from_bbox (GF_Rect *rc, GF_BBox *box)

void gf_bbox_grow_point (GF_BBox *box, GF_Vec pt)
bounding box expansion More...

void gf_bbox_union (GF_BBox *b1, GF_BBox *b2)

Bool gf_bbox_equal (GF_BBox *b1, GF_BBox *b2)

Bool gf_bbox_point_inside (GF_BBox *box, GF_Vec *p)

void gf_bbox_get_vertices (GF_Vec bmin, GF_Vec bmax, GF_Vec *vecs)
get box vertices More...

void gf_mx_from_mx2d (GF_Matrix *mx, GF_Matrix2D *mat2D)
matrix constructor from 2D More...

Bool gf_mx_equal (GF_Matrix *mx1, GF_Matrix *mx2)
matrix equality testing More...

void gf_mx_add_translation (GF_Matrix *mx, Fixed tx, Fixed ty, Fixed tz)
matrix translation More...

void gf_mx_add_scale (GF_Matrix *mx, Fixed sx, Fixed sy, Fixed sz)
matrix scaling More...

void gf_mx_add_rotation (GF_Matrix *mx, Fixed angle, Fixed x, Fixed y, Fixed z)
matrix rotating More...

void gf_mx_add_matrix (GF_Matrix *mx, GF_Matrix *mul)
matrices multiplication More...

void gf_mx_add_matrix_2d (GF_Matrix *mx, GF_Matrix2D *mat2D)
2D matrix multiplication More...

void gf_mx_inverse (GF_Matrix *mx)
affine matrix inversion More...

void gf_mx_transpose (GF_Matrix *mx)
transpose 4x4 matrix More...

void gf_mx_apply_vec (GF_Matrix *mx, GF_Vec *pt)
matrix point transformation More...

void gf_mx_apply_rect (GF_Matrix *_this, GF_Rect *rc)
matrix rectangle transformation More...

void gf_mx_ortho (GF_Matrix *mx, Fixed left, Fixed right, Fixed bottom, Fixed top, Fixed z_near, Fixed z_far)
ortho matrix construction More...

void gf_mx_ortho_reverse_z (GF_Matrix *mx, Fixed left, Fixed right, Fixed bottom, Fixed top, Fixed z_near, Fixed z_far)
ortho matrix with reverse Z construction More...

void gf_mx_perspective (GF_Matrix *mx, Fixed fov, Fixed aspect_ratio, Fixed z_near, Fixed z_far)
perspective matrix construction More...

void gf_mx_perspective_reverse_z (GF_Matrix *mx, Fixed fov, Fixed aspect_ratio, Fixed z_near, Fixed z_far)
perspective matrix with reverse Z construction More...

void gf_mx_lookat (GF_Matrix *mx, GF_Vec position, GF_Vec target, GF_Vec up_vector)
creates look matrix More...

void gf_mx_apply_bbox (GF_Matrix *mx, GF_BBox *b)
matrix box transformation More...

void gf_mx_apply_bbox_sphere (GF_Matrix *mx, GF_BBox *box)
matrix box sphere transformation More...

void gf_mx_add_matrix_4x4 (GF_Matrix *mat, GF_Matrix *mul)
non-affine matrix multiplication More...

Bool gf_mx_inverse_4x4 (GF_Matrix *mx)
non-affine matrix inversion More...

void gf_mx_apply_vec_4x4 (GF_Matrix *mx, GF_Vec4 *vec)
matrix 4D vector transformation More...

void gf_mx_get_yaw_pitch_roll (GF_Matrix *mx, Fixed *yaw, Fixed *pitch, Fixed *roll)
matrix yaw pitch roll decomposition More...

void gf_mx_decompose (GF_Matrix *mx, GF_Vec *translate, GF_Vec *scale, GF_Vec4 *rotate, GF_Vec *shear)
matrix decomposition More...

void gf_mx_rotate_vector (GF_Matrix *mx, GF_Vec *pt)
matrix vector rotation More...

void gf_mx_rotation_matrix_from_vectors (GF_Matrix *mx, GF_Vec x_axis, GF_Vec y_axis, GF_Vec z_axis)
matrix initialization from vectors More...

void gf_mx2d_from_mx (GF_Matrix2D *mx2d, GF_Matrix *mx)
matrix to 2D matrix More...

void gf_mx_apply_plane (GF_Matrix *mx, GF_Plane *plane)
matrix plane transformation More...

Fixed gf_plane_get_distance (GF_Plane *plane, GF_Vec *p)
point to plane distance More...

GF_Vec gf_closest_point_to_line (GF_Vec line_pt, GF_Vec line_vec, GF_Vec pt)
closest point on a line More...

u32 gf_plane_get_p_vertex_idx (GF_Plane *p)
box p-vertex index More...

Bool gf_plane_intersect_line (GF_Plane *plane, GF_Vec *linepoint, GF_Vec *linevec, GF_Vec *outPoint)
plane line intersection More...

u32 gf_bbox_plane_relation (GF_BBox *box, GF_Plane *p)
box-plane relation More...

GF_Ray gf_ray (GF_Vec start, GF_Vec end)
ray constructor More...

void gf_mx_apply_ray (GF_Matrix *mx, GF_Ray *r)
matrix ray transformation More...

Bool gf_ray_hit_box (GF_Ray *ray, GF_Vec min_edge, GF_Vec max_edge, GF_Vec *out_point)
ray box intersection test More...

Bool gf_ray_hit_sphere (GF_Ray *ray, GF_Vec *center, Fixed radius, GF_Vec *out_point)
ray sphere intersection test More...

Bool gf_ray_hit_triangle (GF_Ray *ray, GF_Vec *v0, GF_Vec *v1, GF_Vec *v2, Fixed *dist)
ray triangle intersection test More...

## Detailed Description

This section documents mathematic tools for 3D geometry operations

## ◆ __vec3f

 struct __vec3f

The 3D point object is used in all the GPAC framework for both point and vector representation.

3D vector (float)

Data Fields
Fixed x
Fixed y
Fixed z

## ◆ __vec4f

 struct __vec4f

The 4D vector object is used in all the GPAC framework for 4 dimension vectors, VRML Rotations and quaternions representation.

rotation (float)

4D vector (float)

Data Fields
Fixed x
Fixed y
Fixed z
Fixed q

## ◆ __matrix

 struct __matrix

The 3D matrix object used in GPAC. The matrix is oriented like OpenGL matrices (column-major ordering), with the translation part at the end of the coefficients list.

Note
Unless specified otherwise, the matrix object is always expected to represent an affine transformation.

Redefinition of GF_Matrix but without the maths.h include which breaks VideoToolBox on OSX/iOS

Data Fields
Fixed m[16]

## ◆ GF_BBox

 struct GF_BBox

The 3D Bounding Box is a 3D Axis-Aligned Bounding Box used to in various tools of the GPAC framework for bounds estimation of a 3D object. It features an axis-aligned box and a sphere bounding volume for fast intersection tests.

Data Fields
GF_Vec min_edge

minimum x, y, and z of the object

GF_Vec max_edge

maximum x, y, and z of the object

GF_Vec center

center of the bounding box.

Note
this is computed from min_edge and max_edge

radius of the bounding sphere for this box.

Note
this is computed from min_edge and max_edge
Bool is_set

the bbox center and radius are valid

## ◆ GF_Plane

 struct GF_Plane
Data Fields
GF_Vec normal

normal vector to the plane

Fixed d

distance from origin of the plane

## ◆ GF_Ray

 struct GF_Ray

The 3D ray object is used in GPAC for all collision and mouse interaction tests

Data Fields
GF_Vec orig

origin point of the ray

GF_Vec dir

normalized direction vector of the ray

## ◆ gf_vec_equal

 #define gf_vec_equal ( v1, v2 )

macro evaluating to 1 if vectors are equal, 0 otherwise

## ◆ gf_vec_rev

 #define gf_vec_rev ( v )

macro reversing a vector v = v

## ◆ gf_vec_diff

 #define gf_vec_diff ( res, v1, v2 )

macro performing the minus operation res = v1 - v2

 #define gf_vec_add ( res, v1, v2 )

macro performing the add operation res = v1 + v2

## ◆ gf_quat_len

 #define gf_quat_len ( v )

gets the len of a quaternion

## ◆ gf_quat_norm

 #define gf_quat_norm ( v )

normalizes a quaternion

## ◆ gf_mx_init

 #define gf_mx_init ( _obj )

Inits the matrix to the identity matrix

## ◆ gf_mx_is_identity

 #define gf_mx_is_identity ( _obj ) ((!(_obj).m[1] && !(_obj).m[2] && !(_obj).m[3] && !(_obj).m[4] && !(_obj).m[6] && !(_obj).m[7] && !(_obj).m[8] && !(_obj).m[9] && !(_obj).m[11] && !(_obj).m[12] && !(_obj).m[13] && !(_obj).m[14] && ((_obj).m[0]==FIX_ONE) && ((_obj).m[5]==FIX_ONE)&& ((_obj).m[10]==FIX_ONE)&& ((_obj).m[15]==FIX_ONE)) ? 1 : 0)

macro to check if a matrix is the identity matrix

## ◆ gf_mx_copy

 #define gf_mx_copy ( _obj, from )

Copies the matrix _from to the matrix _obj

## ◆ anonymous enum

 anonymous enum

Classification types for box/plane position used in gf_bbox_plane_relation

Enumerator
GF_BBOX_FRONT

box is in front of the plane

GF_BBOX_INTER

box intersects the plane

GF_BBOX_BACK

box is back of the plane

## ◆ gf_vec_len()

 Fixed gf_vec_len ( GF_Vec v )

Gets the length of a 3D vector

Parameters
 v the target vector
Returns
length of the vector

## ◆ gf_vec_len_p()

 Fixed gf_vec_len_p ( GF_Vec * v )

Gets the length of a 3D vector

Parameters
 v the target vector
Returns
length of the vector

## ◆ gf_vec_lensq()

 Fixed gf_vec_lensq ( GF_Vec v )

Gets the square length of a 3D vector

Parameters
 v the target vector
Returns
square length of the vector

## ◆ gf_vec_lensq_p()

 Fixed gf_vec_lensq_p ( GF_Vec * v )

Gets the square length of a 3D vector

Parameters
 v the target vector
Returns
square length of the vector

## ◆ gf_vec_dot()

 Fixed gf_vec_dot ( GF_Vec v1, GF_Vec v2 )

Gets the dot product of two vectors

Parameters
 v1 first vector v2 second vector
Returns
dot product of the vectors

## ◆ gf_vec_dot_p()

 Fixed gf_vec_dot_p ( GF_Vec * v1, GF_Vec * v2 )

Gets the dot product of two vectors

Parameters
 v1 first vector v2 second vector
Returns
dot product of the vectors

## ◆ gf_vec_norm()

 void gf_vec_norm ( GF_Vec * v )

Normalize the vector, eg make its length equal to FIX_ONE

Parameters
 v vector to normalize

## ◆ gf_vec_scale()

 GF_Vec gf_vec_scale ( GF_Vec v, Fixed f )

Scales a vector by a given amount

Parameters
 v vector to scale f scale factor
Returns
scaled vector

## ◆ gf_vec_scale_p()

 GF_Vec gf_vec_scale_p ( GF_Vec * v, Fixed f )

Scales a vector by a given amount

Parameters
 v vector to scale f scale factor
Returns
scaled vector

## ◆ gf_vec_cross()

 GF_Vec gf_vec_cross ( GF_Vec v1, GF_Vec v2 )

Gets the cross product of two vectors

Parameters
 v1 first vector v2 second vector
Returns
cross-product vector

## ◆ gf_vec_cross_p()

 GF_Vec gf_vec_cross_p ( GF_Vec * v1, GF_Vec * v2 )

Gets the cross product of two vectors

Parameters
 v1 first vector v2 second vector
Returns
cross-product vector

## ◆ gf_quat_to_rotation()

 GF_Vec4 gf_quat_to_rotation ( GF_Vec4 * quat )

Transforms a quaternion to a Rotation, expressed as a 4 dimension vector with x,y,z for axis and q for rotation angle

Parameters
 quat the quaternion to transform
Returns
the rotation value

## ◆ gf_quat_from_rotation()

 GF_Vec4 gf_quat_from_rotation ( GF_Vec4 rot )

Transforms a Rotation to a quaternion

Parameters
 rot the rotation to transform
Returns
the quaternion value

## ◆ gf_quat_get_inv()

 GF_Vec4 gf_quat_get_inv ( GF_Vec4 * quat )

Inverses a quaternion

Parameters
 quat the quaternion to inverse
Returns
the inverted quaternion

## ◆ gf_quat_multiply()

 GF_Vec4 gf_quat_multiply ( GF_Vec4 * q1, GF_Vec4 * q2 )

Multiplies two quaternions

Parameters
 q1 the first quaternion q2 the second quaternion
Returns
the resulting quaternion

## ◆ gf_quat_rotate()

 GF_Vec gf_quat_rotate ( GF_Vec4 * quat, GF_Vec * vec )

Rotates a vector with a quaternion

Parameters
 quat the quaternion modelizing the rotation vec the vector to rotate
Returns
the resulting vector

## ◆ gf_quat_from_axis_cos()

 GF_Vec4 gf_quat_from_axis_cos ( GF_Vec axis, Fixed cos_a )

Constructs a quaternion from an axis and a cosinus value (shortcut to gf_quat_from_rotation)

Parameters
 axis the rotation axis cos_a the rotation cosinus value
Returns
the resulting quaternion

## ◆ gf_quat_slerp()

 GF_Vec4 gf_quat_slerp ( GF_Vec4 q1, GF_Vec4 q2, Fixed frac )

Interpolates two quaternions using spherical linear interpolation

Parameters
 q1 the first quaternion q2 the second quaternion frac the fraction of the interpolation, between 0 and FIX_ONE
Returns
the interpolated quaternion

## ◆ gf_bbox_refresh()

 void gf_bbox_refresh ( GF_BBox * b )

updates information of the bounding box based on the edge information

Parameters
 b the target bounding box

## ◆ gf_bbox_from_rect()

 void gf_bbox_from_rect ( GF_BBox * box, GF_Rect * rc )

builds a bounding box from a 2D rectangle

Parameters
 box the bounding box to build rc the source rectangle

## ◆ gf_rect_from_bbox()

 void gf_rect_from_bbox ( GF_Rect * rc, GF_BBox * box )

builds a rectangle from a 3D bounding box.

Note
The z dimension is lost and no projection is performed
Parameters
 rc the destination rectangle box the source bounding box

## ◆ gf_bbox_grow_point()

 void gf_bbox_grow_point ( GF_BBox * box, GF_Vec pt )

Checks if a point is inside a bounding box and updates the bounding box to include it if not the case

Parameters
 box the bounding box object pt the 3D point to check

## ◆ gf_bbox_union()

 void gf_bbox_union ( GF_BBox * b1, GF_BBox * b2 )

performs the union of two bounding boxes

Parameters
 b1 the first bounding box b2 the bounding box to add

## ◆ gf_bbox_equal()

 Bool gf_bbox_equal ( GF_BBox * b1, GF_BBox * b2 )

checks if two bounding boxes are equal or not

Parameters
 b1 the first bounding box b2 the second bounding box
Returns
GF_TRUE if equal

## ◆ gf_bbox_point_inside()

 Bool gf_bbox_point_inside ( GF_BBox * box, GF_Vec * p )

checks if a point is inside a bounding box or not

Parameters
 box the bounding box p the point to check
Returns
GF_TRUE if point is inside

## ◆ gf_bbox_get_vertices()

 void gf_bbox_get_vertices ( GF_Vec bmin, GF_Vec bmax, GF_Vec * vecs )

Returns the 8 bounding box vertices given the minimum and maximum edge. Vertices are ordered to respect "p-vertex indexes", (vertex from a box closest to plane) and so that n-vertex (vertex from a box farthest from plane) is 7-p_vx_idx

Parameters
 bmin minimum edge of the box bmax maximum edge of the box vecs list of 8 3D points used to store the vertices.

## ◆ gf_mx_from_mx2d()

 void gf_mx_from_mx2d ( GF_Matrix * mx, GF_Matrix2D * mat2D )

Initializes a 3D matrix from a 2D matrix.

Note
all z-related coefficients will be set to default.
Parameters
 mx the target matrix to initialize mat2D the source 2D matrix

## ◆ gf_mx_equal()

 Bool gf_mx_equal ( GF_Matrix * mx1, GF_Matrix * mx2 )

Tests if two matrices are equal or not.

Parameters
 mx1 the first matrix mx2 the first matrix
Returns
GF_TRUE if matrices are same, GF_FALSE otherwise

 void gf_mx_add_translation ( GF_Matrix * mx, Fixed tx, Fixed ty, Fixed tz )

Translates a matrix

Parameters
 mx the matrix being transformed. Once the function is called, contains the result matrix tx horizontal translation ty vertical translation tz depth translation

 void gf_mx_add_scale ( GF_Matrix * mx, Fixed sx, Fixed sy, Fixed sz )

Scales a matrix

Parameters
 mx the matrix being transformed. Once the function is called, contains the result matrix sx horizontal translation scaling sy vertical translation scaling sz depth translation scaling

 void gf_mx_add_rotation ( GF_Matrix * mx, Fixed angle, Fixed x, Fixed y, Fixed z )

Rotates a matrix

Parameters
 mx the matrix being transformed. Once the function is called, contains the result matrix angle rotation angle in radians x horizontal coordinate of rotation axis y vertical coordinate of rotation axis z depth coordinate of rotation axis

 void gf_mx_add_matrix ( GF_Matrix * mx, GF_Matrix * mul )

Multiplies a matrix with another one mx = mx*mul

Parameters
 mx the matrix being transformed. Once the function is called, contains the result matrix mul the matrix to add

 void gf_mx_add_matrix_2d ( GF_Matrix * mx, GF_Matrix2D * mat2D )

Adds a 2D affine matrix to a matrix

Parameters
 mx the matrix mat2D the matrix to premultiply

## ◆ gf_mx_inverse()

 void gf_mx_inverse ( GF_Matrix * mx )

Inverses an affine matrix.

Warning
Results are undefined if the matrix is not an affine one
Parameters
 mx the matrix to inverse

## ◆ gf_mx_transpose()

 void gf_mx_transpose ( GF_Matrix * mx )

Transposes a 4x4 matrix

Parameters
 mx the matrix to transpose

## ◆ gf_mx_apply_vec()

 void gf_mx_apply_vec ( GF_Matrix * mx, GF_Vec * pt )

Applies a 3D matrix transformation to a 3D point

Parameters
 mx transformation matrix pt pointer to 3D point. Once the function is called, pt contains the transformed point

## ◆ gf_mx_apply_rect()

 void gf_mx_apply_rect ( GF_Matrix * _this, GF_Rect * rc )

Applies a 3D matrix transformation to a rectangle, giving the enclosing rectangle of the transformed one.

Note
Parameters
 _this transformation matrix rc pointer to rectangle. Once the function is called, rc contains the transformed rectangle

## ◆ gf_mx_ortho()

 void gf_mx_ortho ( GF_Matrix * mx, Fixed left, Fixed right, Fixed bottom, Fixed top, Fixed z_near, Fixed z_far )

Creates an orthogonal projection matrix. This assume the NDC Z lies in [-1,1]

Parameters
 mx matrix to initialize left min horizontal coordinate of viewport right max horizontal coordinate of viewport bottom min vertical coordinate of viewport top max vertical coordinate of viewport z_near min depth coordinate of viewport z_far max depth coordinate of viewport

## ◆ gf_mx_ortho_reverse_z()

 void gf_mx_ortho_reverse_z ( GF_Matrix * mx, Fixed left, Fixed right, Fixed bottom, Fixed top, Fixed z_near, Fixed z_far )

Creates an orthogonal projection matrix with reverse Z. This assume the NDC Z lies in [0,1], not [-1,1]

Parameters
 mx matrix to initialize left min horizontal coordinate of viewport right max horizontal coordinate of viewport bottom min vertical coordinate of viewport top max vertical coordinate of viewport z_near min depth coordinate of viewport z_far max depth coordinate of viewport

## ◆ gf_mx_perspective()

 void gf_mx_perspective ( GF_Matrix * mx, Fixed fov, Fixed aspect_ratio, Fixed z_near, Fixed z_far )

Creates a perspective projection matrix. This assume the NDC Z lies in [-1,1]

Parameters
 mx matrix to initialize fov camera field of view angle in radian aspect_ratio viewport aspect ratio z_near min depth coordinate of viewport z_far max depth coordinate of viewport

## ◆ gf_mx_perspective_reverse_z()

 void gf_mx_perspective_reverse_z ( GF_Matrix * mx, Fixed fov, Fixed aspect_ratio, Fixed z_near, Fixed z_far )

Creates a perspective projection matrix with reverse Z. This assume the NDC Z lies in [0,1]

Parameters
 mx matrix to initialize fov camera field of view angle in radian aspect_ratio viewport aspect ratio z_near min depth coordinate of viewport z_far max depth coordinate of viewport

## ◆ gf_mx_lookat()

 void gf_mx_lookat ( GF_Matrix * mx, GF_Vec position, GF_Vec target, GF_Vec up_vector )

Creates a transformation matrix looking at a given direction from a given point (camera matrix).

Parameters
 mx matrix to initialize position position target look direction up_vector vector describing the up direction

## ◆ gf_mx_apply_bbox()

 void gf_mx_apply_bbox ( GF_Matrix * mx, GF_BBox * b )

Applies a 3D matrix transformation to a bounding box, giving the enclosing box of the transformed one

Parameters
 mx transformation matrix b pointer to bounding box. Once the function is called, contains the transformed bounding box

## ◆ gf_mx_apply_bbox_sphere()

 void gf_mx_apply_bbox_sphere ( GF_Matrix * mx, GF_BBox * box )

Applies a 3D matrix transformation to a bounding box, computing only the enclosing sphere of the transformed one.

Parameters
 mx transformation matrix box pointer to bounding box. Once the function is called, contains the transformed bounding sphere

 void gf_mx_add_matrix_4x4 ( GF_Matrix * mat, GF_Matrix * mul )

Multiplies two non-affine matrices mx = mx*mul

Parameters
 mat the target matrix mul the matrix we multiply with

## ◆ gf_mx_inverse_4x4()

 Bool gf_mx_inverse_4x4 ( GF_Matrix * mx )

Inverses a non-affine matrices

Parameters
 mx the target matrix
Returns
1 if inversion was done, 0 if inversion not possible.

## ◆ gf_mx_apply_vec_4x4()

 void gf_mx_apply_vec_4x4 ( GF_Matrix * mx, GF_Vec4 * vec )

Applies a 3D non-affine matrix transformation to a 4 dimension vector

Parameters
 mx transformation matrix vec pointer to the vector. Once the function is called, contains the transformed vector

## ◆ gf_mx_get_yaw_pitch_roll()

 void gf_mx_get_yaw_pitch_roll ( GF_Matrix * mx, Fixed * yaw, Fixed * pitch, Fixed * roll )

Extracts yaw, pitch and roll info from a matrix

Parameters
 mx the matrix to decompose yaw the extracted yaw angle in radians pitch the extracted pitch angle in radians roll the extracted roll angle in radians

## ◆ gf_mx_decompose()

 void gf_mx_decompose ( GF_Matrix * mx, GF_Vec * translate, GF_Vec * scale, GF_Vec4 * rotate, GF_Vec * shear )

Decomposes a matrix into translation, scale, shear and rotate

Parameters
 mx the matrix to decompose translate the decomposed translation part scale the decomposed scaling part rotate the decomposed rotation part, expressed as a Rotataion (axis + angle) shear the decomposed shear part

## ◆ gf_mx_rotate_vector()

 void gf_mx_rotate_vector ( GF_Matrix * mx, GF_Vec * pt )

Rotates a vector with a given matrix, ignoring any translation.

Parameters
 mx transformation matrix pt pointer to 3D vector. Once the function is called, pt contains the transformed vector

## ◆ gf_mx_rotation_matrix_from_vectors()

 void gf_mx_rotation_matrix_from_vectors ( GF_Matrix * mx, GF_Vec x_axis, GF_Vec y_axis, GF_Vec z_axis )

Inits a matrix to rotate the local axis in the given vectors

Parameters
 mx matrix to initialize x_axis target normalized X axis y_axis target normalized Y axis z_axis target normalized Z axis

## ◆ gf_mx2d_from_mx()

 void gf_mx2d_from_mx ( GF_Matrix2D * mx2d, GF_Matrix * mx )

Inits a 2D matrix by removing all depth info from a 3D matrix

Parameters
 mx2d 2D matrix to initialize mx 3D matrix to use

## ◆ gf_mx_apply_plane()

 void gf_mx_apply_plane ( GF_Matrix * mx, GF_Plane * plane )

Transorms a plane by a given matrix

Parameters
 mx the matrix to use plane pointer to 3D plane. Once the function is called, plane contains the transformed plane

## ◆ gf_plane_get_distance()

 Fixed gf_plane_get_distance ( GF_Plane * plane, GF_Vec * p )

Gets the distance between a point and a plne

Parameters
 plane the plane to use p pointer to ^point to check
Returns
the distance between the place and the point

## ◆ gf_closest_point_to_line()

 GF_Vec gf_closest_point_to_line ( GF_Vec line_pt, GF_Vec line_vec, GF_Vec pt )

Gets the closest point on a line from a given point in space

Parameters
 line_pt a point of the line to test line_vec the normalized direction vector of the line pt the point to check
Returns
the closest point on the line to the desired point

## ◆ gf_plane_get_p_vertex_idx()

 u32 gf_plane_get_p_vertex_idx ( GF_Plane * p )

Gets the p-vertex index for a given plane. The p-vertex index is the index of the closest vertex of a bounding box to the plane. The vertices of a box are always ordered in GPAC? cf gf_bbox_get_vertices

Parameters
 p the plane to check
Returns
the p-vertex index value, ranging from 0 to 7

## ◆ gf_plane_intersect_line()

 Bool gf_plane_intersect_line ( GF_Plane * plane, GF_Vec * linepoint, GF_Vec * linevec, GF_Vec * outPoint )

Checks for the intersection of a plane and a line

Parameters
 plane plane to test linepoint a point on the line to test linevec normalized direction vector of the line to test outPoint optional pointer to retrieve the intersection point, NULL otherwise
Returns
1 if line and plane intersect, 0 otherwise

## ◆ gf_bbox_plane_relation()

 u32 gf_bbox_plane_relation ( GF_BBox * box, GF_Plane * p )

Gets the spatial relation between a box and a plane

Parameters
 box the box to check p the plane to check
Returns
the relation type

## ◆ gf_ray()

 GF_Ray gf_ray ( GF_Vec start, GF_Vec end )

Constructs a ray object

Parameters
 start starting point of the ray end end point of the ray, or any point on the ray
Returns
the ray object

## ◆ gf_mx_apply_ray()

 void gf_mx_apply_ray ( GF_Matrix * mx, GF_Ray * r )

Transforms a ray by a given transformation matrix

Parameters
 mx the matrix to use r pointer to the ray. Once the function is called, contains the transformed ray

## ◆ gf_ray_hit_box()

 Bool gf_ray_hit_box ( GF_Ray * ray, GF_Vec min_edge, GF_Vec max_edge, GF_Vec * out_point )

Checks if a ray intersects a box or not

Parameters
 ray the ray to check min_edge the minimum edge of the box to check max_edge the maximum edge of the box to check out_point optional location of a 3D point to store the intersection, NULL otherwise.
Returns
retuns 1 if the ray intersects the box, 0 otherwise

## ◆ gf_ray_hit_sphere()

 Bool gf_ray_hit_sphere ( GF_Ray * ray, GF_Vec * center, Fixed radius, GF_Vec * out_point )

Checks if a ray intersects a box or not

Parameters
 ray the ray to check center the center of the sphere to check. If NULL, the origin (0,0,0)is used radius the radius of the sphere to check out_point optional location of a 3D point to store the intersection, NULL otherwise
Returns
retuns 1 if the ray intersects the sphere, 0 otherwise

## ◆ gf_ray_hit_triangle()

 Bool gf_ray_hit_triangle ( GF_Ray * ray, GF_Vec * v0, GF_Vec * v1, GF_Vec * v2, Fixed * dist )

Checks if a ray intersects a triangle or not

Parameters
 ray the ray to check v0 first vertex of the triangle v1 second vertex of the triangle v2 third vertex of the triangle dist optional location of a fixed number to store the intersection distance from ray origin if any, NULL otherwise
Returns
retuns 1 if the ray intersects the triangle, 0 otherwise