Exemplo n.º 1
0
        public override Ray scatterRay(PCG r, Vec incomingDir, Point interactionPoint, Normal normal, int depth)
        {
            Vec rayDir = new Vec(incomingDir.x, incomingDir.y, incomingDir.z).Normalize();
            Vec normalVec = normal.ToVec().Normalize();
            float dotProd = normalVec * rayDir;

            return new Ray(
                            origin: interactionPoint,
                            dir: rayDir - normalVec * 2f * dotProd,
                            tm: 1e-5f,
                            tM: Single.PositiveInfinity,
                            dep: depth
                        );
        }
Exemplo n.º 2
0
        public override Ray scatterRay(PCG r, Vec incomingDir, Point interactionPoint, Normal normal, int depth)
        {
            List<Vec> a = normal.createONBfromZ();
            Vec e1 = a[0];
            Vec e2 = a[1];
            Vec e3 = a[2];

            float cosThetaSq = r.randomFloat();
            float cosTheta = MathF.Sqrt(cosThetaSq);
            float sinTheta = MathF.Sqrt(1.0f - cosThetaSq);
            float phi = 2 * MathF.PI * r.randomFloat();

            Vec dir = e1 * sinTheta * MathF.Cos(phi) + e2 * sinTheta * MathF.Sin(phi) + e3 * cosTheta;

            return new Ray(interactionPoint, dir, tm: 1e-5f, dep: depth);

        }
Exemplo n.º 3
0
 public abstract Ray scatterRay(PCG pcg, Vec incomingDir, Point interactionPoint, Normal normal, int depth);
Exemplo n.º 4
0
 public override Color Eval(Normal normal, Vec inDir, Vec outDir, Vec2D uv)
 {
     return this.pigment.getColor(uv) * (this.reflectance / Constant.PI);
 }
Exemplo n.º 5
0
 public abstract Color Eval(Normal normal, Vec inDir, Vec outDir, Vec2D uv);