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 ); }
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); }
public abstract Ray scatterRay(PCG pcg, Vec incomingDir, Point interactionPoint, Normal normal, int depth);
public override Color Eval(Normal normal, Vec inDir, Vec outDir, Vec2D uv) { return this.pigment.getColor(uv) * (this.reflectance / Constant.PI); }
public abstract Color Eval(Normal normal, Vec inDir, Vec outDir, Vec2D uv);