Пример #1
0
 public unsafe override void Initialize(ContentArchive content, Camera camera)
 {
     {
         SphereTriangleTester tester;
         SphereWide           sphere = default;
         sphere.Broadcast(new Sphere(0.5f));
         TriangleWide triangle = default;
         var          a        = new Vector3(0, 0, 0);
         var          b        = new Vector3(1, 0, 0);
         var          c        = new Vector3(0, 0, 1);
         //var center = (a + b + c) / 3f;
         //a -= center;
         //b -= center;
         //c -= center;
         triangle.Broadcast(new Triangle(a, b, c));
         var margin = new Vector <float>(1f);
         Vector3Wide.Broadcast(new Vector3(1, -1, 0), out var offsetB);
         QuaternionWide.Broadcast(QuaternionEx.CreateFromAxisAngle(new Vector3(0, 1, 0), MathF.PI / 2), out var orientationB);
         tester.Test(ref sphere, ref triangle, ref margin, ref offsetB, ref orientationB, Vector <float> .Count, out var manifold);
     }
     {
         CapsuleTriangleTester tester;
         CapsuleWide           capsule = default;
         capsule.Broadcast(new Capsule(0.5f, 0.5f));
         TriangleWide triangle = default;
         var          a        = new Vector3(0, 0, 0);
         var          b        = new Vector3(1, 0, 0);
         var          c        = new Vector3(0, 0, 1);
         //var center = (a + b + c) / 3f;
         //a -= center;
         //b -= center;
         //c -= center;
         triangle.Broadcast(new Triangle(a, b, c));
         var margin = new Vector <float>(2f);
         Vector3Wide.Broadcast(new Vector3(-1f, -0.5f, -1f), out var offsetB);
         QuaternionWide.Broadcast(QuaternionEx.CreateFromAxisAngle(Vector3.Normalize(new Vector3(-1, 0, 1)), MathHelper.PiOver2), out var orientationA);
         QuaternionWide.Broadcast(QuaternionEx.CreateFromAxisAngle(new Vector3(0, 1, 0), 0), out var orientationB);
         tester.Test(ref capsule, ref triangle, ref margin, ref offsetB, ref orientationA, ref orientationB, Vector <float> .Count, out var manifold);
     }
     {
         BoxTriangleTester tester;
         BoxWide           shape = default;
         shape.Broadcast(new Box(1f, 1f, 1f));
         TriangleWide triangle = default;
         var          a        = new Vector3(0, 0, 0);
         var          b        = new Vector3(1, 0, 0);
         var          c        = new Vector3(0, 0, 1);
         //var center = (a + b + c) / 3f;
         //a -= center;
         //b -= center;
         //c -= center;
         triangle.Broadcast(new Triangle(a, b, c));
         var margin = new Vector <float>(2f);
         Vector3Wide.Broadcast(new Vector3(-1f, -0.5f, -1f), out var offsetB);
         QuaternionWide.Broadcast(QuaternionEx.CreateFromAxisAngle(Vector3.Normalize(new Vector3(-1, 0, 1)), MathHelper.PiOver2), out var orientationA);
         QuaternionWide.Broadcast(QuaternionEx.CreateFromAxisAngle(new Vector3(0, 1, 0), 0), out var orientationB);
         tester.Test(ref shape, ref triangle, ref margin, ref offsetB, ref orientationA, ref orientationB, Vector <float> .Count, out var manifold);
     }
     {
         TrianglePairTester tester;
         TriangleWide       a = default, b = default;
Пример #2
0
 public static void Gather(ref Buffer <Capsule> shapes, ref Vector <int> shapeIndices, int count, out CapsuleWide capsules)
 {
     ref var radiusBase       = ref Unsafe.As <Vector <float>, float>(ref capsules.Radius);