コード例 #1
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
 public static void GetBoundingBox(ref BoundingBoxWide boundingBoxes, int i, out BoundingBox box)
 {
     box = new BoundingBox
     {
         Min = new Vector3(boundingBoxes.Min.X[i], boundingBoxes.Min.Y[i], boundingBoxes.Min.Z[i]),
         Max = new Vector3(boundingBoxes.Max.X[i], boundingBoxes.Max.Y[i], boundingBoxes.Max.Z[i])
     };
 }
コード例 #2
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
        public static void ComputeVolume(ref BoundingBoxWide boxes, out Vector <float> volumes)
        {
            volumes = new Vector <float>();

            Vector3Wide span;

            Vector3Wide.Subtract(ref boxes.Max, ref boxes.Min, out span);
            volumes = span.X * span.Y * span.Z;
        }
コード例 #3
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
 public unsafe BoundingBoxWide(BoundingBox *boundingBoxes, Vector <int>[] masks)
 {
     Min = new Vector3Wide(ref boundingBoxes[0].Min);
     Max = new Vector3Wide(ref boundingBoxes[0].Max);
     for (int i = 1; i < Vector <float> .Count; ++i)
     {
         BoundingBoxWide wide = new BoundingBoxWide(ref boundingBoxes[i]);
         ConditionalSelect(ref masks[i], ref wide, ref this, out this);
     }
 }
コード例 #4
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
        public unsafe static void Intersects2(ref BoundingBoxWide a, ref BoundingBoxWide b, out Vector <int> intersectionMask)
        {
            var minX = Vector.Max(a.Min.X, b.Min.X);
            var minY = Vector.Max(a.Min.Y, b.Min.Y);
            var minZ = Vector.Max(a.Min.Z, b.Min.Z);
            var maxX = Vector.Min(a.Max.X, b.Max.X);
            var maxY = Vector.Min(a.Max.Y, b.Max.Y);
            var maxZ = Vector.Min(a.Max.Z, b.Max.Z);
            var xLeq = Vector.LessThanOrEqual(minX, maxX);
            var yLeq = Vector.LessThanOrEqual(minY, maxY);
            var zLeq = Vector.LessThanOrEqual(minZ, maxZ);

            intersectionMask = Vector.BitwiseAnd(xLeq, Vector.BitwiseAnd(yLeq, zLeq));
        }
コード例 #5
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
 public static void GetBoundingBox(ref BoundingBoxWide boundingBoxes, int i, out BoundingBoxWide wide)
 {
     wide.Min.X = new Vector <float>(boundingBoxes.Min.X[i]);
     wide.Min.Y = new Vector <float>(boundingBoxes.Min.Y[i]);
     wide.Min.Z = new Vector <float>(boundingBoxes.Min.Z[i]);
     wide.Max.X = new Vector <float>(boundingBoxes.Max.X[i]);
     wide.Max.Y = new Vector <float>(boundingBoxes.Max.Y[i]);
     wide.Max.Z = new Vector <float>(boundingBoxes.Max.Z[i]);
     //var boundingBox = new BoundingBox
     //{
     //    Min = new Vector3(boundingBoxes.Min.X[i], boundingBoxes.Min.Y[i], boundingBoxes.Min.Z[i]),
     //    Max = new Vector3(boundingBoxes.Max.X[i], boundingBoxes.Max.X[i], boundingBoxes.Max.X[i])
     //};
     //wide = new BoundingBoxWide(ref boundingBox);
 }
コード例 #6
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
        public unsafe static void Intersects(ref BoundingBoxWide a, ref BoundingBoxWide b, out Vector <int> intersectionMask)
        {
            //If any minimum exceeds the other maximum, there can be no collision.
            //On the flipside, if the all minimums are less than the opposing maximums, then they must be colliding.
            var c1X = Vector.LessThanOrEqual(a.Min.X, b.Max.X);
            var c1Y = Vector.LessThanOrEqual(a.Min.Y, b.Max.Y);
            var c1Z = Vector.LessThanOrEqual(a.Min.Z, b.Max.Z);
            var c2X = Vector.LessThanOrEqual(b.Min.X, a.Max.X);
            var c2Y = Vector.LessThanOrEqual(b.Min.Y, a.Max.Y);
            var c2Z = Vector.LessThanOrEqual(b.Min.Z, a.Max.Z);
            var or1 = Vector.BitwiseAnd(c1X, c1Y);
            var or2 = Vector.BitwiseAnd(c1Z, c2X);
            var or3 = Vector.BitwiseAnd(c2Y, c2Z);
            var or4 = Vector.BitwiseAnd(or1, or2);

            intersectionMask = Vector.BitwiseAnd(or3, or4);
        }
コード例 #7
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
        public static void ComputeVolume(ref BoundingBoxWide boxes, out Vector<float> volumes)
        {
            volumes = new Vector<float>();

            Vector3Wide span;
            Vector3Wide.Subtract(ref boxes.Max, ref boxes.Min, out span);
            volumes = span.X * span.Y * span.Z;
        }
コード例 #8
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
 public unsafe BoundingBoxWide(BoundingBox* boundingBoxes, Vector<int>[] masks)
 {
     Min = new Vector3Wide(ref boundingBoxes[0].Min);
     Max = new Vector3Wide(ref boundingBoxes[0].Max);
     for (int i = 1; i < Vector<float>.Count; ++i)
     {
         BoundingBoxWide wide = new BoundingBoxWide(ref boundingBoxes[i]);
         ConditionalSelect(ref masks[i], ref wide, ref this, out this);
     }
 }
コード例 #9
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
 public static void Merge(ref BoundingBoxWide a, ref BoundingBoxWide b, out BoundingBoxWide merged)
 {
     Vector3Wide.Min(ref a.Min, ref b.Min, out merged.Min);
     Vector3Wide.Max(ref a.Max, ref b.Max, out merged.Max);
 }
コード例 #10
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
 public static unsafe void Intersects2(ref BoundingBoxWide a, ref BoundingBoxWide b, out Vector<int> intersectionMask)
 {
     var minX = Vector.Max(a.Min.X, b.Min.X);
     var minY = Vector.Max(a.Min.Y, b.Min.Y);
     var minZ = Vector.Max(a.Min.Z, b.Min.Z);
     var maxX = Vector.Min(a.Max.X, b.Max.X);
     var maxY = Vector.Min(a.Max.Y, b.Max.Y);
     var maxZ = Vector.Min(a.Max.Z, b.Max.Z);
     var xLeq = Vector.LessThanOrEqual(minX, maxX);
     var yLeq = Vector.LessThanOrEqual(minY, maxY);
     var zLeq = Vector.LessThanOrEqual(minZ, maxZ);
     intersectionMask = Vector.BitwiseAnd(xLeq, Vector.BitwiseAnd(yLeq, zLeq));
 }
コード例 #11
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
 public static unsafe void Intersects(ref BoundingBoxWide a, ref BoundingBoxWide b, out Vector<int> intersectionMask)
 {
     //If any minimum exceeds the other maximum, there can be no collision.
     //On the flipside, if the all minimums are less than the opposing maximums, then they must be colliding.
     var c1X = Vector.LessThanOrEqual(a.Min.X, b.Max.X);
     var c1Y = Vector.LessThanOrEqual(a.Min.Y, b.Max.Y);
     var c1Z = Vector.LessThanOrEqual(a.Min.Z, b.Max.Z);
     var c2X = Vector.LessThanOrEqual(b.Min.X, a.Max.X);
     var c2Y = Vector.LessThanOrEqual(b.Min.Y, a.Max.Y);
     var c2Z = Vector.LessThanOrEqual(b.Min.Z, a.Max.Z);
     var or1 = Vector.BitwiseAnd(c1X, c1Y);
     var or2 = Vector.BitwiseAnd(c1Z, c2X);
     var or3 = Vector.BitwiseAnd(c2Y, c2Z);
     var or4 = Vector.BitwiseAnd(or1, or2);
     intersectionMask = Vector.BitwiseAnd(or3, or4);
 }
コード例 #12
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
 public static void GetBoundingBox(ref BoundingBoxWide boundingBoxes, int i, out BoundingBox box)
 {
     box = new BoundingBox
     {
         Min = new Vector3(boundingBoxes.Min.X[i], boundingBoxes.Min.Y[i], boundingBoxes.Min.Z[i]),
         Max = new Vector3(boundingBoxes.Max.X[i], boundingBoxes.Max.Y[i], boundingBoxes.Max.Z[i])
     };
 }
コード例 #13
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
 public static void GetBoundingBox(ref BoundingBoxWide boundingBoxes, int i, out BoundingBoxWide wide)
 {
     wide.Min.X = new Vector<float>(boundingBoxes.Min.X[i]);
     wide.Min.Y = new Vector<float>(boundingBoxes.Min.Y[i]);
     wide.Min.Z = new Vector<float>(boundingBoxes.Min.Z[i]);
     wide.Max.X = new Vector<float>(boundingBoxes.Max.X[i]);
     wide.Max.Y = new Vector<float>(boundingBoxes.Max.Y[i]);
     wide.Max.Z = new Vector<float>(boundingBoxes.Max.Z[i]);
     //var boundingBox = new BoundingBox
     //{
     //    Min = new Vector3(boundingBoxes.Min.X[i], boundingBoxes.Min.Y[i], boundingBoxes.Min.Z[i]),
     //    Max = new Vector3(boundingBoxes.Max.X[i], boundingBoxes.Max.X[i], boundingBoxes.Max.X[i])
     //};
     //wide = new BoundingBoxWide(ref boundingBox);
 }
コード例 #14
0
ファイル: BoundingBox.cs プロジェクト: RossNordby/scratchpad
 public static void ConditionalSelect(ref Vector<int> mask, ref BoundingBoxWide a, ref BoundingBoxWide b, out BoundingBoxWide result)
 {
     Vector3Wide.ConditionalSelect(ref mask, ref a.Min, ref b.Min, out result.Min);
     Vector3Wide.ConditionalSelect(ref mask, ref a.Max, ref b.Max, out result.Max);
 }
コード例 #15
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
 public static void Merge(ref BoundingBoxWide a, ref BoundingBoxWide b, out BoundingBoxWide merged)
 {
     Vector3Wide.Min(ref a.Min, ref b.Min, out merged.Min);
     Vector3Wide.Max(ref a.Max, ref b.Max, out merged.Max);
 }
コード例 #16
0
ファイル: BoundingBox.cs プロジェクト: jj-jabb/scratchpad
 public static void ConditionalSelect(ref Vector <int> mask, ref BoundingBoxWide a, ref BoundingBoxWide b, out BoundingBoxWide result)
 {
     Vector3Wide.ConditionalSelect(ref mask, ref a.Min, ref b.Min, out result.Min);
     Vector3Wide.ConditionalSelect(ref mask, ref a.Max, ref b.Max, out result.Max);
 }