示例#1
0
    private static void Main(string[] args)
    {
        var       image = new Image(500, 500);
        Stopwatch sw    = new Stopwatch();

        Console.WriteLine("C# RayTracer Test");

        long t = 0;
        long n = 1;

        for (var i = 0; i < n; i++)
        {
            sw.Reset();
            sw.Start();
            var rayTracer = new RayTracerEngine();
            var scene     = new Scene();
            rayTracer.Render(scene, image);
            sw.Stop();
            t += sw.ElapsedMilliseconds;
        }

        image.Save("csharp-ray-tracer.png");

        Console.WriteLine("");
        Console.WriteLine("Total time: " + (t / n).ToString() + " ms");
        Console.ReadLine();
    }
        private void RenderMenu_Click(object sender, EventArgs e)
        {
            // disable the render menu while rendering
            RenderMenu.Enabled = false;
            // find the render size (stored as an object in the selected menu's Tag property)
            int size = int.Parse((sender as ToolStripMenuItem).Tag.ToString());

            // create a new Bitmap object where we will render to
            _bitmap = new Bitmap(size, size);
            // update the size and location of the picturebox that will show the final result
            RenderedImage.Size            = new Size(size, size);
            RenderedImage.BackgroundImage = null;
            CenterRenderedImage();
            // print out a message on the picture box
            using (Graphics g = RenderedImage.CreateGraphics()) {
                g.FillRectangle(SystemBrushes.Control, 0, 0, RenderedImage.Width, RenderedImage.Height);
                g.DrawString("Rendering.\r\nPlease wait...", this.Font, SystemBrushes.WindowText, 0f, 0f);
            }
            // create the ray tracer
            RayTracerEngine rayTracer = new RayTracerEngine(_bitmap.Width, _bitmap.Height);

            // start rendering the scene
            RenderedImage.BackgroundImage = rayTracer.Render(_scenes.GetByName(_selectedScene));
            // re-enable the render menu
            RenderMenu.Enabled = true;
        }