//[TWProfile] void gameLoopStep() { if (!running) { if (exitAndCleanup()) { return; } return; } if (!Form.Active) { Thread.Sleep(100); } updateInput(); updateElapsed(); SpectaterCamera.Update(Elapsed, keyboard, mouse); Form.Device.ImmediateContext.ClearRenderTargetView(Form.RenderTargetView, new Color4(Color.DeepSkyBlue)); updateBasicShaders(); doGameLoopEvent(); renderAxisLines(); LineManager3D.Render(Camera); }
public void InitDirectX() { Form.InitDirectX(); keyboard = new SlimDXTWKeyboard(); diDevice = new global::SlimDX.DirectInput.DirectInput(); diKeyboard = new global::SlimDX.DirectInput.Keyboard(diDevice); diKeyboard.SetCooperativeLevel(Form.Form, CooperativeLevel.Nonexclusive | CooperativeLevel.Foreground); diKeyboard.Acquire(); mouse = new TWMouse(); diMouse = new global::SlimDX.DirectInput.Mouse(new DirectInput()); diMouse.SetCooperativeLevel(Form.Form, CooperativeLevel.Exclusive | CooperativeLevel.Foreground); SpectaterCamera = new SpectaterCamera(); Camera = SpectaterCamera; LineManager3D = new LineManager3D(Form.Device); TextureRenderer = new TextureRenderer(Form.Device); HelperStates = new HelperStatesContainer(Form.Device); }
public void DrawLines(LodOctreeNode node, LineManager3D lm) { DrawSingleNode(node, lm, Color.Black); if (node.Children == null) { return; } for (int i = 0; i < 8; i++) { DrawLines(node.Children[i], lm); } }
public static void AddMatrixAxes(this LineManager3D lm, Matrix matrix) { var oriMat = lm.WorldMatrix; lm.WorldMatrix = matrix; var axes = new[] { Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ }; var colors = new[] { new Color4(1, 0, 0, 1), new Color4(0, 1, 0, 1), new Color4(0, 0, 1, 1) }; for (int i = 0; i < axes.Length; i++) { lm.AddLine(Vector3.Zero, axes[i], colors[i]); } lm.WorldMatrix = oriMat; }
public void DrawLines(LodOctreeNode node, LineManager3D lm, Func <LodOctreeNode, bool> isVisible, Func <LodOctreeNode, Color> getColor) { if (isVisible(node)) { DrawSingleNode(node, lm, getColor(node)); } if (node.Children == null) { return; } for (int i = 0; i < 8; i++) { DrawLines(node.Children[i], lm, isVisible, getColor); } }
private void renderAxisLines() { if (!RenderAxis) { return; } var old = LineManager3D.DrawGroundShadows; LineManager3D.DrawGroundShadows = false; LineManager3D.WorldMatrix = Matrix.Identity; LineManager3D.AddLine(new Vector3(0, 0, 0), new Vector3(10, 0, 0), Color.Red); LineManager3D.AddLine(new Vector3(0, 0, 0), new Vector3(0, 10, 0), Color.Green); LineManager3D.AddLine(new Vector3(0, 0, 0), new Vector3(0, 0, 10), Color.Blue); LineManager3D.DrawGroundShadows = old; }
public void TestLineManager3D() { var keyboard = new SlimDXTWKeyboard(); var dev = new SlimDX.DirectInput.DirectInput(); var kb = new SlimDX.DirectInput.Keyboard(dev); kb.Acquire(); var mouse = new TWMouse(); var m = new SlimDX.DirectInput.Mouse(dev); m.Acquire(); var game = new DX11Form(); game.InitDirectX(); var device = game.Device; var rasterizerState = RasterizerState.FromDescription(device, new RasterizerStateDescription() { CullMode = CullMode.None, FillMode = FillMode.Solid }); device.ImmediateContext.Rasterizer.State = rasterizerState; var cam = new SpectaterCamera(); var lineManager = new LineManager3D(device); game.GameLoopEvent += delegate { mouse.UpdateMouseState(m.GetCurrentState()); keyboard.UpdateKeyboardState(kb.GetCurrentState()); cam.Update(0.001f, keyboard, mouse); for (int num = 0; num < 200; num++) { lineManager.AddLine( new Vector3(-12.0f + num / 4.0f, 13.0f, 0), new Vector3(-17.0f + num / 4.0f, -13.0f, 0), new Color4((byte)(255 - num) / 255f, 14 / 255f, (byte)num / 255f)); } // for lineManager.DrawGroundShadows = true; lineManager.AddCenteredBox(new Vector3(4, 4, 4), 2, new Color4(1, 0, 0)); lineManager.WorldMatrix = Matrix.Translation(MathHelper.Up * 30); for (int num = 0; num < 200; num++) { lineManager.AddLine( new Vector3(-12.0f + num / 4.0f, 13.0f, 0), new Vector3(-17.0f + num / 4.0f, -13.0f, 0), new Color4((byte)(255 - num) / 255f, 14 / 255f, (byte)num / 255f)); } // for lineManager.Render(cam); if (keyboard.IsKeyDown(Key.Escape)) { game.Exit(); } }; game.Run(); rasterizerState.Dispose(); kb.Dispose(); m.Dispose(); dev.Dispose(); }
public DeferredRenderer(DX11Game game) { this.game = game; var device = game.Device; context = device.ImmediateContext; screenWidth = game.Form.Form.ClientSize.Width; screenHeight = game.Form.Form.ClientSize.Height; int width = screenWidth; int height = screenHeight; gBuffer = new GBuffer(game.Device, width, height); texturePool = new TexturePool(game); meshesRenderer = new DeferredMeshesRenderer(game, gBuffer, TexturePool); directionalLightRenderer = new DirectionalLightRenderer(game, GBuffer); spotLightRenderer = new SpotLightRenderer(game, GBuffer); pointLightRenderer = new PointLightRenderer(game, GBuffer); combineFinalRenderer = new CombineFinalRenderer(game, GBuffer); var desc = new Texture2DDescription { BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, Format = Format.R16G16B16A16_Float, Width = screenWidth, Height = screenHeight, ArraySize = 1, SampleDescription = new SampleDescription(1, 0), MipLevels = 1 }; hdrImage = new Texture2D(device, desc); hdrImageRtv = new RenderTargetView(device, hdrImage); hdrImageRV = new ShaderResourceView(device, hdrImage); calculater = new AverageLuminanceCalculater(game, hdrImageRV); toneMap = new ToneMapRenderer(game); var tempDesc = new Texture2DDescription { ArraySize = 1, BindFlags = BindFlags.None, CpuAccessFlags = CpuAccessFlags.Read, Format = Format.R32_Float, Height = 1, MipLevels = 1, OptionFlags = ResourceOptionFlags.None, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Staging, Width = 1 }; tempTex = new Texture2D(device, tempDesc); ssao = new HorizonSSAORenderer(game, screenWidth, screenHeight); Vector3 radius = new Vector3(500, 1000, 500); frustumCuller = new FrustumCuller(new BoundingBox(-radius, radius), 1); gbufferView = frustumCuller.CreateView(); meshesRenderer.Culler = frustumCuller; Texture2D skyColorTexture;// = Texture2D.FromFile(game.Device, TWDir.GameData.CreateSubdirectory("Core") + "\\skyColor.bmp"); var strm = new DataStream(16 * 4, true, true); var multiplier = 2; strm.Write(new Half4(new Half(135f / 255f * multiplier), new Half(206f / 255f * multiplier), new Half(235 / 255f * multiplier), new Half(1))); strm.Position = 0; var dataRectangle = new DataRectangle(16 * 4, strm); skyColorTexture = new Texture2D(game.Device, new Texture2DDescription { ArraySize = 1, BindFlags = BindFlags.ShaderResource, CpuAccessFlags = CpuAccessFlags.None, Format = Format.R16G16B16A16_Float, Height = 1, MipLevels = 1, OptionFlags = ResourceOptionFlags.None, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Default, Width = 1 }, dataRectangle); skyColorRV = new ShaderResourceView(game.Device, skyColorTexture); postProcessRT1 = CreateBackbufferLikeRT(); postProcessRT2 = CreateBackbufferLikeRT(); fogRenderer = new FogEffect(game); backgroundDepthStencilState = DepthStencilState.FromDescription(game.Device, new DepthStencilStateDescription() { IsDepthEnabled = true, DepthComparison = Comparison.LessEqual, DepthWriteMask = DepthWriteMask.Zero, }); lineManager = new LineManager3D(game.Device); updateRasterizerState(); }
public ParticlesLineRenderer(LineManager3D lines) { this.lines = lines; }
public void DrawSingleNode(LodOctreeNode node, LineManager3D lm, Color col) { lm.AddBox(new BoundingBox(node.LowerLeft.ToVector3(), (Vector3)node.LowerLeft.ToVector3() + node.size * new Vector3(1)), col); }