2626 * *
2727 * Author:: Greg Hjelstrom *
2828 * *
29- * $Modtime:: 5/04 /01 8:37p $*
29+ * $Modtime:: 11/28 /01 5:56p $*
3030 * *
31- * $Revision:: 15 $*
31+ * $Revision:: 16 $*
3232 * *
3333 *---------------------------------------------------------------------------------------------*
3434 * Functions: *
@@ -527,7 +527,7 @@ static inline float eval_side(float val,int side)
527527static inline void obbtri_compute_contact_normal
528528(
529529 const BTCollisionStruct & context,
530- CastResultStruct * result
530+ Vector3 * set_normal
531531)
532532{
533533 switch (context.AxisId )
@@ -536,55 +536,55 @@ static inline void obbtri_compute_contact_normal
536536// WWASSERT(0);
537537 break ;
538538 case AXIS_N:
539- result-> Normal = -context.Side * *context.Tri .N ;
539+ *set_normal = -context.Side * *context.Tri .N ;
540540 break ;
541541 case AXIS_A0:
542- result-> Normal = -context.Side * context.A [0 ];
542+ *set_normal = -context.Side * context.A [0 ];
543543 break ;
544544 case AXIS_A1:
545- result-> Normal = -context.Side * context.A [1 ];
545+ *set_normal = -context.Side * context.A [1 ];
546546 break ;
547547 case AXIS_A2:
548- result-> Normal = -context.Side * context.A [2 ];
548+ *set_normal = -context.Side * context.A [2 ];
549549 break ;
550550 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 ();
553553 break ;
554554 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 ();
557557 break ;
558558 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 ();
561561 break ;
562562 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 ();
565565 break ;
566566 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 ();
569569 break ;
570570 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 ();
573573 break ;
574574 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 ();
577577 break ;
578578 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 ();
581581 break ;
582582 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 ();
585585 break ;
586586 }
587- WWASSERT (result-> Normal . Length2 () > 0 .0f );
587+ WWASSERT (set_normal-> Length2 () > 0 .0f );
588588}
589589
590590
@@ -1095,10 +1095,13 @@ bool CollisionMath::Collide
10951095
10961096 if ((context.MaxFrac < 1 .0f ) && (context.MaxFrac <= result->Fraction )) {
10971097
1098+ Vector3 normal;
1099+ obbtri_compute_contact_normal (context,&normal);
1100+
10981101 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)) )
11001103 {
1101- obbtri_compute_contact_normal (context,result);
1104+ result-> Normal = normal; // obbtri_compute_contact_normal(context,result);
11021105 }
11031106
11041107 result->Fraction = context.MaxFrac ;
0 commit comments