Blender  V2.93
Classes | Macros | Typedefs | Functions
collision.c File Reference
#include "MEM_guardedalloc.h"
#include "DNA_cloth_types.h"
#include "DNA_collection_types.h"
#include "DNA_effect_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_force_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_edgehash.h"
#include "BLI_linklist.h"
#include "BLI_math.h"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BKE_cloth.h"
#include "BKE_collection.h"
#include "BKE_effect.h"
#include "BKE_layer.h"
#include "BKE_modifier.h"
#include "BKE_scene.h"
#include "BKE_collision.h"
#include "BLI_kdopbvh.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_physics.h"
#include "DEG_depsgraph_query.h"

Go to the source code of this file.

Classes

struct  ColDetectData
 
struct  SelfColDetectData
 

Macros

#define INPR(v1, v2)   ((v1)[0] * (v2)[0] + (v1)[1] * (v2)[1] + (v1)[2] * (v2)[2])
 

Typedefs

typedef struct ColDetectData ColDetectData
 
typedef struct SelfColDetectData SelfColDetectData
 

Functions

void collision_move_object (CollisionModifierData *collmd, const float step, const float prevstep, const bool moving_bvh)
 
BVHTreebvhtree_build_from_mvert (const MVert *mvert, const struct MVertTri *tri, int tri_num, float epsilon)
 
void bvhtree_update_from_mvert (BVHTree *bvhtree, const MVert *mvert, const MVert *mvert_moving, const MVertTri *tri, int tri_num, bool moving)
 
BLI_INLINE int next_ind (int i)
 
static float compute_collision_point_tri_tri (const float a1[3], const float a2[3], const float a3[3], const float b1[3], const float b2[3], const float b3[3], bool culling, bool use_normal, float r_a[3], float r_b[3], float r_vec[3])
 
static float compute_collision_point_edge_tri (const float a1[3], const float a2[3], const float b1[3], const float b2[3], const float b3[3], bool culling, bool use_normal, float r_a[3], float r_b[3], float r_vec[3])
 
static void collision_compute_barycentric (const float pv[3], const float p1[3], const float p2[3], const float p3[3], float *w1, float *w2, float *w3)
 
DO_INLINE void collision_interpolateOnTriangle (float to[3], const float v1[3], const float v2[3], const float v3[3], const double w1, const double w2, const double w3)
 
static void cloth_collision_impulse_vert (const float clamp_sq, const float impulse[3], struct ClothVertex *vert)
 
static int cloth_collision_response_static (ClothModifierData *clmd, CollisionModifierData *collmd, Object *collob, CollPair *collpair, uint collision_count, const float dt)
 
static int cloth_selfcollision_response_static (ClothModifierData *clmd, CollPair *collpair, uint collision_count, const float dt)
 
static bool cloth_bvh_collision_is_active (const ClothModifierData *UNUSED(clmd), const Cloth *cloth, const MVertTri *tri_a)
 
static void cloth_collision (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict UNUSED(tls))
 
static bool cloth_bvh_selfcollision_is_active (const ClothModifierData *clmd, const Cloth *cloth, const MVertTri *tri_a, const MVertTri *tri_b)
 
static void cloth_selfcollision (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void hair_collision (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict UNUSED(tls))
 
static void add_collision_object (ListBase *relations, Object *ob, int level, unsigned int modifier_type)
 
ListBaseBKE_collision_relations_create (Depsgraph *depsgraph, Collection *collection, unsigned int modifier_type)
 
void BKE_collision_relations_free (ListBase *relations)
 
Object ** BKE_collision_objects_create (Depsgraph *depsgraph, Object *self, Collection *collection, unsigned int *numcollobj, unsigned int modifier_type)
 
void BKE_collision_objects_free (Object **objects)
 
ListBaseBKE_collider_cache_create (Depsgraph *depsgraph, Object *self, Collection *collection)
 
void BKE_collider_cache_free (ListBase **colliders)
 
static bool cloth_bvh_objcollisions_nearcheck (ClothModifierData *clmd, CollisionModifierData *collmd, CollPair **collisions, int numresult, BVHTreeOverlap *overlap, bool culling, bool use_normal)
 
static bool cloth_bvh_selfcollisions_nearcheck (ClothModifierData *clmd, CollPair *collisions, int numresult, BVHTreeOverlap *overlap)
 
static int cloth_bvh_objcollisions_resolve (ClothModifierData *clmd, Object **collobjs, CollPair **collisions, uint *collision_counts, const uint numcollobj, const float dt)
 
static int cloth_bvh_selfcollisions_resolve (ClothModifierData *clmd, CollPair *collisions, int collision_count, const float dt)
 
static bool cloth_bvh_obj_overlap_cb (void *userdata, int index_a, int UNUSED(index_b), int UNUSED(thread))
 
static bool cloth_bvh_self_overlap_cb (void *userdata, int index_a, int index_b, int UNUSED(thread))
 
int cloth_bvh_collision (Depsgraph *depsgraph, Object *ob, ClothModifierData *clmd, float step, float dt)
 
BLI_INLINE void max_v3_v3v3 (float r[3], const float a[3], const float b[3])
 
void collision_get_collider_velocity (float vel_old[3], float vel_new[3], CollisionModifierData *collmd, CollPair *collpair)
 

Macro Definition Documentation

◆ INPR

#define INPR (   v1,
  v2 
)    ((v1)[0] * (v2)[0] + (v1)[1] * (v2)[1] + (v1)[2] * (v2)[2])

Typedef Documentation

◆ ColDetectData

typedef struct ColDetectData ColDetectData

◆ SelfColDetectData

Function Documentation

◆ add_collision_object()

static void add_collision_object ( ListBase relations,
Object ob,
int  level,
unsigned int  modifier_type 
)
static

◆ BKE_collider_cache_create()

ListBase* BKE_collider_cache_create ( Depsgraph depsgraph,
Object self,
Collection collection 
)

◆ BKE_collider_cache_free()

void BKE_collider_cache_free ( ListBase **  colliders)

Definition at line 1383 of file collision.c.

References BLI_freelistN(), MEM_freeN, and NULL.

Referenced by dynamics_step(), eff_calc_visibility(), and SCULPT_cloth_simulation_free().

◆ BKE_collision_objects_create()

Object** BKE_collision_objects_create ( Depsgraph depsgraph,
Object self,
Collection collection,
unsigned int *  numcollobj,
unsigned int  modifier_type 
)

◆ BKE_collision_objects_free()

void BKE_collision_objects_free ( Object **  objects)

◆ BKE_collision_relations_create()

ListBase* BKE_collision_relations_create ( Depsgraph depsgraph,
Collection collection,
unsigned int  modifier_type 
)

◆ BKE_collision_relations_free()

void BKE_collision_relations_free ( ListBase relations)

Definition at line 1287 of file collision.c.

References BLI_freelistN(), and MEM_freeN.

Referenced by blender::deg::clear_physics_relations().

◆ bvhtree_build_from_mvert()

BVHTree* bvhtree_build_from_mvert ( const MVert mvert,
const struct MVertTri tri,
int  tri_num,
float  epsilon 
)

◆ bvhtree_update_from_mvert()

void bvhtree_update_from_mvert ( BVHTree bvhtree,
const MVert mvert,
const MVert mvert_moving,
const MVertTri tri,
int  tri_num,
bool  moving 
)

◆ cloth_bvh_collision()

int cloth_bvh_collision ( Depsgraph depsgraph,
Object ob,
ClothModifierData clmd,
float  step,
float  dt 
)

◆ cloth_bvh_collision_is_active()

static bool cloth_bvh_collision_is_active ( const ClothModifierData UNUSEDclmd,
const Cloth cloth,
const MVertTri tri_a 
)
static

◆ cloth_bvh_obj_overlap_cb()

static bool cloth_bvh_obj_overlap_cb ( void *  userdata,
int  index_a,
int   UNUSEDindex_b,
int   UNUSEDthread 
)
static

◆ cloth_bvh_objcollisions_nearcheck()

static bool cloth_bvh_objcollisions_nearcheck ( ClothModifierData clmd,
CollisionModifierData collmd,
CollPair **  collisions,
int  numresult,
BVHTreeOverlap overlap,
bool  culling,
bool  use_normal 
)
static

◆ cloth_bvh_objcollisions_resolve()

static int cloth_bvh_objcollisions_resolve ( ClothModifierData clmd,
Object **  collobjs,
CollPair **  collisions,
uint collision_counts,
const uint  numcollobj,
const float  dt 
)
static

◆ cloth_bvh_self_overlap_cb()

static bool cloth_bvh_self_overlap_cb ( void *  userdata,
int  index_a,
int  index_b,
int   UNUSEDthread 
)
static

◆ cloth_bvh_selfcollision_is_active()

static bool cloth_bvh_selfcollision_is_active ( const ClothModifierData clmd,
const Cloth cloth,
const MVertTri tri_a,
const MVertTri tri_b 
)
static

◆ cloth_bvh_selfcollisions_nearcheck()

static bool cloth_bvh_selfcollisions_nearcheck ( ClothModifierData clmd,
CollPair collisions,
int  numresult,
BVHTreeOverlap overlap 
)
static

◆ cloth_bvh_selfcollisions_resolve()

static int cloth_bvh_selfcollisions_resolve ( ClothModifierData clmd,
CollPair collisions,
int  collision_count,
const float  dt 
)
static

◆ cloth_collision()

static void cloth_collision ( void *__restrict  userdata,
const int  index,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ cloth_collision_impulse_vert()

static void cloth_collision_impulse_vert ( const float  clamp_sq,
const float  impulse[3],
struct ClothVertex vert 
)
static

◆ cloth_collision_response_static()

static int cloth_collision_response_static ( ClothModifierData clmd,
CollisionModifierData collmd,
Object collob,
CollPair collpair,
uint  collision_count,
const float  dt 
)
static

◆ cloth_selfcollision()

static void cloth_selfcollision ( void *__restrict  userdata,
const int  index,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ cloth_selfcollision_response_static()

static int cloth_selfcollision_response_static ( ClothModifierData clmd,
CollPair collpair,
uint  collision_count,
const float  dt 
)
static

◆ collision_compute_barycentric()

static void collision_compute_barycentric ( const float  pv[3],
const float  p1[3],
const float  p2[3],
const float  p3[3],
float w1,
float w2,
float w3 
)
static

◆ collision_get_collider_velocity()

void collision_get_collider_velocity ( float  vel_old[3],
float  vel_new[3],
CollisionModifierData collmd,
CollPair collpair 
)

◆ collision_interpolateOnTriangle()

DO_INLINE void collision_interpolateOnTriangle ( float  to[3],
const float  v1[3],
const float  v2[3],
const float  v3[3],
const double  w1,
const double  w2,
const double  w3 
)

◆ collision_move_object()

void collision_move_object ( CollisionModifierData collmd,
const float  step,
const float  prevstep,
const bool  moving_bvh 
)

◆ compute_collision_point_edge_tri()

static float compute_collision_point_edge_tri ( const float  a1[3],
const float  a2[3],
const float  b1[3],
const float  b2[3],
const float  b3[3],
bool  culling,
bool  use_normal,
float  r_a[3],
float  r_b[3],
float  r_vec[3] 
)
static

◆ compute_collision_point_tri_tri()

static float compute_collision_point_tri_tri ( const float  a1[3],
const float  a2[3],
const float  a3[3],
const float  b1[3],
const float  b2[3],
const float  b3[3],
bool  culling,
bool  use_normal,
float  r_a[3],
float  r_b[3],
float  r_vec[3] 
)
static

◆ hair_collision()

static void hair_collision ( void *__restrict  userdata,
const int  index,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ max_v3_v3v3()

BLI_INLINE void max_v3_v3v3 ( float  r[3],
const float  a[3],
const float  b[3] 
)

Definition at line 1733 of file collision.c.

References Freestyle::a, max_ff(), and r.

◆ next_ind()

BLI_INLINE int next_ind ( int  i)