public boolean isIntersecting(Vector3f origin, Vector3f direction) {
        Vector3f delta = verticies.get(0).coord.minus(origin);

        // Find the time when they intersect
        float t = normal.dotProduct(direction);
        if (t <= 0) // don't divide by zero or intersect with the back of objects
            return false;
        t = normal.dotProduct(delta) / t;

        if (t < 0) // We intersected the polygon in the past
            return false;

        Vector3f intersection = origin.plus(direction.times(t));

        // Walk around the polygon checking the intersection is on the inside of all the edges
        Vector3f last = verticies.get(verticies.size() - 1).coord;
        for (Vertex v: verticies) {
            // If the intersection is outside our polygon, the cross will point the opposite of the normal
            if (! intersection.minus(v.coord).cross(last.minus(v.coord)).sameDirection(normal))
                return false;

            last = v.coord;
        }

        return true;
    }