26
26
* *
27
27
* Author:: Greg Hjelstrom *
28
28
* *
29
- * $Modtime:: 5/04 /01 8:37p $*
29
+ * $Modtime:: 11/28 /01 5:56p $*
30
30
* *
31
- * $Revision:: 15 $*
31
+ * $Revision:: 16 $*
32
32
* *
33
33
*---------------------------------------------------------------------------------------------*
34
34
* Functions: *
@@ -527,7 +527,7 @@ static inline float eval_side(float val,int side)
527
527
static inline void obbtri_compute_contact_normal
528
528
(
529
529
const BTCollisionStruct & context,
530
- CastResultStruct * result
530
+ Vector3 * set_normal
531
531
)
532
532
{
533
533
switch (context.AxisId )
@@ -536,55 +536,55 @@ static inline void obbtri_compute_contact_normal
536
536
// WWASSERT(0);
537
537
break ;
538
538
case AXIS_N:
539
- result-> Normal = -context.Side * *context.Tri .N ;
539
+ *set_normal = -context.Side * *context.Tri .N ;
540
540
break ;
541
541
case AXIS_A0:
542
- result-> Normal = -context.Side * context.A [0 ];
542
+ *set_normal = -context.Side * context.A [0 ];
543
543
break ;
544
544
case AXIS_A1:
545
- result-> Normal = -context.Side * context.A [1 ];
545
+ *set_normal = -context.Side * context.A [1 ];
546
546
break ;
547
547
case AXIS_A2:
548
- result-> Normal = -context.Side * context.A [2 ];
548
+ *set_normal = -context.Side * context.A [2 ];
549
549
break ;
550
550
case AXIS_A0E0:
551
- result-> Normal = -context.Side * context.AxE [0 ][0 ];
552
- result-> Normal . Normalize ();
551
+ *set_normal = -context.Side * context.AxE [0 ][0 ];
552
+ set_normal-> Normalize ();
553
553
break ;
554
554
case AXIS_A1E0:
555
- result-> Normal = -context.Side * context.AxE [1 ][0 ];
556
- result-> Normal . Normalize ();
555
+ *set_normal = -context.Side * context.AxE [1 ][0 ];
556
+ set_normal-> Normalize ();
557
557
break ;
558
558
case AXIS_A2E0:
559
- result-> Normal = -context.Side * context.AxE [2 ][0 ];
560
- result-> Normal . Normalize ();
559
+ *set_normal = -context.Side * context.AxE [2 ][0 ];
560
+ set_normal-> Normalize ();
561
561
break ;
562
562
case AXIS_A0E1:
563
- result-> Normal = -context.Side * context.AxE [0 ][1 ];
564
- result-> Normal . Normalize ();
563
+ *set_normal = -context.Side * context.AxE [0 ][1 ];
564
+ set_normal-> Normalize ();
565
565
break ;
566
566
case AXIS_A1E1:
567
- result-> Normal = -context.Side * context.AxE [1 ][1 ];
568
- result-> Normal . Normalize ();
567
+ *set_normal = -context.Side * context.AxE [1 ][1 ];
568
+ set_normal-> Normalize ();
569
569
break ;
570
570
case AXIS_A2E1:
571
- result-> Normal = -context.Side * context.AxE [2 ][1 ];
572
- result-> Normal . Normalize ();
571
+ *set_normal = -context.Side * context.AxE [2 ][1 ];
572
+ set_normal-> Normalize ();
573
573
break ;
574
574
case AXIS_A0E2:
575
- result-> Normal = -context.Side * context.AxE [0 ][2 ];
576
- result-> Normal . Normalize ();
575
+ *set_normal = -context.Side * context.AxE [0 ][2 ];
576
+ set_normal-> Normalize ();
577
577
break ;
578
578
case AXIS_A1E2:
579
- result-> Normal = -context.Side * context.AxE [1 ][2 ];
580
- result-> Normal . Normalize ();
579
+ *set_normal = -context.Side * context.AxE [1 ][2 ];
580
+ set_normal-> Normalize ();
581
581
break ;
582
582
case AXIS_A2E2:
583
- result-> Normal = -context.Side * context.AxE [2 ][2 ];
584
- result-> Normal . Normalize ();
583
+ *set_normal = -context.Side * context.AxE [2 ][2 ];
584
+ set_normal-> Normalize ();
585
585
break ;
586
586
}
587
- WWASSERT (result-> Normal . Length2 () > 0 .0f );
587
+ WWASSERT (set_normal-> Length2 () > 0 .0f );
588
588
}
589
589
590
590
@@ -1095,10 +1095,13 @@ bool CollisionMath::Collide
1095
1095
1096
1096
if ((context.MaxFrac < 1 .0f ) && (context.MaxFrac <= result->Fraction )) {
1097
1097
1098
+ Vector3 normal;
1099
+ obbtri_compute_contact_normal (context,&normal);
1100
+
1098
1101
if ( (WWMath::Fabs (context.MaxFrac - result->Fraction ) > WWMATH_EPSILON) ||
1099
- (Vector3::Dot_Product (*(tri. N ) ,move) < Vector3::Dot_Product (result->Normal ,move)) )
1102
+ (Vector3::Dot_Product (normal ,move) < Vector3::Dot_Product (result->Normal ,move)) )
1100
1103
{
1101
- obbtri_compute_contact_normal (context,result);
1104
+ result-> Normal = normal; // obbtri_compute_contact_normal(context,result);
1102
1105
}
1103
1106
1104
1107
result->Fraction = context.MaxFrac ;
0 commit comments