private IEnumerable <InfoStruct> GetSampleRays(int _) { for (var x = 0; x < CoreValues.Width; x++) { for (var y = 0; y < CoreValues.Height; y++) { var newinfo = new InfoStruct { X = x, Y = y, Depth = CoreValues.MaxDepth }; yield return(newinfo); } } }
//private void DoWriteImage(InfoStruct info) { // Count--; // Image[(info.Y * CoreValues.Width) + info.X] = info.Color; // Console.WriteLine(Count); //} private void DoMergeColors(InfoStruct info) { var samplecount = CoreValues.SamplesPerPixel; var c = new Vec3(0, 0, 0); var co = new object(); Parallel.For(0, samplecount, i => { //for (var i = 0; i < samplecount; i++) { var mycam = MyCamera.GetRay((info.X + Rand.Uniform(0, 0.99F)) / (CoreValues.Width - 1), (info.Y + Rand.Uniform(0, 0.99F)) / (CoreValues.Height - 1)); var newcolor = GetColor(mycam, World, CoreValues.MaxDepth) / samplecount; lock (co) { c += newcolor; } }); //info.Color = c; Image[(info.Y * CoreValues.Width) + info.X] = c; Console.WriteLine(Count--); //return info; }