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); } }; }
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; } } }