public unsafe void TestConvexColliderCalculateAabbLocal([Values(0, 0.01f, 1.25f)] float maxShrinkMovement) { var points = new NativeArray <float3>(6, Allocator.TempJob) { [0] = new float3(1.45f, 8.67f, 3.45f), [1] = new float3(8.75f, 1.23f, 6.44f), [2] = new float3(100.34f, 5.33f, -2.55f), [3] = new float3(8.76f, 4.56f, -4.54f), [4] = new float3(9.75f, -0.45f, -8.99f), [5] = new float3(7.66f, 3.44f, 0.0f) }; Aabb expectedAabb = Aabb.CreateFromPoints(new float3x4(points[0], points[1], points[2], points[3])); expectedAabb.Include(points[4]); expectedAabb.Include(points[5]); var collider = ConvexCollider.Create( points, new ConvexHullGenerationParameters { BevelRadius = maxShrinkMovement }, CollisionFilter.Default ); points.Dispose(); Aabb actualAabb = collider.Value.CalculateAabb(); float convexRadius = ((ConvexCollider *)collider.GetUnsafePtr())->ConvexHull.ConvexRadius; float maxError = 1e-3f + maxShrinkMovement - convexRadius; TestUtils.AreEqual(expectedAabb.Min, actualAabb.Min, maxError); TestUtils.AreEqual(expectedAabb.Max, actualAabb.Max, maxError); }
public void TestConvexColliderCalculateAabbLocal() { var points = new NativeArray <float3>(6, Allocator.Temp) { [0] = new float3(1.45f, 8.67f, 3.45f), [1] = new float3(8.75f, 1.23f, 6.44f), [2] = new float3(100.34f, 5.33f, -2.55f), [3] = new float3(8.76f, 4.56f, -4.54f), [4] = new float3(9.75f, -0.45f, -8.99f), [5] = new float3(7.66f, 3.44f, 0.0f) }; float convexRadius = 1.25f; Aabb expectedAabb = Aabb.CreateFromPoints(new float3x4(points[0], points[1], points[2], points[3])); expectedAabb.Include(points[4]); expectedAabb.Include(points[5]); // Currently the convex hull is not shrunk, so we have to expand by the convex radius expectedAabb.Expand(convexRadius); var collider = ConvexCollider.Create(points, convexRadius); points.Dispose(); Aabb actualAabb = collider.Value.CalculateAabb(); TestUtils.AreEqual(expectedAabb.Min, actualAabb.Min, 1e-3f); TestUtils.AreEqual(expectedAabb.Max, actualAabb.Max, 1e-3f); }
public void TestCalculateAabbTransformedQuad() { float3[] vertices = { new float3(-4.5f, 0.0f, 1.0f), new float3(3.4f, 0.7f, 1.0f), new float3(3.4f, 2.7f, 1.0f), new float3(-3.4f, 1.2f, 1.0f) }; float3 translation = new float3(-3.4f, -2.5f, -1.1f); quaternion rotation = quaternion.AxisAngle(math.normalize(new float3(11.1f, 10.1f, -3.4f)), 178.0f); var collider = PolygonCollider.CreateQuad(vertices[0], vertices[1], vertices[2], vertices[3]); Aabb aabb = collider.Value.CalculateAabb(new RigidTransform(rotation, translation)); for (int i = 0; i < 4; ++i) { vertices[i] = translation + math.mul(rotation, vertices[i]); } Aabb expected = Aabb.CreateFromPoints(new float3x4(vertices[0], vertices[1], vertices[2], vertices[3])); TestUtils.AreEqual(expected.Min, aabb.Min, 1e-3f); TestUtils.AreEqual(expected.Max, aabb.Max, 1e-3f); }
public void TestCalculateAabbLocalQuad() { float3[] quadVertices = { new float3(-4.5f, 0.0f, 1.0f), new float3(3.4f, 0.7f, 1.0f), new float3(3.4f, 2.7f, 1.0f), new float3(-3.4f, 1.2f, 1.0f) }; var collider = PolygonCollider.CreateQuad(quadVertices[0], quadVertices[1], quadVertices[2], quadVertices[3]); Aabb aabb = collider.Value.CalculateAabb(); Aabb expected = Aabb.CreateFromPoints(new float3x4(quadVertices[0], quadVertices[1], quadVertices[2], quadVertices[3])); TestUtils.AreEqual(expected.Min, aabb.Min, 1e-3f); TestUtils.AreEqual(expected.Max, aabb.Max, 1e-3f); }
public unsafe void TestConvexColliderCalculateAabbTransformed([Values(0, 0.01f, 1.25f)] float maxShrinkMovement) { var points = new NativeArray <float3>(6, Allocator.TempJob) { [0] = new float3(1.45f, 8.67f, 3.45f), [1] = new float3(8.75f, 1.23f, 6.44f), [2] = new float3(100.34f, 5.33f, -2.55f), [3] = new float3(8.76f, 4.56f, -4.54f), [4] = new float3(9.75f, -0.45f, -8.99f), [5] = new float3(7.66f, 3.44f, 0.0f) }; float3 translation = new float3(43.56f, -87.32f, -0.02f); quaternion rotation = quaternion.AxisAngle(math.normalize(new float3(8.45f, -2.34f, 0.82f)), 43.21f); float3[] transformedPoints = new float3[points.Length]; for (int i = 0; i < points.Length; ++i) { transformedPoints[i] = translation + math.mul(rotation, points[i]); } Aabb expectedAabb = Aabb.CreateFromPoints(new float3x4(transformedPoints[0], transformedPoints[1], transformedPoints[2], transformedPoints[3])); expectedAabb.Include(transformedPoints[4]); expectedAabb.Include(transformedPoints[5]); var collider = ConvexCollider.Create( points, new ConvexHullGenerationParameters { BevelRadius = maxShrinkMovement }, CollisionFilter.Default ); points.Dispose(); Aabb actualAabb = collider.Value.CalculateAabb(new RigidTransform(rotation, translation)); float convexRadius = ((ConvexCollider *)collider.GetUnsafePtr())->ConvexHull.ConvexRadius; float maxError = 1e-3f + maxShrinkMovement - convexRadius; TestUtils.AreEqual(expectedAabb.Min, actualAabb.Min, maxError); TestUtils.AreEqual(expectedAabb.Max, actualAabb.Max, maxError); }
public void TestConvexColliderCalculateAabbTransformed() { var points = new NativeArray <float3>(6, Allocator.Temp) { [0] = new float3(1.45f, 8.67f, 3.45f), [1] = new float3(8.75f, 1.23f, 6.44f), [2] = new float3(100.34f, 5.33f, -2.55f), [3] = new float3(8.76f, 4.56f, -4.54f), [4] = new float3(9.75f, -0.45f, -8.99f), [5] = new float3(7.66f, 3.44f, 0.0f) }; float convexRadius = 1.25f; float3 translation = new float3(43.56f, -87.32f, -0.02f); quaternion rotation = quaternion.AxisAngle(math.normalize(new float3(8.45f, -2.34f, 0.82f)), 43.21f); float3[] transformedPoints = new float3[points.Length]; for (int i = 0; i < points.Length; ++i) { transformedPoints[i] = translation + math.mul(rotation, points[i]); } Aabb expectedAabb = Aabb.CreateFromPoints(new float3x4(transformedPoints[0], transformedPoints[1], transformedPoints[2], transformedPoints[3])); expectedAabb.Include(transformedPoints[4]); expectedAabb.Include(transformedPoints[5]); // Currently the convex hull is not shrunk, so we have to expand by the convex radius expectedAabb.Expand(convexRadius); var collider = ConvexCollider.Create(points, convexRadius); points.Dispose(); Aabb actualAabb = collider.Value.CalculateAabb(new RigidTransform(rotation, translation)); TestUtils.AreEqual(expectedAabb.Min, actualAabb.Min, 1e-3f); TestUtils.AreEqual(expectedAabb.Max, actualAabb.Max, 1e-3f); }