Пример #1
0
 @Override
 public Vec normalAt(Point3D intersection, Ray ray) {
   for (Triangle tri : mesh) {
     if (tri.intersectTri(intersection, ray)) {
       Vec v1 = new Vec(tri.getP1(), tri.getP0());
       Vec v2 = new Vec(tri.getP2(), tri.getP0());
       return Vec.crossProd(v1, v2);
     }
   }
   return null;
 }
Пример #2
0
  @Override
  public Hit nearestIntersection(Ray ray) {
    double minDistance = Double.POSITIVE_INFINITY;
    Object3D nearestTri = null;
    Point3D nearestIntersection = null;

    for (Triangle tri : mesh) {

      Point3D intersectionPoint = tri.planeIntersection(ray);

      if (intersectionPoint != null) {
        double length = new Vec(intersectionPoint, ray.origin).length();
        length = length / ray.direction.length();

        if (length < minDistance && tri.intersectTri(intersectionPoint, ray)) {
          minDistance = length;
          nearestTri = tri;
          nearestIntersection = intersectionPoint;
        }
      }
    }
    return new Hit(nearestIntersection, nearestTri, minDistance);
  }