Bullet Collision Detection & Physics Library: gim_basic_geometry_operations.h File Reference

Bullet Collision Detection & Physics Library

Macros | Enumerations | Functions
gim_basic_geometry_operations.h File Reference
`#include "gim_linear_math.h"`
Include dependency graph for gim_basic_geometry_operations.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Macros
#define | PLANEDIREPSILON 0.0000001f
#define | PARALELENORMALS 0.000001f
#define | TRIANGLE_NORMAL(v1, v2, v3, n)
#define | TRIANGLE_NORMAL_FAST(v1, v2, v3, n)
#define | TRIANGLE_PLANE(v1, v2, v3, plane)
| plane is a vec4f
#define | TRIANGLE_PLANE_FAST(v1, v2, v3, plane)
| plane is a vec4f
#define | EDGE_PLANE(e1, e2, n, plane)
| Calc a plane from an edge an a normal. plane is a vec4f.
#define | DISTANCE_PLANE_POINT(plane, point)
#define | PROJECT_POINT_PLANE(point, plane, projected)
#define | PLANE_MINOR_AXES(plane, i0, i1)
| Finds the 2 smallest cartesian coordinates of a plane normal.

## Enumerations
enum | ePLANE_INTERSECTION_TYPE { G_BACK_PLANE = 0 , G_COLLIDE_PLANE , G_FRONT_PLANE }
enum | eLINE_PLANE_INTERSECTION_TYPE { G_FRONT_PLANE_S1 = 0 , G_FRONT_PLANE_S2 , G_BACK_PLANE_S1 , G_BACK_PLANE_S2 , G_COLLIDE_PLANE_S1 , G_COLLIDE_PLANE_S2 }

## Functions
template<typename CLASS_POINT, typename CLASS_PLANE>
bool | POINT_IN_HULL (const CLASS_POINT &point, const CLASS_PLANE *planes, GUINT plane_count)
| Verifies if a point is in the plane hull.
template<typename CLASS_POINT, typename CLASS_PLANE>
void | PLANE_CLIP_SEGMENT (const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped)
template<typename CLASS_POINT, typename CLASS_PLANE>
eLINE_PLANE_INTERSECTION_TYPE | PLANE_CLIP_SEGMENT2 (const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped)
| Confirms if the plane intersect the edge or nor.
template<typename CLASS_POINT, typename CLASS_PLANE>
eLINE_PLANE_INTERSECTION_TYPE | PLANE_CLIP_SEGMENT_CLOSEST (const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped1, CLASS_POINT &clipped2)
| Confirms if the plane intersect the edge or not.
template<typename T, typename CLASS_POINT, typename CLASS_PLANE>
bool | RAY_PLANE_COLLISION (const CLASS_PLANE &plane, const CLASS_POINT &vDir, const CLASS_POINT &vPoint, CLASS_POINT &pout, T &tparam)
| Ray plane collision in one way.
template<typename T, typename CLASS_POINT, typename CLASS_PLANE>
GUINT | LINE_PLANE_COLLISION (const CLASS_PLANE &plane, const CLASS_POINT &vDir, const CLASS_POINT &vPoint, CLASS_POINT &pout, T &tparam, T tmin, T tmax)
| line collision
template<typename CLASS_POINT, typename CLASS_PLANE>
bool | INTERSECT_PLANES (const CLASS_PLANE &p1, const CLASS_PLANE &p2, CLASS_POINT &p, CLASS_POINT &d)
| Returns the Ray on which 2 planes intersect if they do. Written by Rodrigo Hernandez on ODE convex collision.
template<typename CLASS_POINT>
void | CLOSEST_POINT_ON_SEGMENT (CLASS_POINT &cp, const CLASS_POINT &v, const CLASS_POINT &e1, const CLASS_POINT &e2)
template<typename T, typename CLASS_POINT>
bool | LINE_INTERSECTION_PARAMS (const CLASS_POINT &dir1, CLASS_POINT &point1, const CLASS_POINT &dir2, CLASS_POINT &point2, T &t1, T &t2)
| Finds the line params where these lines intersect.
template<typename CLASS_POINT>
void | SEGMENT_COLLISION (const CLASS_POINT &vA1, const CLASS_POINT &vA2, const CLASS_POINT &vB1, const CLASS_POINT &vB2, CLASS_POINT &vPointA, CLASS_POINT &vPointB)
| Find closest points on segments.
template<typename T>
bool | BOX_AXIS_INTERSECT (T pos, T dir, T bmin, T bmax, T &tfirst, T &tlast)
| Line box intersection in one dimension.
template<typename T>
void | SORT_3_INDICES (const T *values, GUINT *order_indices)
| Sorts 3 componets.

## Detailed Description

Author
  Francisco Leon Najera type independant geometry routines

Definition in file gim_basic_geometry_operations.h.

## Macro Definition Documentation

## ◆ DISTANCE_PLANE_POINT

#define DISTANCE_PLANE_POINT | ( |  | plane,
|  |  | point )

Value:
(VEC_DOT(plane, point) - plane[3])
VEC_DOT
#define VEC_DOT(a, b)
Vector dot product.
Definition gim_linear_math.h:190

Definition at line 89 of file gim_basic_geometry_operations.h.

## ◆ EDGE_PLANE

#define EDGE_PLANE | ( |  | e1,
|  |  | e2,
|  |  | n,
|  |  | plane )

Value:
{ \
vec3f _dif; \
VEC_DIFF(_dif, e2, e1); \
VEC_CROSS(plane, _dif, n); \
VEC_NORMALIZE(plane); \
plane[3] = VEC_DOT(e1, plane); \
}
vec3f
GREAL vec3f[3]
Float vector 3D.
Definition gim_geom_types.h:69

Calc a plane from an edge an a normal. plane is a vec4f.

Definition at line 80 of file gim_basic_geometry_operations.h.

## ◆ PARALELENORMALS

#define PARALELENORMALS 0.000001f

Definition at line 45 of file gim_basic_geometry_operations.h.

## ◆ PLANE_MINOR_AXES

#define PLANE_MINOR_AXES | ( |  | plane,
|  |  | i0,
|  |  | i1 )

Value:
VEC_MINOR_AXES(plane, i0, i1)
VEC_MINOR_AXES
#define VEC_MINOR_AXES(vec, i0, i1)
Finds the 2 smallest cartesian coordinates from a vector.
Definition gim_linear_math.h:377

Finds the 2 smallest cartesian coordinates of a plane normal.

Definition at line 235 of file gim_basic_geometry_operations.h.

## ◆ PLANEDIREPSILON

#define PLANEDIREPSILON 0.0000001f

Definition at line 41 of file gim_basic_geometry_operations.h.

## ◆ PROJECT_POINT_PLANE

#define PROJECT_POINT_PLANE | ( |  | point,
|  |  | plane,
|  |  | projected )

Value:
{ \
GREAL _dis; \
_dis = DISTANCE_PLANE_POINT(plane, point); \
VEC_SCALE(projected, -_dis, plane); \
VEC_SUM(projected, projected, point); \
}
DISTANCE_PLANE_POINT
#define DISTANCE_PLANE_POINT(plane, point)
Definition gim_basic_geometry_operations.h:89
GREAL
#define GREAL
Definition gim_math.h:37

Definition at line 91 of file gim_basic_geometry_operations.h.

## ◆ TRIANGLE_NORMAL

#define TRIANGLE_NORMAL | ( |  | v1,
|  |  | v2,
|  |  | v3,
|  |  | n )

Value:
{ \
vec3f _dif1, _dif2; \
VEC_DIFF(_dif1, v2, v1); \
VEC_DIFF(_dif2, v3, v1); \
VEC_CROSS(n, _dif1, _dif2); \
VEC_NORMALIZE(n); \
}

Definition at line 48 of file gim_basic_geometry_operations.h.

## ◆ TRIANGLE_NORMAL_FAST

#define TRIANGLE_NORMAL_FAST | ( |  | v1,
|  |  | v2,
|  |  | v3,
|  |  | n )

Value:
{ \
vec3f _dif1, _dif2; \
VEC_DIFF(_dif1, v2, v1); \
VEC_DIFF(_dif2, v3, v1); \
VEC_CROSS(n, _dif1, _dif2); \
}

Definition at line 57 of file gim_basic_geometry_operations.h.

## ◆ TRIANGLE_PLANE

#define TRIANGLE_PLANE | ( |  | v1,
|  |  | v2,
|  |  | v3,
|  |  | plane )

Value:
{ \
TRIANGLE_NORMAL(v1, v2, v3, plane); \
plane[3] = VEC_DOT(v1, plane); \
}

plane is a vec4f

Definition at line 66 of file gim_basic_geometry_operations.h.

## ◆ TRIANGLE_PLANE_FAST

#define TRIANGLE_PLANE_FAST | ( |  | v1,
|  |  | v2,
|  |  | v3,
|  |  | plane )

Value:
{ \
TRIANGLE_NORMAL_FAST(v1, v2, v3, plane); \
plane[3] = VEC_DOT(v1, plane); \
}

plane is a vec4f

Definition at line 73 of file gim_basic_geometry_operations.h.

## Enumeration Type Documentation

## ◆ eLINE_PLANE_INTERSECTION_TYPE

enum eLINE_PLANE_INTERSECTION_TYPE

Enumerator
G_FRONT_PLANE_S1 |
G_FRONT_PLANE_S2 |
G_BACK_PLANE_S1 |
G_BACK_PLANE_S2 |
G_COLLIDE_PLANE_S1 |
G_COLLIDE_PLANE_S2 |

Definition at line 133 of file gim_basic_geometry_operations.h.

## ◆ ePLANE_INTERSECTION_TYPE

enum ePLANE_INTERSECTION_TYPE

Enumerator
G_BACK_PLANE |
G_COLLIDE_PLANE |
G_FRONT_PLANE |

Definition at line 126 of file gim_basic_geometry_operations.h.

## Function Documentation

## ◆ BOX_AXIS_INTERSECT()

template<typename T>

bool BOX_AXIS_INTERSECT | ( | T | pos,
|  | T | dir,
|  | T | bmin,
|  | T | bmax,
|  | T & | tfirst,
|  | T & | tlast )
| inline

Line box intersection in one dimension.

Parameters

  pos | Position of the ray
  dir | Projection of the Direction of the ray
  bmin | Minimum bound of the box
  bmax | Maximum bound of the box
  tfirst | the minimum projection. Assign to 0 at first.
  tlast | the maximum projection. Assign to INFINITY at first.

Returns
  true if there is an intersection.

Definition at line 496 of file gim_basic_geometry_operations.h.

## ◆ CLOSEST_POINT_ON_SEGMENT()

template<typename CLASS_POINT>

void CLOSEST_POINT_ON_SEGMENT | ( | CLASS_POINT & | cp,
|  | const CLASS_POINT & | v,
|  | const CLASS_POINT & | e1,
|  | const CLASS_POINT & | e2 )
| inline

Finds the closest point(cp) to (v) on a segment (e1,e2)

Definition at line 341 of file gim_basic_geometry_operations.h.

## ◆ INTERSECT_PLANES()

template<typename CLASS_POINT, typename CLASS_PLANE>

bool INTERSECT_PLANES | ( | const CLASS_PLANE & | p1,
|  | const CLASS_PLANE & | p2,
|  | CLASS_POINT & | p,
|  | CLASS_POINT & | d )
| inline

Returns the Ray on which 2 planes intersect if they do. Written by Rodrigo Hernandez on ODE convex collision.

Parameters

  p1 | Plane 1
  p2 | Plane 2
  p | Contains the origin of the ray upon returning if planes intersect
  d | Contains the direction of the ray upon returning if planes intersect

Returns
  true if the planes intersect, 0 if paralell.

Definition at line 316 of file gim_basic_geometry_operations.h.

## ◆ LINE_INTERSECTION_PARAMS()

template<typename T, typename CLASS_POINT>

bool LINE_INTERSECTION_PARAMS | ( | const CLASS_POINT & | dir1,
|  | CLASS_POINT & | point1,
|  | const CLASS_POINT & | dir2,
|  | CLASS_POINT & | point2,
|  | T & | t1,
|  | T & | t2 )
| inline

Finds the line params where these lines intersect.

Parameters

  dir1 | Direction of line 1
  point1 | Point of line 1
  dir2 | Direction of line 2
  point2 | Point of line 2
  t1 | Result Parameter for line 1
  t2 | Result Parameter for line 2
  dointersect | 0 if the lines won't intersect, else 1

Definition at line 377 of file gim_basic_geometry_operations.h.

## ◆ LINE_PLANE_COLLISION()

template<typename T, typename CLASS_POINT, typename CLASS_PLANE>

GUINT LINE_PLANE_COLLISION | ( | const CLASS_PLANE & | plane,
|  | const CLASS_POINT & | vDir,
|  | const CLASS_POINT & | vPoint,
|  | CLASS_POINT & | pout,
|  | T & | tparam,
|  | T | tmin,
|  | T | tmax )
| inline

line collision

Returns
  -0 if the ray never intersects -1 if the ray collides in front -2 if the ray collides in back

Definition at line 270 of file gim_basic_geometry_operations.h.

## ◆ PLANE_CLIP_SEGMENT()

template<typename CLASS_POINT, typename CLASS_PLANE>

void PLANE_CLIP_SEGMENT | ( | const CLASS_POINT & | s1,
|  | const CLASS_POINT & | s2,
|  | const CLASS_PLANE & | plane,
|  | CLASS_POINT & | clipped )
| inline

Definition at line 114 of file gim_basic_geometry_operations.h.

## ◆ PLANE_CLIP_SEGMENT2()

template<typename CLASS_POINT, typename CLASS_PLANE>

eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT2 | ( | const CLASS_POINT & | s1,
|  | const CLASS_POINT & | s2,
|  | const CLASS_PLANE & | plane,
|  | CLASS_POINT & | clipped )
| inline

Confirms if the plane intersect the edge or nor.

intersection type must have the following values

- 0 : Segment in front of plane, s1 closest
- 1 : Segment in front of plane, s2 closest
- 2 : Segment in back of plane, s1 closest
- 3 : Segment in back of plane, s2 closest
- 4 : Segment collides plane, s1 in back
- 5 : Segment collides plane, s2 in back

Definition at line 157 of file gim_basic_geometry_operations.h.

## ◆ PLANE_CLIP_SEGMENT_CLOSEST()

template<typename CLASS_POINT, typename CLASS_PLANE>

eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT_CLOSEST | ( | const CLASS_POINT & | s1,
|  | const CLASS_POINT & | s2,
|  | const CLASS_PLANE & | plane,
|  | CLASS_POINT & | clipped1,
|  | CLASS_POINT & | clipped2 )
| inline

Confirms if the plane intersect the edge or not.

clipped1 and clipped2 are the vertices behind the plane. clipped1 is the closest

intersection_type must have the following values

- 0 : Segment in front of plane, s1 closest
- 1 : Segment in front of plane, s2 closest
- 2 : Segment in back of plane, s1 closest
- 3 : Segment in back of plane, s2 closest
- 4 : Segment collides plane, s1 in back
- 5 : Segment collides plane, s2 in back

Definition at line 199 of file gim_basic_geometry_operations.h.

## ◆ POINT_IN_HULL()

template<typename CLASS_POINT, typename CLASS_PLANE>

bool POINT_IN_HULL | ( | const CLASS_POINT & | point,
|  | const CLASS_PLANE * | planes,
|  | GUINT | plane_count )
| inline

Verifies if a point is in the plane hull.

Definition at line 101 of file gim_basic_geometry_operations.h.

## ◆ RAY_PLANE_COLLISION()

template<typename T, typename CLASS_POINT, typename CLASS_PLANE>

bool RAY_PLANE_COLLISION | ( | const CLASS_PLANE & | plane,
|  | const CLASS_POINT & | vDir,
|  | const CLASS_POINT & | vPoint,
|  | CLASS_POINT & | pout,
|  | T & | tparam )
| inline

Ray plane collision in one way.

Intersects plane in one way only. The ray must face the plane (normals must be in opossite directions).
It uses the PLANEDIREPSILON constant.

Definition at line 243 of file gim_basic_geometry_operations.h.

## ◆ SEGMENT_COLLISION()

template<typename CLASS_POINT>

void SEGMENT_COLLISION | ( | const CLASS_POINT & | vA1,
|  | const CLASS_POINT & | vA2,
|  | const CLASS_POINT & | vB1,
|  | const CLASS_POINT & | vB2,
|  | CLASS_POINT & | vPointA,
|  | CLASS_POINT & | vPointB )
| inline

Find closest points on segments.

Definition at line 401 of file gim_basic_geometry_operations.h.

## ◆ SORT_3_INDICES()

template<typename T>

void SORT_3_INDICES | ( | const T * | values,
|  | GUINT * | order_indices )
| inline

Sorts 3 componets.

Definition at line 513 of file gim_basic_geometry_operations.h.