/** * Checks if the frustum of this camera intersects the given Cuboid. * * @param c The cuboid to check the frustum against. * @return True if the frustum intersects the cuboid. */ public bool intersects(Cuboid c) { Vector3[] vertices = c.getVertices(); for (int i = 0; i < 6; i++) { if (frustum[i, 0] * (vertices[0].X - position.X) + frustum[i, 1] * (vertices[0].Y - position.Y) + frustum[i, 2] * (vertices[0].Z - position.Z) + frustum[i, 3] > 0) { continue; } if (frustum[i, 0] * (vertices[1].X - position.X) + frustum[i, 1] * (vertices[1].Y - position.Y) + frustum[i, 2] * (vertices[1].Z - position.Z) + frustum[i, 3] > 0) { continue; } if (frustum[i, 0] * (vertices[2].X - position.X) + frustum[i, 1] * (vertices[2].Y - position.Y) + frustum[i, 2] * (vertices[2].Z - position.Z) + frustum[i, 3] > 0) { continue; } if (frustum[i, 0] * (vertices[3].X - position.X) + frustum[i, 1] * (vertices[3].Y - position.Y) + frustum[i, 2] * (vertices[3].Z - position.Z) + frustum[i, 3] > 0) { continue; } if (frustum[i, 0] * (vertices[4].X - position.X) + frustum[i, 1] * (vertices[4].Y - position.Y) + frustum[i, 2] * (vertices[4].Z - position.Z) + frustum[i, 3] > 0) { continue; } if (frustum[i, 0] * (vertices[5].X - position.X) + frustum[i, 1] * (vertices[5].Y - position.Y) + frustum[i, 2] * (vertices[5].Z - position.Z) + frustum[i, 3] > 0) { continue; } if (frustum[i, 0] * (vertices[6].X - position.X) + frustum[i, 1] * (vertices[6].Y - position.Y) + frustum[i, 2] * (vertices[6].Z - position.Z) + frustum[i, 3] > 0) { continue; } if (frustum[i, 0] * (vertices[7].X - position.X) + frustum[i, 1] * (vertices[7].Y - position.Y) + frustum[i, 2] * (vertices[7].Z - position.Z) + frustum[i, 3] > 0) { continue; } return false; } return true; }