Exemple #1
0
        public DevRender(Enviroment enviroment, int winWidth, int winHeight, params Camera[] cameras)
        {
            Width  = winHeight;
            Height = winHeight;
            Avalonia.Vector dpi         = new Avalonia.Vector(96, 96);
            PixelSize       wbitmapSize = new PixelSize(Width, Height);
            WriteableBitmap wbitmap     = new WriteableBitmap(wbitmapSize, dpi, PixelFormat.Bgra8888);

            Enviroment = enviroment;
            Cameras    = cameras.ToList();
            foreach (var cam in Cameras)
            {
                cam.ScreenWidth  = winWidth;
                cam.ScreenHeight = winHeight;
            }
            Preparer = new BufferPreparer(Cameras, enviroment);
            // RenderForm = new Form1()
            //  {
            //      BackColor = Color.Black,
            //     Width = winWidth,
            //     Height = winHeight
            //  };
            Controller = new Controller(this);


            //RenderForm.KeyDown += (args, e) => Controller.KeyDown(e);
            //  RenderForm.KeyUp += (args, e) => Controller.KeyUp(e);
            //  RenderForm.MouseMove += (args, e) => Controller.HanleMouse(e);
            Timer          = new DispatcherTimer();
            Timer.Interval = new System.TimeSpan(0, 0, 0, 0, 100);
            Timer.Tick    += (args, e) =>
            {
                Controller.ComputeKeys();
                Preparer.PrepareNewBuffer();
                var buffer = Preparer.GetBuffer();
                if (buffer.Width != 1)
                {
                    for (int row = 0; row < Height; row++)
                    {
                        for (int col = 0; col < Width; col++)
                        {
                            System.Drawing.Color colr  = buffer.GetPixel(col, row);
                            Avalonia.Media.Color color = Avalonia.Media.Color.FromArgb(colr.A, colr.R, colr.G, colr.B);
                            wbitmap.SetPixel(col, row, color);
                        }
                    }
                    //RenderForm.BackgroundImage = new Bitmap(buffer , RenderForm.Size);
                }
            };
        }
Exemple #2
0
        public void ComputeKeys()
        {
            foreach (var key in DownKeys)
            {
                switch (key)
                {
                case Key.Q:
                    CurrentCamera.Rotate(-0.05f, Axis.Y);
                    break;

                case Key.S:
                    var v = -CurrentCamera.Pivot.ZAxis * Speed;
                    CurrentCamera.Move(v);
                    break;

                case Key.E:
                    CurrentCamera.Rotate(0.05f, Axis.Y);
                    break;

                case Key.W:
                    v = CurrentCamera.Pivot.ZAxis * Speed;
                    CurrentCamera.Move(v);
                    break;

                case Key.D:
                    v = CurrentCamera.Pivot.XAxis * Speed;
                    CurrentCamera.Move(v);
                    break;

                case Key.A:
                    v = -CurrentCamera.Pivot.XAxis * Speed;
                    CurrentCamera.Move(v);
                    break;

                case Key.R:
                    CurrentCamera.Rotate(-0.05f, Axis.X);
                    break;

                case Key.F:
                    CurrentCamera.Rotate(0.05f, Axis.X);
                    break;

                case Key.Y:
                    DevilRender.Preparer.MoveNextRasterizer();
                    break;

                case Key.M:
                    DevilRender.Timer.Stop();
                    var camera = new Camera(CurrentCamera.Pivot.Center, 1, (float)Math.PI / 2, 1920 * 7, 1080 * 7);
                    camera.Pivot.XAxis = CurrentCamera.Pivot.XAxis;
                    camera.Pivot.YAxis = CurrentCamera.Pivot.YAxis;
                    camera.Pivot.ZAxis = CurrentCamera.Pivot.ZAxis;
                    var preparer = new BufferPreparer(new List <Camera>()
                    {
                        camera
                    }, DevilRender.Enviroment);
                    preparer.PrepareNewBuffer();
                    var buffer = preparer.Buffers.Dequeue();
                    buffer.Save(@"D:\VSCode\AvaloniaViewer\DevRender\Images\img.png");
                    DevilRender.Timer.Start();
                    break;
                }
            }
        }