@Override public Ray3 clone() { return new Ray3(this); }
@Override public Ray3 clone() { return new Ray3(this); }
/** * @return An instance of Ray that is intended for temporary use in calculations and so forth. Multiple calls to the * method should return instances of this class that are not currently in use. */ public final static Ray3 fetchTempInstance() { if (MathConstants.useMathPools) { return Ray3.RAY_POOL.fetch(); } else { return new Ray3(); } }
/** * @return An instance of Ray that is intended for temporary use in calculations and so forth. Multiple calls to the * method should return instances of this class that are not currently in use. */ public final static Ray3 fetchTempInstance() { if (MathConstants.useMathPools) { return Ray3.RAY_POOL.fetch(); } else { return new Ray3(); } }
@Test public void testClone() { final Ray3 ray1 = new Ray3(); final Ray3 ray2 = ray1.clone(); assertEquals(ray1, ray2); assertNotSame(ray1, ray2); }
@Test public void testData() { final Ray3 ray = new Ray3(); assertEquals(Vector3.UNIT_Z, ray.getDirection()); assertEquals(Vector3.ZERO, ray.getOrigin()); ray.setDirection(Vector3.NEG_UNIT_X); assertEquals(Vector3.NEG_UNIT_X, ray.getDirection()); ray.setOrigin(Vector3.ONE); assertEquals(Vector3.ONE, ray.getOrigin()); final Ray3 ray2 = new Ray3(ray); assertEquals(Vector3.NEG_UNIT_X, ray2.getDirection()); assertEquals(Vector3.ONE, ray2.getOrigin()); ray.set(new Ray3()); assertEquals(Vector3.UNIT_Z, ray.getDirection()); assertEquals(Vector3.ZERO, ray.getOrigin()); }
Ray3 pickRay = new Ray3(new Vector3(0, 3, 0), new Vector3(0, 0, 1)); assertFalse(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, 3, 0), new Vector3(0, 1, 0)); assertFalse(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, 2, 0), new Vector3(0, 1, 0)); assertFalse(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, 1, 0), new Vector3(0, 1, 0)); assertTrue(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, 0, 0), new Vector3(1, 0, 0)); assertFalse(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, -3, 0), new Vector3(0, 0, 1)); assertFalse(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, 3, 0), new Vector3(0, -1, 0)); assertTrue(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, -3, 0), new Vector3(1, 1, 1)); assertTrue(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, -3, 0), new Vector3(-1, -1, -1)); assertFalse(pickRay.intersectsPlane(plane, intersectionPoint)); pickRay = new Ray3(new Vector3(0, 0, 0), new Vector3(1, -1, 1)); assertFalse(pickRay.intersectsPlane(plane, intersectionPoint));
@Test public void testValid() { final Ray3 ray1 = new Ray3(new Vector3(0, 0, 0), new Vector3(0, 0, 1)); final Ray3 ray2 = new Ray3(new Vector3(Double.POSITIVE_INFINITY, 0, 0), new Vector3(0, 0, 1)); final Ray3 ray3 = new Ray3(new Vector3(0, 0, 0), new Vector3(Double.POSITIVE_INFINITY, 0, 1)); assertTrue(Ray3.isValid(ray1)); assertFalse(Ray3.isValid(ray2)); assertFalse(Ray3.isValid(ray3)); assertFalse(Ray3.isValid(null)); // couple if equals validity tests assertEquals(ray1, ray1); assertFalse(ray1.equals(null)); assertFalse(ray1.equals(new Vector3())); // throw in a couple pool accesses for coverage final Ray3 ray4 = Ray3.fetchTempInstance(); ray4.set(ray1); assertEquals(ray1, ray4); assertNotSame(ray1, ray4); Ray3.releaseTempInstance(ray4); // cover more of equals assertFalse(ray1.equals(new Ray3(Vector3.ZERO, Vector3.NEG_UNIT_X))); }
Ray3 pickRay = new Ray3(new Vector3(0.5, -0.5, 3), new Vector3(0, 0, -1)); assertTrue(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(0, -1, 3), new Vector3(0, 0, -1)); assertTrue(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(0, 0, 3), new Vector3(0, 0, -1)); assertTrue(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(+1, 0, 3), new Vector3(0, 0, -1)); assertTrue(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(-1, -1, 3), new Vector3(0, 0, -1)); assertTrue(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(+1, -1, 3), new Vector3(0, 0, -1)); assertTrue(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(1, 1, 3), new Vector3(0, 0, -1)); assertTrue(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(0, -1.1, 3), new Vector3(0, 0, -1)); assertFalse(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(-0.1, 0.1, 3), new Vector3(0, 0, -1)); assertFalse(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint)); pickRay = new Ray3(new Vector3(+1.1, 0, 3), new Vector3(0, 0, -1)); assertFalse(pickRay.intersectsTriangle(v0, v1, v2, intersectionPoint));
result = new Ray3();
result = new Ray3();
@Test public void testRayOBBIntersection() throws Exception { final OrientedBoundingBox obb = new OrientedBoundingBox(); obb.setCenter(Vector3.ZERO); obb.setExtent(Vector3.ONE); Ray3 ray = new Ray3(new Vector3(1.2, -10, 0), Vector3.UNIT_Y); assertFalse(obb.intersects(ray)); IntersectionRecord record = obb.intersectsWhere(ray); assertEquals(null, record); final Quaternion rotation = new Quaternion(); rotation.fromAngleAxis(MathUtils.QUARTER_PI, Vector3.UNIT_Z); final Transform transform = new Transform(); transform.setRotation(rotation); obb.transform(transform, obb); ray = new Ray3(new Vector3(1.2, -10, 0), Vector3.UNIT_Y); assertTrue(obb.intersects(ray)); record = obb.intersectsWhere(ray); assertEquals(2, record.getNumberOfIntersections()); }
final ReadOnlyRay3 pickRayA = new Ray3(new Vector3(2, 2, 10), new Vector3(0, 0, -1)); final ReadOnlyRay3 pickRayB = new Ray3(new Vector3(2, 4, 10), new Vector3(0, 0, -1)); assertTrue(pickRayA.intersectsQuad(v0, v1, v2, v3, intersectionPoint)); assertTrue(pickRayB.intersectsQuad(v0, v1, v2, v3, intersectionPoint)); final Ray3 pickRay2 = new Ray3(new Vector3(-1, 0, 10), new Vector3(0, 0, -1)); assertFalse(pickRay2.intersectsQuad(v0, v1, v2, v3, intersectionPoint)); assertFalse(new Ray3(new Vector3(0, 0, -1), Vector3.UNIT_Y).intersectsQuadPlanar(v0, v1, v2, v3, intersectionPoint)); intersectionPoint = new Vector3();
@Test public void testDistance() { final Ray3 ray1 = new Ray3(); assertTrue(25.0 == ray1.distanceSquared(new Vector3(0, 5, 3), null)); final Vector3 store = new Vector3(); assertTrue(9.0 == ray1.distanceSquared(new Vector3(0, 3, 3), store)); assertEquals(new Vector3(0, 0, 3), store); assertTrue(18.0 == ray1.distanceSquared(new Vector3(0, 3, -3), store)); assertEquals(new Vector3(0, 0, 0), store); }
@Test public void testRayAABBIntersection() throws Exception { final BoundingBox obb = new BoundingBox(); obb.setCenter(Vector3.ZERO); obb.setXExtent(1); obb.setYExtent(1); obb.setZExtent(1); Ray3 ray = new Ray3(new Vector3(2, -10, 0), Vector3.UNIT_Y); assertFalse(obb.intersects(ray)); IntersectionRecord record = obb.intersectsWhere(ray); assertEquals(null, record); final Quaternion rotation = new Quaternion(); rotation.fromAngleAxis(MathUtils.QUARTER_PI, Vector3.UNIT_Z); final Transform transform = new Transform(); transform.setRotation(rotation); obb.transform(transform, obb); ray = new Ray3(new Vector3(1, -10, 0), Vector3.UNIT_Y); assertTrue(obb.intersects(ray)); record = obb.intersectsWhere(ray); assertEquals(2, record.getNumberOfIntersections()); }
@Test public void testRaySphereIntersection() throws Exception { final BoundingSphere bs = new BoundingSphere(); bs.setCenter(Vector3.ZERO); bs.setRadius(1); final Ray3 ray = new Ray3(new Vector3(2, -3, 0), Vector3.UNIT_Y); assertFalse(bs.intersects(ray)); IntersectionRecord record = bs.intersectsWhere(ray); assertEquals(null, record); final Transform transform = new Transform(); transform.setTranslation(2, 0, .5); bs.transform(transform, bs); assertTrue(bs.intersects(ray)); record = bs.intersectsWhere(ray); assertEquals(2, record.getNumberOfIntersections()); } }