Package ca.eandb.jmist.math

Examples of ca.eandb.jmist.math.Vector3


      }
    }

    this.origin = vertices[components[0][0]];

    Vector3 u = this.origin.vectorTo(vertices[components[0][1]]);
    Vector3 v = this.origin.vectorTo(vertices[components[0][components[0].length - 1]]);

    this.basis = Basis3.fromUV(u, v);
    this.plane = Plane3.throughPoint(this.origin, this.basis.w());

    this.vertices.clear();
    for (int i = 0; i < vertices.length; i++) {
      Vector3 r = this.origin.vectorTo(vertices[i]);
      this.vertices.add(new Point2(r.dot(basis.u()), r.dot(basis.v())));
    }

    for (int i = 0; i < components.length; i++) {
      this.insert(new Component(components[i]), null);
    }
View Full Code Here


    if (!recorder.interval().contains(t))
      return;

    Point3      p = ray.pointAt(t);
    Vector3      r = p.vectorFrom(this.origin);
    Point2      uv = new Point2(r.dot(basis.u()), r.dot(basis.v()));

    if (!this.inside(uv))
      return;

    Point2      inversion = new Point2(
              (uv.x() - this.bound.minimumX()) / this.bound.lengthX(),
              (uv.y() - this.bound.minimumY()) / this.bound.lengthY()
            );

    Vector3      N = this.plane.normal();

    double      ndotv    = N.dot(ray.direction());
    int        surfaceId  = (ndotv < 0.0) ? POLYGON_SURFACE_TOP : POLYGON_SURFACE_BOTTOM;

    Intersection  x = super.newIntersection(ray, t, ndotv < 0.0, surfaceId)
                .setLocation(p)
                .setUV(inversion)
                .setBasis((surfaceId == POLYGON_SURFACE_TOP) ? this.basis : this.basis.opposite())
                .setNormal((surfaceId == POLYGON_SURFACE_TOP) ? N : N.opposite());

    recorder.record(x);

  }
View Full Code Here

   * @see ca.eandb.jmist.framework.material.AbstractMaterial#bsdf(ca.eandb.jmist.framework.SurfacePoint, ca.eandb.jmist.math.Vector3, ca.eandb.jmist.math.Vector3, ca.eandb.jmist.framework.color.WavelengthPacket)
   */
  @Override
  public Color bsdf(SurfacePoint x, Vector3 in, Vector3 out, WavelengthPacket lambda) {

    Vector3 n = x.getNormal();
    boolean fromFront = (n.dot(in) < 0.0);
    boolean toFront = (n.dot(out) > 0.0);

    Vector3 n1 = x.getShadingNormal();
    boolean fromFront1 = (n1.dot(in) < 0.0);

    if (this.reflectance != null && (toFront == fromFront) && (toFront == fromFront1)) {
      return reflectance.getColor(x, lambda).divide(Math.PI);
    } else {
      return lambda.getColorModel().getBlack(lambda);
View Full Code Here

    double t = this.plane.intersect(ray);

    if (recorder.interval().contains(t)) {

      Point3 p = ray.pointAt(t);
      Vector3 dp = p.vectorFrom(this.center);

      double u = 0.5 + 0.5 * dp.dot(basis.u()) / ru;
      double v = 0.5 + 0.5 * dp.dot(basis.v()) / rv;

      if (MathUtil.inRangeCC(u, 0.0, 1.0) && MathUtil.inRangeCC(v, 0.0, 1.0)) {

        // If the rectangle is two sided, adjust the 2D inversion to include
        // the information about which side was intersected (i.e., each side
View Full Code Here

    Medium    medium    = x.getAmbientMedium();
    Color    n1      = medium.refractiveIndex(p, lambda);
    Color    k1      = medium.extinctionIndex(p, lambda);
    Color    n2      = n.sample(lambda);
    Color    k2      = k.sample(lambda);
    Vector3    normal    = x.getShadingNormal();
    boolean    fromSide  = x.getNormal().dot(v) < 0.0;
    Color    R      = MaterialUtil.reflectance(v, n1, k1, n2, k2, normal);
    Color    T      = cm.getWhite(lambda).minus(R);
    double    r      = ColorUtil.getMeanChannelValue(R);

    if (RandomUtil.bernoulli(r, rj)) {
      Vector3    out    = Optics.reflect(v, normal);
      boolean    toSide  = x.getNormal().dot(out) >= 0.0;

      if (fromSide == toSide) {
        return ScatteredRay.specular(new Ray3(p, out), R.divide(r), r);
      }
    } else {

      if (alpha != null) {
//        if (disperse) {
//          for (int i = 0, channels = cm.getNumChannels(); i < channels; i++) {
//            Complex    eta1  = new Complex(n1.getValue(i), k1.getValue(i));
//            Complex    eta2  = new Complex(n2.getValue(i), k2.getValue(i));
//            Vector3    out    = Optics.refract(v, eta1, eta2, normal);
//            boolean    toSide  = x.getNormal().dot(out) >= 0.0;
//
//            if (fromSide != toSide) {
//              recorder.add(ScatteredRay.transmitSpecular(new Ray3(p, out), T.disperse(i), 1.0));
//            }
//          }
//        } else { // !disperse
          double    n1avg  = ColorUtil.getMeanChannelValue(n1);
          double    k1avg  = ColorUtil.getMeanChannelValue(k1);
          double    n2avg  = ColorUtil.getMeanChannelValue(n2);
          double    k2avg  = ColorUtil.getMeanChannelValue(k2);
          Complex    eta1  = new Complex(n1avg, k1avg);
          Complex    eta2  = new Complex(n2avg, k2avg);
          Vector3    out    = Optics.refract(v, eta1, eta2, normal);
          boolean    toSide  = x.getNormal().dot(out) >= 0.0;

          if (fromSide != toSide) {
            return ScatteredRay.transmitSpecular(new Ray3(p, out), T.divide(1 - r), 1 - r);
          }
View Full Code Here

    LinearMatrix3 band2xyz = new LinearMatrix3(
        a[0][0], a[0][1], a[0][2],
        a[1][0], a[1][1], a[1][2],
        a[2][0], a[2][1], a[2][2]);

    double factor = 1.0 / band2xyz.times(new Vector3(1, 1, 1)).y();

    return band2xyz.times(LinearMatrix3.scaleMatrix(factor)).inverse();
  }
View Full Code Here

  public Color sample(SingleXYZWavelengthPacket lambda) {
    if (lambda == null) {
      return this;
    }

    Vector3 xyz = new Vector3(x, y, z);
    Vector3 band = xyz2band.times(xyz);

    double wavelength = lambda.getWavelength();
    double value;
    if (wavelength < 400e-9) {
      value = 0.0;
    } else if (wavelength < 500e-9) {
      value = Math.max(0.0, band.x());
    } else if (wavelength < 600e-9) {
      value = Math.max(0.0, band.y());
    } else if (wavelength < 700e-9) {
      value = Math.max(0.0, band.z());
    } else { // wavelength >= 700e-9
      value = 0.0;
    }

    return new XYZSample(value, lambda);
View Full Code Here

    Color kd = diffuse.getColor(sc, lambda);
    Color ks = specular.getColor(sc, lambda);
    Color ka = ambient.getColor(sc, lambda);
    Color n = exponent.getColor(sc, lambda);

    Vector3 N = sc.getShadingNormal();
    Vector3 V = sc.getIncident().opposite();

    Color d = cm.getBlack(lambda);
    Color s = d;
    Color a = sc.getAmbientLight();

    for (LightSample sample : sc.getLightSamples()) {
      Vector3 L = sample.getDirToLight();
      Vector3 H = L.plus(V).unit();
      Color I = sample.getRadiantIntensity();

      d = d.plus(I.times(N.dot(L)));
      s = s.plus(I.times(cm.getGray(N.dot(H), lambda).pow(n)));
    }
View Full Code Here

  /* (non-Javadoc)
   * @see ca.eandb.jmist.framework.Shader#shade(ca.eandb.jmist.framework.ShadingContext)
   */
  public Color shade(ShadingContext sc) {
    WavelengthPacket lambda = sc.getWavelengthPacket();
    Vector3 n = sc.getNormal();
    Vector3 v = sc.getIncident().opposite();
    return Math.abs(n.dot(v)) < threshold ? edgeColor.sample(lambda) : interiorColor.sample(lambda);
  }
View Full Code Here

  /* (non-Javadoc)
   * @see ca.eandb.jmist.framework.Shader#shade(ca.eandb.jmist.framework.ShadingContext)
   */
  @Override
  public Color shade(ShadingContext sc) {
    Vector3 n = sc.getShadingNormal();

    double r = Math.abs(n.x());
    double g = Math.abs(n.y());
    double b = Math.abs(n.z());

    double c = Math.max(r, Math.max(g, b));

    return sc.getColorModel().fromRGB(r / c, g / c, b / c).sample(sc.getWavelengthPacket());
  }
View Full Code Here

TOP

Related Classes of ca.eandb.jmist.math.Vector3

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.