Package jpbrt.core

Examples of jpbrt.core.Vector


        // compute sphere dpdu and dpdv
        double zradius = Math.sqrt(phit.x * phit.x + phit.y * phit.y);
        double invzradius = 1.0 / zradius;
        double cosphi = phit.x / invzradius;
        double sinphi = phit.y / invzradius;
        Vector dpdu = new Vector(-phiMax * phit.y, phiMax * phit.x, 0.0);
        Vector dpdv = new Vector(phit.z * cosphi, phit.z * sinphi, -radius * Math.sin(theta)).mulLocal(thetaMax - thetaMin);
       
        // compute sphere dndu and dndv
        Vector d2Pduu = new Vector(phit.x, phit.y, 0).mulLocal(-phiMax * phiMax);
        Vector d2Pduv = new Vector(-sinphi, cosphi, 0).mulLocal( (thetaMax - thetaMin) * phit.z * phiMax );
        Vector d2Pdvv = new Vector(phit.x, phit.y, phit.z).mulLocal( -(thetaMax - thetaMin) * (thetaMax - thetaMin) );
       
        // compute coefficients for fundamental forms
        double E = dpdu.dot(dpdu);
        double F = dpdu.dot(dpdv);
        double G = dpdv.dot(dpdv);
        Vector N = dpdu.cross(dpdv).normalizeLocal();
        double e = N.dot(d2Pduu);
        double f = N.dot(d2Pduv);
        double g = N.dot(d2Pdvv);
       
        // compute dndu and dndv from fundamental form coefficients
        double invEGF2 = 1.0 / (E*G - F*F);
        Normal dndu = new Normal(dpdu.mul( (f*F - e*G) * invEGF2 ).addLocal( dpdv.mul((e*F - f*E) * invEGF2) ));
        Normal dndv = new Normal(dpdu.mul( (g*F - f*G) * invEGF2 ).addLocal( dpdv.mul((f*F - g*E) * invEGF2) ));
View Full Code Here


       
        // compute s1 = d x e2
        Point p1 = mesh.p[v1];
        Point p2 = mesh.p[v2];
        Point p3 = mesh.p[v3];
        Vector e1 = p1.to(p2);
        Vector e2 = p1.to(p3);
        Vector s1 = ray.d.cross(e2);
        double divisor = s1.dot(e1);
        if (divisor == 0)
            return result;
        double invDivisor = 1.0 / divisor;
       
        // compute first barycentric coordinate b1
        Vector d = p1.to(ray.o);
        double b1 = d.dot(s1) * invDivisor;
        if (b1 < 0 || b1 > 1)
            return result;
       
        // compute second barycentric coordinate b2
        Vector s2 = d.cross(e1);
        double b2 = ray.d.dot(s2) * invDivisor;
        if (b2 < 0 || b2 > 1)
            return result;
       
        // compute t to intersection point
        double t = e2.dot(s2) * invDivisor;
        if (t < ray.mint || t > ray.maxt)
            return result;
       
        // compute triangle partial derivatives
        Vector dpdu, dpdv;
        double[][] uvs = getUVs();
       
        // compute deltas for triangle partial derivatives
        double du1 = uvs[0][0] - uvs[2][0];
        double du2 = uvs[1][0] - uvs[2][0];
        double dv1 = uvs[0][1] - uvs[2][1];
        double dv2 = uvs[1][1] - uvs[2][1];
        Vector dp1 = p3.to(p1);
        Vector dp2 = p3.to(p2);
       
        double determinant = du1 * dv2 - dv1 * du2;
        if (determinant == 0)
        {
            dpdu = new Vector();
            dpdv = new Vector();
            Global.coordinateSystem(e2.cross(e1).normalizeLocal(), dpdu, dpdv);
        }
        else
        {
            double invdet = 1.0 / determinant;
            dpdu = dp1.mul(dv2).sub(dp2.mul(dv1)).mulLocal(invdet);
            dpdv = dp2.mul(du1).sub(dp1.mul(du2)).mulLocal(invdet);
        }
       
        // interpolate (u, v) triangle parametric coordinates
        double b0 = 1 - b1 - b2;
        double tu = b0 * uvs[0][0] + b1 * uvs[1][0] + b2 * uvs[2][0];
 
View Full Code Here

    public double area()
    {
        Point p1 = mesh.p[v1];
        Point p2 = mesh.p[v2];
        Point p3 = mesh.p[v3];
        Vector v1 = p1.to(p2);
        Vector v2 = p1.to(p3);
        return 0.5 * v1.cross(v2).length();
    }
View Full Code Here

TOP

Related Classes of jpbrt.core.Vector

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.