Blender V5.0
gim_math.h File Reference

Go to the source code of this file.

Macros

#define GREAL   btScalar
#define GREAL2   double
#define GINT   int
#define GUINT   unsigned int
#define GSHORT   short
#define GUSHORT   unsigned short
#define GINT64   long long
#define GUINT64   unsigned long long
#define G_PI   3.14159265358979f
#define G_HALF_PI   1.5707963f
#define G_TWO_PI   6.28318530f
#define G_ROOT3   1.73205f
#define G_ROOT2   1.41421f
#define G_UINT_INFINITY   0xffffffff
 A very very high value.
#define G_REAL_INFINITY   FLT_MAX
#define G_SIGN_BITMASK   0x80000000
#define G_EPSILON   SIMD_EPSILON
#define G_DEGTORAD(X)
#define G_RADTODEG(X)
#define GIM_IR(x)
 Integer representation of a floating-point value.
#define GIM_SIR(x)
 Signed integer representation of a floating-point value.
#define GIM_AIR(x)
 Absolute integer representation of a floating-point value.
#define GIM_FR(x)
 Floating-point representation of an integer value.
#define GIM_MAX(a, b)
#define GIM_MIN(a, b)
#define GIM_MAX3(a, b, c)
#define GIM_MIN3(a, b, c)
#define GIM_IS_ZERO(value)
#define GIM_IS_NEGATIVE(value)
#define GIM_IS_POSISITVE(value)
#define GIM_NEAR_EQUAL(v1, v2)
#define GIM_CLAMP(number, minval, maxval)
 returns a clamped number
#define GIM_GREATER(x, y)
#define GIM_SWAP_NUMBERS(a, b)
 Swap numbers.
#define GIM_INV_SQRT(va, isva)
#define GIM_SQRT(va, sva)

Enumerations

enum  GIM_SCALAR_TYPES {
  G_STYPE_REAL = 0 , G_STYPE_REAL2 , G_STYPE_SHORT , G_STYPE_USHORT ,
  G_STYPE_INT , G_STYPE_UINT , G_STYPE_INT64 , G_STYPE_UINT64
}

Functions

GREAL gim_inv_sqrt (GREAL f)
 Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html.
GREAL gim_sqrt (GREAL f)

Detailed Description

Author
Francisco Leon Najera

Definition in file gim_math.h.

Macro Definition Documentation

◆ G_DEGTORAD

#define G_DEGTORAD ( X)
Value:
((X)*3.1415926f / 180.0f)
#define X

Definition at line 70 of file gim_math.h.

◆ G_EPSILON

◆ G_HALF_PI

#define G_HALF_PI   1.5707963f

Definition at line 47 of file gim_math.h.

◆ G_PI

#define G_PI   3.14159265358979f

Definition at line 46 of file gim_math.h.

◆ G_RADTODEG

#define G_RADTODEG ( X)
Value:
((X)*180.0f / 3.1415926f)

Definition at line 71 of file gim_math.h.

◆ G_REAL_INFINITY

#define G_REAL_INFINITY   FLT_MAX

◆ G_ROOT2

#define G_ROOT2   1.41421f

Definition at line 52 of file gim_math.h.

◆ G_ROOT3

#define G_ROOT3   1.73205f

Definition at line 51 of file gim_math.h.

◆ G_SIGN_BITMASK

#define G_SIGN_BITMASK   0x80000000

Definition at line 55 of file gim_math.h.

◆ G_TWO_PI

#define G_TWO_PI   6.28318530f

Definition at line 49 of file gim_math.h.

◆ G_UINT_INFINITY

#define G_UINT_INFINITY   0xffffffff

A very very high value.

Definition at line 53 of file gim_math.h.

Referenced by GIM_TREE_TREE_COLLIDER< BOX_SET_CLASS0, BOX_SET_CLASS1 >::GIM_TREE_TREE_COLLIDER().

◆ GIM_AIR

#define GIM_AIR ( x)
Value:
(GIM_IR(x) & 0x7fffffff)
#define GIM_IR(x)
Integer representation of a floating-point value.
Definition gim_math.h:74

Absolute integer representation of a floating-point value.

Definition at line 80 of file gim_math.h.

◆ GIM_CLAMP

#define GIM_CLAMP ( number,
minval,
maxval )
Value:
(number < minval ? minval : (number > maxval ? maxval : number))

returns a clamped number

Definition at line 100 of file gim_math.h.

Referenced by SEGMENT_COLLISION().

◆ GIM_FR

#define GIM_FR ( x)
Value:
((GREAL&)(x))
#define GREAL
Definition gim_math.h:37

Floating-point representation of an integer value.

Definition at line 83 of file gim_math.h.

◆ GIM_GREATER

#define GIM_GREATER ( x,
y )
Value:
btFabs(x) > (y)
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
Definition btScalar.h:497

Definition at line 102 of file gim_math.h.

Referenced by GIM_AABB::collide_ray(), and GIM_AABB::overlapping_trans_cache().

◆ GIM_INV_SQRT

#define GIM_INV_SQRT ( va,
isva )
Value:
{ \
if (va <= 0.0000001f) \
{ \
isva = G_REAL_INFINITY; \
} \
else \
{ \
GREAL _x = va * 0.5f; \
GUINT _y = 0x5f3759df - (GIM_IR(va) >> 1); \
isva = GIM_FR(_y); \
isva = isva * (1.5f - (_x * isva * isva)); \
} \
}
#define GUINT
Definition gim_math.h:40
#define G_REAL_INFINITY
Definition gim_math.h:54
#define GIM_FR(x)
Floating-point representation of an integer value.
Definition gim_math.h:83

Definition at line 112 of file gim_math.h.

Referenced by gim_inv_sqrt(), and GIM_CONTACT::interpolate_normals().

◆ GIM_IR

#define GIM_IR ( x)
Value:
((GUINT&)(x))

Integer representation of a floating-point value.

Definition at line 74 of file gim_math.h.

◆ GIM_IS_NEGATIVE

#define GIM_IS_NEGATIVE ( value)
Value:
(value <= -G_EPSILON)
#define G_EPSILON
Definition gim_math.h:56

Definition at line 93 of file gim_math.h.

◆ GIM_IS_POSISITVE

#define GIM_IS_POSISITVE ( value)
Value:
(value >= G_EPSILON)

Definition at line 95 of file gim_math.h.

◆ GIM_IS_ZERO

#define GIM_IS_ZERO ( value)
Value:
(value < G_EPSILON && value > -G_EPSILON)

Definition at line 91 of file gim_math.h.

Referenced by BOX_AXIS_INTERSECT(), INTERSECT_PLANES(), and LINE_INTERSECTION_PARAMS().

◆ GIM_MAX

#define GIM_MAX ( a,
b )

◆ GIM_MAX3

#define GIM_MAX3 ( a,
b,
c )

◆ GIM_MIN

#define GIM_MIN ( a,
b )
Value:
(a > b ? b : a)

Definition at line 86 of file gim_math.h.

Referenced by BOX_AXIS_INTERSECT(), GIM_AABB::find_intersection(), GIM_AABB::merge(), and GIM_AABB::merge_point().

◆ GIM_MIN3

#define GIM_MIN3 ( a,
b,
c )

◆ GIM_NEAR_EQUAL

#define GIM_NEAR_EQUAL ( v1,
v2 )
Value:
GIM_IS_ZERO((v1 - v2))
ATTR_WARN_UNUSED_RESULT const BMVert * v2
#define GIM_IS_ZERO(value)
Definition gim_math.h:91

Definition at line 97 of file gim_math.h.

◆ GIM_SIR

#define GIM_SIR ( x)
Value:
((GINT&)(x))
#define GINT
Definition gim_math.h:39

Signed integer representation of a floating-point value.

Definition at line 77 of file gim_math.h.

◆ GIM_SQRT

#define GIM_SQRT ( va,
sva )
Value:
{ \
GIM_INV_SQRT(va, sva); \
sva = 1.0f / sva; \
}

Definition at line 127 of file gim_math.h.

Referenced by gim_sqrt().

◆ GIM_SWAP_NUMBERS

#define GIM_SWAP_NUMBERS ( a,
b )
Value:
{ \
a = a + b; \
b = a - b; \
a = a - b; \
}

Swap numbers.

Definition at line 105 of file gim_math.h.

Referenced by BOX_AXIS_INTERSECT(), SEGMENT_COLLISION(), and GIM_TRIANGLE_CALCULATION_CACHE::sort_isect().

◆ GINT

#define GINT   int

Definition at line 39 of file gim_math.h.

Referenced by GIM_CONTACT::calc_key_contact().

◆ GINT64

#define GINT64   long long

Definition at line 43 of file gim_math.h.

◆ GREAL

◆ GREAL2

#define GREAL2   double

Definition at line 38 of file gim_math.h.

◆ GSHORT

#define GSHORT   short

Definition at line 41 of file gim_math.h.

◆ GUINT

#define GUINT   unsigned int

Definition at line 40 of file gim_math.h.

Referenced by gim_hash_table< T >::_assign_hash_table_cell(), GIM_BOX_TREE::_build_sub_tree(), GIM_BOX_TREE::_calc_splitting_axis(), gim_hash_table< T >::_erase_by_index_hash_table(), gim_hash_table< T >::_erase_hash_table(), gim_hash_table< T >::_erase_sorted(), gim_hash_table< T >::_erase_unsorted(), gim_hash_table< T >::_find_avaliable_cell(), gim_hash_table< T >::_find_cell(), gim_hash_table< T >::_insert_hash_table(), gim_hash_table< T >::_insert_hash_table_replace(), gim_hash_table< T >::_insert_in_pos(), gim_hash_table< T >::_insert_sorted(), gim_hash_table< T >::_insert_sorted_replace(), gim_hash_table< T >::_insert_unsorted(), gim_hash_table< T >::_invalidate_keys(), gim_hash_table< T >::_rehash(), gim_hash_table< T >::_reserve_table_memory(), gim_hash_table< T >::_resize_table(), GIM_BOX_TREE::_sort_and_calc_splitting_index(), gim_array< T >::at(), gim_array< T >::at(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::boxQuery(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::buildSet(), GIM_CONTACT::calc_key_contact(), gim_bitset::clear(), gim_hash_table< T >::clear(), gim_bitset::clear_all(), gim_array< T >::clear_range(), GIM_TRIANGLE_CALCULATION_CACHE::clip_triangle(), GIM_TRIANGLE_CALCULATION_CACHE::compute_intervals(), GIM_TRIANGLE_CONTACT_DATA::copy_from(), GIM_TRIANGLE_CALCULATION_CACHE::cross_line_intersection_test(), gim_array< T >::erase(), gim_hash_table< T >::erase_by_index(), gim_hash_table< T >::erase_by_index_unsorted(), gim_hash_table< T >::erase_by_key(), gim_array< T >::erase_sorted(), gim_array< T >::erase_sorted_mem(), gim_hash_table< T >::find(), GIM_TREE_TREE_COLLIDER< BOX_SET_CLASS0, BOX_SET_CLASS1 >::find_collision_pairs(), gim_bitset::get(), GIM_TRIANGLE::get_edge_plane(), gim_hash_table< T >::get_key(), gim_array< T >::get_pointer_at(), gim_array< T >::get_pointer_at(), GIM_PRIMITIVE_MANAGER_PROTOTYPE::get_primitive_box(), GIM_PRIMITIVE_MANAGER_PROTOTYPE::get_primitive_count(), GIM_PRIMITIVE_MANAGER_PROTOTYPE::get_primitive_triangle(), GIM_TRIANGLE::get_uv_parameters(), gim_hash_table< T >::get_value(), gim_hash_table< T >::get_value_by_index(), GIM_BOX_TREE::getLeftNodeIndex(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::getLeftNodeIndex(), GIM_BOX_TREE::getNodeBound(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::getNodeBound(), GIM_BOX_TREE::getNodeCount(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::getNodeCount(), GIM_BOX_TREE::getNodeData(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::getNodeData(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::getNodeTriangle(), GIM_BOX_TREE::getRightNodeIndex(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::getRightNodeIndex(), GIM_BOX_TREE::getScapeNodeIndex(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::getScapeNodeIndex(), gim_array< T >::gim_array(), gim_binary_search(), gim_binary_search_ex(), gim_bitset::gim_bitset(), GIM_CONTACT::GIM_CONTACT(), gim_down_heap(), gim_hash_table< T >::gim_hash_table(), GIM_HASH_TABLE_NODE< T >::GIM_HASH_TABLE_NODE(), gim_heap_sort(), gim_next_prime(), gim_radix_sort(), gim_radix_sort_array_tokens(), gim_radix_sort_rtokens(), gim_sort_hash_node_array(), gim_array< T >::growingCheck(), gim_array< T >::insert(), gim_hash_table< T >::insert(), gim_array< T >::insert_mem(), gim_hash_table< T >::insert_override(), gim_hash_table< T >::insert_unsorted(), GIM_CONTACT::interpolate_normals(), GIM_BOX_TREE::isLeafNode(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::isLeafNode(), LINE_PLANE_COLLISION(), gim_array< T >::max_size(), gim_contact_array::merge_contacts(), gim_contact_array::merge_contacts_unique(), GIM_TRIANGLE_CONTACT_DATA::merge_points(), GIM_TRIANGLE_CONTACT_DATA::mergepoints_generic(), GIM_TREE_TREE_COLLIDER< BOX_SET_CLASS0, BOX_SET_CLASS1 >::node_collision(), GIM_HASH_NODE_CMP_KEY_MACRO::operator()(), GIM_HASH_NODE_GET_KEY::operator()(), uint_key_func::operator()(), gim_hash_table< T >::operator[](), gim_hash_table< T >::operator[](), PLANE_CLIP_POLYGON3D(), PLANE_CLIP_POLYGON_COLLECT(), PLANE_CLIP_POLYGON_GENERIC(), PLANE_CLIP_TRIANGLE3D(), PLANE_CLIP_TRIANGLE_GENERIC(), POINT_IN_HULL(), gim_contact_array::push_contact(), gim_pair_set::push_pair(), gim_pair_set::push_pair_inv(), gim_contact_array::push_triangle_contacts(), GIM_TRIANGLE::ray_collision(), GIM_TRIANGLE::ray_collision_front_side(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::rayQuery(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::refit(), gim_array< T >::reserve(), gim_array< T >::resize(), gim_bitset::resize(), gim_array< T >::resizeData(), GIM_TREE_TREE_COLLIDER< BOX_SET_CLASS0, BOX_SET_CLASS1 >::retrieve_node0_info(), GIM_TREE_TREE_COLLIDER< BOX_SET_CLASS0, BOX_SET_CLASS1 >::retrieve_node0_triangle(), GIM_TREE_TREE_COLLIDER< BOX_SET_CLASS0, BOX_SET_CLASS1 >::retrieve_node1_info(), GIM_TREE_TREE_COLLIDER< BOX_SET_CLASS0, BOX_SET_CLASS1 >::retrieve_node1_triangle(), gim_bitset::set(), gim_bitset::set_all(), GIM_BOX_TREE::setNodeBound(), GIM_BOX_TREE_TEMPLATE_SET< _GIM_PRIMITIVE_MANAGER_PROTOTYPE, _GIM_BOX_TREE_PROTOTYPE >::setNodeBound(), gim_array< T >::size(), gim_bitset::size(), gim_hash_table< T >::size(), gim_hash_table< T >::sort(), SORT_3_INDICES(), GIM_TRIANGLE_CALCULATION_CACHE::sort_isect(), gim_array< T >::swap(), and GIM_TRIANGLE_CALCULATION_CACHE::triangle_collision().

◆ GUINT64

#define GUINT64   unsigned long long

Definition at line 44 of file gim_math.h.

◆ GUSHORT

#define GUSHORT   unsigned short

Definition at line 42 of file gim_math.h.

Enumeration Type Documentation

◆ GIM_SCALAR_TYPES

Enumerator
G_STYPE_REAL 
G_STYPE_REAL2 
G_STYPE_SHORT 
G_STYPE_USHORT 
G_STYPE_INT 
G_STYPE_UINT 
G_STYPE_INT64 
G_STYPE_UINT64 

Definition at line 58 of file gim_math.h.

Function Documentation

◆ gim_inv_sqrt()

GREAL gim_inv_sqrt ( GREAL f)
inline

Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html.

Definition at line 134 of file gim_math.h.

References GIM_INV_SQRT, and GREAL.

◆ gim_sqrt()

GREAL gim_sqrt ( GREAL f)
inline

Definition at line 141 of file gim_math.h.

References GIM_SQRT, and GREAL.