} else if (dirDotNorm < FastMath.FLT_EPSILON) {
} else if (dirDotNorm < -FastMath.FLT_EPSILON) {
    private boolean intersects( Vector3f v0, Vector3f v1, Vector3f v2,                                Vector3f store, boolean doPlanar, boolean quad ) {        Vector3f diff = origin.subtract(v0, tempVa);        Vector3f edge1 = v1.subtract(v0, tempVb);        Vector3f edge2 = v2.subtract(v0, tempVc);        Vector3f norm = edge1.cross(edge2, tempVd);        float dirDotNorm = direction.dot(norm);        float sign;        if (dirDotNorm > FastMath.FLT_EPSILON) {            sign = 1;        } else if (dirDotNorm < FastMath.FLT_EPSILON) {            sign = -1f;            dirDotNorm = -dirDotNorm;        } else {            // ray and triangle are parallel            return false;        }        float dirDotDiffxEdge2 = sign * direction.dot(diff.cross(edge2, edge2));        if (dirDotDiffxEdge2 > 0.0f) {            float dirDotEdge1xDiff = sign                    * direction.dot(edge1.crossLocal(diff));            if (dirDotEdge1xDiff >= 0.0f) {                if ( !quad ? dirDotDiffxEdge2 + dirDotEdge1xDiff <= dirDotNorm : dirDotEdge1xDiff <= dirDotNorm ) {                    float diffDotNorm = -sign * diff.dot(norm);                    if (diffDotNorm >= 0.0f) {                        // ray intersects triangle                        // if storage vector is null, just return true,                        if (store == null)                            return true;                        // else fill in.                        float inv = 1f / dirDotNorm;                        float t = diffDotNorm * inv;                        if (!doPlanar) {                            store.set(origin).addLocal(direction.x * t,                                    direction.y * t, direction.z * t);                        } else {                            // these weights can be used to determine                            // interpolated values, such as texture coord.                            // eg. texcoord s,t at intersection point:                            // s = w0*s0 + w1*s1 + w2*s2;                            // t = w0*t0 + w1*t1 + w2*t2;                            float w1 = dirDotDiffxEdge2 * inv;                            float w2 = dirDotEdge1xDiff * inv;                            //float w0 = 1.0f - w1 - w2;                            store.set(t, w1, w2);                        }                        return true;                    }                }            }        }        return false;    }