605 CollisionContext.Init(box,move,tri,
Vector3(0,0,0));
610 CollisionContext.TestAxis = CollisionContext.N;
611 CollisionContext.TestAxisId =
AXIS_N;
612 CollisionContext.AN[0] = CollisionContext.N.X;
613 CollisionContext.AN[1] = CollisionContext.N.Y;
614 CollisionContext.AN[2] = CollisionContext.N.Z;
615 if (aabtri_check_normal_axis())
goto exit;
620 CollisionContext.TestAxis.Set(1,0,0);
621 CollisionContext.TestAxisId =
AXIS_A0;
622 CollisionContext.AE[0][0] = CollisionContext.E[0].X;
623 CollisionContext.AE[0][1] = CollisionContext.E[1].X;
624 if (aabtri_check_basis_axis(box.
Extent.
X,CollisionContext.AE[0][0],CollisionContext.AE[0][1]))
goto exit;
629 CollisionContext.TestAxis.Set(0,1,0);
630 CollisionContext.TestAxisId =
AXIS_A1;
631 CollisionContext.AE[1][0] = CollisionContext.E[0].Y;
632 CollisionContext.AE[1][1] = CollisionContext.E[1].Y;
633 if (aabtri_check_basis_axis(box.
Extent.
Y,CollisionContext.AE[1][0],CollisionContext.AE[1][1]))
goto exit;
638 CollisionContext.TestAxis.Set(0,0,1);
639 CollisionContext.TestAxisId =
AXIS_A2;
640 CollisionContext.AE[2][0] = CollisionContext.E[0].Z;
641 CollisionContext.AE[2][1] = CollisionContext.E[1].Z;
642 if (aabtri_check_basis_axis(box.
Extent.
Z,CollisionContext.AE[2][0],CollisionContext.AE[2][1]))
goto exit;
647 CollisionContext.AxE[0][0].Set(0,-CollisionContext.E[0].Z,CollisionContext.E[0].Y);
649 CollisionContext.TestAxis = CollisionContext.AxE[0][0];
652 dp = CollisionContext.AN[0];
654 if (aabtri_check_cross_axis(dp,2,leb0))
goto exit;
660 CollisionContext.AxE[0][1].Set(0,-CollisionContext.E[1].Z,CollisionContext.E[1].Y);
662 CollisionContext.TestAxis = CollisionContext.AxE[0][1];
665 dp = -CollisionContext.AN[0];
667 if (aabtri_check_cross_axis(dp,1,leb0))
goto exit;
673 CollisionContext.AE[0][2] = CollisionContext.E[2].X;
674 CollisionContext.AE[1][2] = CollisionContext.E[2].Y;
675 CollisionContext.AE[2][2] = CollisionContext.E[2].Z;
677 CollisionContext.AxE[0][2].Set(0,-CollisionContext.E[2].Z,CollisionContext.E[2].Y);
679 CollisionContext.TestAxis = CollisionContext.AxE[0][2];
683 dp = -CollisionContext.AN[0];
685 if (aabtri_check_cross_axis(dp,1,leb0))
goto exit;
691 CollisionContext.AxE[1][0].Set(CollisionContext.E[0].Z,0,-CollisionContext.E[0].X);
693 CollisionContext.TestAxis = CollisionContext.AxE[1][0];
696 dp = CollisionContext.AN[1];
698 if (aabtri_check_cross_axis(dp,2,leb0))
goto exit;
704 CollisionContext.AxE[1][1].Set(CollisionContext.E[1].Z,0,-CollisionContext.E[1].X);
706 CollisionContext.TestAxis = CollisionContext.AxE[1][1];
709 dp = -CollisionContext.AN[1];
711 if (aabtri_check_cross_axis(dp,1,leb0))
goto exit;
717 CollisionContext.AxE[1][2].Set(CollisionContext.E[2].Z,0,-CollisionContext.E[2].X);
719 CollisionContext.TestAxis = CollisionContext.AxE[1][2];
722 dp = -CollisionContext.AN[1];
724 if (aabtri_check_cross_axis(dp,1,leb0))
goto exit;
730 CollisionContext.AxE[2][0].Set(-CollisionContext.E[0].Y,CollisionContext.E[0].X,0);
732 CollisionContext.TestAxis = CollisionContext.AxE[2][0];
735 dp = CollisionContext.AN[2];
737 if (aabtri_check_cross_axis(dp,2,leb0))
goto exit;
743 CollisionContext.AxE[2][1].Set(-CollisionContext.E[1].Y,CollisionContext.E[1].X,0);
745 CollisionContext.TestAxis = CollisionContext.AxE[2][1];
748 dp = -CollisionContext.AN[2];
750 if (aabtri_check_cross_axis(dp,1,leb0))
goto exit;
756 CollisionContext.AxE[2][2].Set(-CollisionContext.E[2].Y,CollisionContext.E[2].X,0);
758 CollisionContext.TestAxis = CollisionContext.AxE[2][2];
761 dp = -CollisionContext.AN[2];
763 if (aabtri_check_cross_axis(dp,1,leb0))
goto exit;
769 if (!CollisionContext.StartBad) {
770 CollisionContext.TestPoint = CollisionContext.Point;
771 CollisionContext.TestAxisId = CollisionContext.AxisId;
773 CollisionContext.TestAxis.Set(0,-CollisionContext.Move.Z,CollisionContext.Move.Y);
776 if (aabtri_check_axis())
goto exit;
778 CollisionContext.TestAxis.Set(CollisionContext.Move.Z,0,-CollisionContext.Move.X);
781 if (aabtri_check_axis())
goto exit;
783 CollisionContext.TestAxis.Set(-CollisionContext.Move.Y,CollisionContext.Move.X,0);
786 if (aabtri_check_axis())
goto exit;
796 if (CollisionContext.MaxFrac < 0.0f) {
797 CollisionContext.MaxFrac = 0.0f;
804 if (CollisionContext.StartBad) {
817 if ((CollisionContext.MaxFrac <= result->
Fraction) && (CollisionContext.MaxFrac < 1.0f)) {
823 Vector3 tmp_norm(0.0f,0.0f,0.0f);
824 aabtri_compute_contact_normal(tmp_norm);
836 result->
Normal = tmp_norm;
840 result->
Fraction = CollisionContext.MaxFrac;
1046 IntersectContext.Init(box,tri);
1051 axis = IntersectContext.N;
1052 IntersectContext.AN[0] = IntersectContext.N.
X;
1053 IntersectContext.AN[1] = IntersectContext.N.Y;
1054 IntersectContext.AN[2] = IntersectContext.N.Z;
1055 if (aabtri_intersect_normal_axis(axis))
return false;
1061 IntersectContext.AE[0][0] = IntersectContext.E[0].X;
1062 IntersectContext.AE[0][1] = IntersectContext.E[1].Y;
1063 if (aabtri_intersect_basis_axis(axis,box.
Extent.
X,IntersectContext.AE[0][0],IntersectContext.AE[0][1]))
return false;
1069 IntersectContext.AE[1][0] = IntersectContext.E[0].Y;
1070 IntersectContext.AE[1][1] = IntersectContext.E[1].Y;
1071 if (aabtri_intersect_basis_axis(axis,box.
Extent.
Y,IntersectContext.AE[1][0],IntersectContext.AE[1][1]))
return false;
1077 IntersectContext.AE[2][0] = IntersectContext.E[0].Z;
1078 IntersectContext.AE[2][1] = IntersectContext.E[1].Z;
1079 if (aabtri_intersect_basis_axis(axis,box.
Extent.
Z,IntersectContext.AE[2][0],IntersectContext.AE[2][1]))
return false;
1085 axis = IntersectContext.AxE[0][0];
1087 dp = IntersectContext.AN[0];
1089 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1096 axis = IntersectContext.AxE[0][1];
1098 dp = -IntersectContext.AN[0];
1100 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1107 axis = IntersectContext.AxE[0][2];
1108 IntersectContext.AE[1][2] = IntersectContext.E[2].
Y;
1109 IntersectContext.AE[2][2] = IntersectContext.E[2].Z;
1111 dp = -IntersectContext.AN[0];
1113 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1120 axis = IntersectContext.AxE[1][0];
1122 dp = IntersectContext.AN[1];
1124 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1131 axis = IntersectContext.AxE[1][1];
1133 dp = -IntersectContext.AN[1];
1135 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1142 axis = IntersectContext.AxE[1][2];
1143 IntersectContext.AE[0][2] = IntersectContext.E[2].
X;
1145 dp = -IntersectContext.AN[1];
1147 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1154 axis = IntersectContext.AxE[2][0];
1156 dp = IntersectContext.AN[2];
1158 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1165 axis = IntersectContext.AxE[2][1];
1167 dp = -IntersectContext.AN[2];
1169 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;
1176 axis = IntersectContext.AxE[2][2];
1178 dp = -IntersectContext.AN[2];
1180 if (aabtri_intersect_cross_axis(axis,dp,leb0))
return false;