Esempio n. 1
0
 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);
         }
     }
 }
Esempio n. 2
0
        //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;
        }