@@ -16,6 +16,11 @@ def __init__(self, rigid_solver):
16
16
self ._B = rigid_solver ._B
17
17
self ._para_level = rigid_solver ._para_level
18
18
19
+ if gs .ti_float == ti .f32 :
20
+ self .CCD_EPS = 1e-6
21
+ else :
22
+ self .CCD_EPS = 1e-10
23
+
19
24
self .support_field = SupportField (rigid_solver )
20
25
self .init_support ()
21
26
@@ -150,7 +155,6 @@ def mpr_portal_dir(self, i_ga, i_gb, i_b):
150
155
def mpr_portal_encapsules_origin (self , direction , i_ga , i_gb , i_b ):
151
156
dot = direction .dot (self .simplex_support [i_ga , i_gb , 1 , i_b ].v )
152
157
153
- CCD_EPS = 1e-5
154
158
return dot > 0.0
155
159
# return dot > 0 or ti.abs(dot) < CCD_EPS
156
160
@@ -418,7 +422,6 @@ def mpr_expand_portal(self, v, v1, v2, i_ga, i_gb, i_b):
418
422
419
423
@ti .func
420
424
def mpr_discover_portal (self , i_ga , i_gb , i_b ):
421
- CCD_EPS = 1e-5
422
425
ret = 0
423
426
self .simplex_size [i_ga , i_gb , i_b ] = 0
424
427
@@ -436,8 +439,8 @@ def mpr_discover_portal(self, i_ga, i_gb, i_b):
436
439
self .simplex_support [i_ga , i_gb , 0 , i_b ].v = center_a - center_b
437
440
self .simplex_size [i_ga , i_gb , i_b ] = 1
438
441
439
- if self .simplex_support [i_ga , i_gb , 0 , i_b ].v .norm () < CCD_EPS :
440
- self .simplex_support [i_ga , i_gb , 0 , i_b ].v += gs .ti_vec3 ([10.0 * CCD_EPS , 0.0 , 0.0 ])
442
+ if self .simplex_support [i_ga , i_gb , 0 , i_b ].v .norm () < self . CCD_EPS :
443
+ self .simplex_support [i_ga , i_gb , 0 , i_b ].v += gs .ti_vec3 ([10.0 * self . CCD_EPS , 0.0 , 0.0 ])
441
444
442
445
direction = (self .simplex_support [i_ga , i_gb , 0 , i_b ].v * - 1 ).normalized ()
443
446
@@ -451,13 +454,13 @@ def mpr_discover_portal(self, i_ga, i_gb, i_b):
451
454
dot = v .dot (direction )
452
455
453
456
# if dot < 0 or ti.abs(dot) < CCD_EPS:
454
- if dot < CCD_EPS :
457
+ if dot < self . CCD_EPS :
455
458
ret = - 1
456
459
else :
457
460
direction = self .simplex_support [i_ga , i_gb , 0 , i_b ].v .cross (self .simplex_support [i_ga , i_gb , 1 , i_b ].v )
458
- if direction .norm () < CCD_EPS :
461
+ if direction .norm () < self . CCD_EPS :
459
462
# if portal.points[1].v == ccd_vec3_origin:
460
- if self .simplex_support [i_ga , i_gb , 1 , i_b ].v .norm () < CCD_EPS :
463
+ if self .simplex_support [i_ga , i_gb , 1 , i_b ].v .norm () < self . CCD_EPS :
461
464
ret = 1
462
465
else :
463
466
ret = 2
@@ -466,7 +469,7 @@ def mpr_discover_portal(self, i_ga, i_gb, i_b):
466
469
v , v1 , v2 = self .compute_support (direction , i_ga , i_gb , i_b )
467
470
dot = v .dot (direction )
468
471
# if dot < 0 or ti.abs(dot) < CCD_EPS:
469
- if dot < CCD_EPS :
472
+ if dot < self . CCD_EPS :
470
473
ret = - 1
471
474
else :
472
475
self .simplex_support [i_ga , i_gb , 2 , i_b ].v1 = v1
@@ -488,7 +491,7 @@ def mpr_discover_portal(self, i_ga, i_gb, i_b):
488
491
v , v1 , v2 = self .compute_support (direction , i_ga , i_gb , i_b )
489
492
dot = v .dot (direction )
490
493
# if dot < 0 or ti.abs(dot) < CCD_EPS:
491
- if dot < CCD_EPS :
494
+ if dot < self . CCD_EPS :
492
495
ret = - 1
493
496
break
494
497
@@ -497,7 +500,7 @@ def mpr_discover_portal(self, i_ga, i_gb, i_b):
497
500
va = self .simplex_support [i_ga , i_gb , 1 , i_b ].v .cross (v )
498
501
dot = va .dot (self .simplex_support [i_ga , i_gb , 0 , i_b ].v )
499
502
# if dot < 0 or ti.abs(dot) < CCD_EPS:
500
- if dot < - CCD_EPS :
503
+ if dot < - self . CCD_EPS :
501
504
self .simplex_support [i_ga , i_gb , 2 , i_b ].v1 = v1
502
505
self .simplex_support [i_ga , i_gb , 2 , i_b ].v2 = v2
503
506
self .simplex_support [i_ga , i_gb , 2 , i_b ].v = v
@@ -507,7 +510,7 @@ def mpr_discover_portal(self, i_ga, i_gb, i_b):
507
510
va = v .cross (self .simplex_support [i_ga , i_gb , 2 , i_b ].v )
508
511
dot = va .dot (self .simplex_support [i_ga , i_gb , 0 , i_b ].v )
509
512
# if dot < 0 or ti.abs(dot) < CCD_EPS:
510
- if dot < - CCD_EPS :
513
+ if dot < - self . CCD_EPS :
511
514
self .simplex_support [i_ga , i_gb , 1 , i_b ].v1 = v1
512
515
self .simplex_support [i_ga , i_gb , 1 , i_b ].v2 = v2
513
516
self .simplex_support [i_ga , i_gb , 1 , i_b ].v = v
0 commit comments