public void Process(SceneBase world, int ci, int ri, int hres, int vres) { Vec2 s = world.ViewPlane.PixelSize / zoom; int numSamples = world.ViewPlane.NumSamples; Vec3 pixelColor = ColorUtils.BLACK; Ray ray = new Ray(eye, null); Vec2 pp = new Vec2(); Vec2 sp; for (int r = ri; r < vres; r++) //up - y height { for (int c = ci; c < hres; c++) //across - x width { pixelColor = ColorUtils.BLACK; for (int j = 0; j < numSamples; j++) { sp = world.ViewPlane.Sampler.SampleUnitSquare(); pp.X = s.X * (c - 0.5 * world.ViewPlane.Hres + sp.X); pp.Y = s.Y * (r - 0.5 * world.ViewPlane.Vres + sp.Y); ray.D = RayDirection(pp); pixelColor += world.Tracer.TraceRay(ray, 0); } pixelColor /= numSamples; pixelColor *= exposureTime; world.DisplayPixel(c, r, pixelColor); } } }
public override void RenderScene(SceneBase world) { ComputeUVW(); Vec3 pixelColor = new Vec3(); Ray ray = new Ray(); Vec2 pp = new Vec2(); Vec2 sp; int depth = 0; Vec2 s = world.ViewPlane.PixelSize / zoom; ray.O = eye; int hres = world.ViewPlane.Hres; int vres = world.ViewPlane.Vres; int numSamples = world.ViewPlane.NumSamples; for (int r = 0; r < vres; r++) { for (int c = 0; c < hres; c++) { pixelColor = ColorUtils.BLACK; for (int j = 0; j < numSamples; j++) { sp = world.ViewPlane.Sampler.SampleUnitSquare(); pp.X = s.X * (c - 0.5 * hres + sp.X); pp.Y = s.Y * (r - 0.5 * vres + sp.Y); ray.D = RayDirection(pp); pixelColor += world.Tracer.TraceRay(ray, depth); } pixelColor /= numSamples; pixelColor *= exposureTime; world.DisplayPixel(c, r, pixelColor); } } }