public override void UpdateScene(float dt) { base.UpdateScene(dt); if (Util.IsKeyDown(Keys.Up)) { _camera.Walk(10.0f * dt); } if (Util.IsKeyDown(Keys.Down)) { _camera.Walk(-10.0f * dt); } if (Util.IsKeyDown(Keys.Left)) { _camera.Strafe(-10.0f * dt); } if (Util.IsKeyDown(Keys.Right)) { _camera.Strafe(10.0f * dt); } if (Util.IsKeyDown(Keys.PageUp)) { _camera.Zoom(-dt); } if (Util.IsKeyDown(Keys.PageDown)) { _camera.Zoom(+dt); } _camera.UpdateViewMatrix(); }
public override void DrawScene() { ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.White); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosColor; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); Matrix view = _camera.View; Matrix proj = _camera.Proj; Matrix viewProj = _camera.ViewProj; Effects.ColorFX.SetWorldViewProj(viewProj); ImmediateContext.Rasterizer.State = RenderStates.NoCullRS; if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_mapVB, VertexPC.Stride, 0)); for (int p = 0; p < Effects.ColorFX.ColorTech.Description.PassCount; p++) { var pass = Effects.ColorFX.ColorTech.GetPassByIndex(p); pass.Apply(ImmediateContext); ImmediateContext.Draw(_mapVertCount, 0); } ImmediateContext.Rasterizer.State = null; SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Black); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _layout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); var view = _camera.View; var proj = _camera.Proj; // doesn't seem to be much benefit here // 550 fps avg with depth pre-pass // 775 fps avg without //DepthPrePass(); ForwardSetup(); ImmediateContext.OutputMerger.DepthStencilState = RenderStates.LessEqualDSS; var activeTech = _effect.Directional; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _bunnyInstance.Draw(ImmediateContext, pass, view, proj, DrawDirectional); } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.CornflowerBlue); ImmediateContext.ClearDepthStencilView( DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); var viewProj = _camera.ViewProj; var view = _camera.View; var proj = _camera.Proj; Effects.NormalMapFX.SetDirLights(_dirLights); Effects.NormalMapFX.SetEyePosW(_camera.Position); var activeTech = Effects.NormalMapFX.Light3TexTech; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _modelInstance.Draw(ImmediateContext, pass, view, proj); _stoneInstance.Draw(ImmediateContext, pass, view, proj); _dwarfInstance.Draw(ImmediateContext, pass, view, proj); } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = InputLayouts.Basic32; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; var stride = Basic32.Stride; const int offset = 0; _cam.UpdateViewMatrix(); var viewProj = _cam.ViewProj; Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetEyePosW(_cam.Position); var activeTech = Effects.BasicFX.Light3Tech; for (int p = 0; p < activeTech.Description.PassCount; p++) { if (Util.IsKeyDown(Keys.D1)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_meshVB, stride, offset)); ImmediateContext.InputAssembler.SetIndexBuffer(_meshIB, Format.R32_UInt, 0); var world = _meshWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_meshMat); var pass = activeTech.GetPassByIndex(p); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_meshIndexCount, 0, 0); ImmediateContext.Rasterizer.State = null; if (_pickedTriangle >= 0) { ImmediateContext.OutputMerger.DepthStencilState = RenderStates.LessEqualDSS; ImmediateContext.OutputMerger.DepthStencilReference = 0; Effects.BasicFX.SetMaterial(_pickedTriangleMat); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(3, 3 * _pickedTriangle, 0); ImmediateContext.OutputMerger.DepthStencilState = null; } } SwapChain.Present(0, PresentFlags.None); }
public override void UpdateScene(float dt) { base.UpdateScene(dt); if (Util.IsKeyDown(Keys.Up)) { _camera.Walk(10.0f * dt); } if (Util.IsKeyDown(Keys.Down)) { _camera.Walk(-10.0f * dt); } if (Util.IsKeyDown(Keys.Left)) { _camera.Strafe(-10.0f * dt); } if (Util.IsKeyDown(Keys.Right)) { _camera.Strafe(10.0f * dt); } if (Util.IsKeyDown(Keys.PageUp)) { _camera.Zoom(-dt * 10.0f); } if (Util.IsKeyDown(Keys.PageDown)) { _camera.Zoom(+dt * 10.0f); } if (Util.IsKeyDown(Keys.D1)) { _camWalkMode = true; } if (Util.IsKeyDown(Keys.D2)) { _camWalkMode = false; } if (_camWalkMode) { var camPos = _camera.Position; var y = _terrain.Height(camPos.X, camPos.Z); _camera.Position = new Vector3(camPos.X, y + 2.0f, camPos.Z); } if (Util.IsKeyDown(Keys.R)) { _fire.Reset(); _rain.Reset(); } _fire.Update(dt, Timer.TotalTime); _rain.Update(dt, Timer.TotalTime); _camera.UpdateViewMatrix(); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Black); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = _layout; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _camera.UpdateViewMatrix(); var view = _camera.View; var proj = _camera.Proj; // directional lighting ImmediateContext.OutputMerger.DepthStencilState = RenderStates.LessEqualDSS; ForwardSetup(); var activeTech = _effect.Directional; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _bunnyInstance.Draw(ImmediateContext, pass, view, proj, DrawDirectional); } // point lights var prevBlend = ImmediateContext.OutputMerger.BlendState; ImmediateContext.OutputMerger.BlendState = _additiveBlend; for (int i = 0; i < NumLights; i++) { PointSetup(i); activeTech = _effect.PointLight; for (var p = 0; p < activeTech.Description.PassCount; p++) { var pass = activeTech.GetPassByIndex(p); _bunnyInstance.Draw(ImmediateContext, pass, view, proj, DrawPoint); } } ImmediateContext.OutputMerger.BlendState = prevBlend; SwapChain.Present(0, PresentFlags.None); }
public override void UpdateScene(float dt) { base.UpdateScene(dt); if (Util.IsKeyDown(Keys.Up)) { _camera.Walk(10.0f * dt); } if (Util.IsKeyDown(Keys.Down)) { _camera.Walk(-10.0f * dt); } if (Util.IsKeyDown(Keys.Left)) { _camera.Strafe(-10.0f * dt); } if (Util.IsKeyDown(Keys.Right)) { _camera.Strafe(10.0f * dt); } if (Util.IsKeyDown(Keys.PageUp)) { _camera.Zoom(-dt); } if (Util.IsKeyDown(Keys.PageDown)) { _camera.Zoom(+dt); } _lightRotationAngle += 0.1f * dt; var r = Matrix.RotationY(_lightRotationAngle); for (var i = 0; i < 3; i++) { var lightDir = _originalLightDirs[i]; lightDir = Vector3.TransformNormal(lightDir, r); _dirLights[i].Direction = lightDir; } BuildShadowTransform(); _camera.UpdateViewMatrix(); }
public override void UpdateScene(float dt) { base.UpdateScene(dt); // Get camera position from polar coords var x = radius * MathF.Sin(phi) * MathF.Cos(theta); var z = radius * MathF.Sin(phi) * MathF.Sin(theta); var y = radius * MathF.Cos(phi); // Build the view matrix var pos = new Vector3(x, y, z); var target = new Vector3(0); var up = new Vector3(0, 1, 0); view = Matrix.LookAtLH(pos, target, up); eyePosW = pos; foreach (ShapeBase sb in shapes) { if (sb is AnimatedShape) { AnimatedShape shape = (AnimatedShape)sb; if (shape.Bouncing) { shape.Bounce(shape.BounceFloor, shape.BounceCeiling); } if (shape.BounceTranslate) { shape.BounceAndTranslate(shape.BounceFloor, shape.BounceCeiling, shape.TranslateTarget); } } camera.UpdateViewMatrix(); } }
public bool Update(Vector3 position, Vector3 direction, float range, float angle) { var result = _dirty; _dirty = false; if (result || _camera.FovY != angle || _camera.FarZ != range) { _camera.FovY = angle; _camera.FarZ = range; _camera.SetLens(1f); result = true; } if (result || _camera.Position != position || Vector3.Dot(_camera.Look, direction) < 0.99) { _camera.LookAt(position, position + direction, Math.Abs(direction.Y - 1f) < 0.01f || Math.Abs(direction.Y - (-1f)) < 0.01f ? Vector3.UnitX : Vector3.UnitY); _camera.UpdateViewMatrix(); result = true; } if (result) { ShadowTransform = _camera.ViewProj * new Matrix { M11 = 0.5f, M22 = -0.5f, M33 = 1.0f, M41 = 0.5f, M42 = 0.5f, M44 = 1.0f }; } return(result); }
public override void UpdateScene(float dt) { base.UpdateScene(dt); if (Util.IsKeyDown(Keys.Up)) { _camera.Walk(10.0f * dt); } if (Util.IsKeyDown(Keys.Down)) { _camera.Walk(-10.0f * dt); } if (Util.IsKeyDown(Keys.Left)) { _camera.Strafe(-10.0f * dt); } if (Util.IsKeyDown(Keys.Right)) { _camera.Strafe(10.0f * dt); } if (Util.IsKeyDown(Keys.PageUp)) { _camera.Zoom(-dt); } if (Util.IsKeyDown(Keys.PageDown)) { _camera.Zoom(+dt); } var skullScale = Matrix.Scaling(0.2f, 0.2f, 0.2f); var skullOffset = Matrix.Translation(3, 2, 0); var skullLocalRotate = Matrix.RotationY(2.0f * Timer.TotalTime); var skullGlobalRotate = Matrix.RotationY(0.5f * Timer.TotalTime); _skullWorld = skullScale * skullLocalRotate * skullOffset * skullGlobalRotate; _camera.UpdateViewMatrix(); }
public override void UpdateScene(float dt) { base.UpdateScene(dt); if (Util.IsKeyDown(Keys.Up)) { _cam.Walk(10.0f * dt); } if (Util.IsKeyDown(Keys.Down)) { _cam.Walk(-10.0f * dt); } if (Util.IsKeyDown(Keys.Left)) { _cam.Strafe(-10.0f * dt); } if (Util.IsKeyDown(Keys.Right)) { _cam.Strafe(10.0f * dt); } if (Util.IsKeyDown(Keys.D1)) { _frustumCullingEnabled = true; } if (Util.IsKeyDown(Keys.D2)) { _frustumCullingEnabled = false; } if (Util.IsKeyDown(Keys.U)) { _instancing = false; } if (Util.IsKeyDown(Keys.I)) { _instancing = true; } if (Util.IsKeyDown(Keys.B)) { _skullsOrBoxes = false; } if (Util.IsKeyDown(Keys.S)) { _skullsOrBoxes = true; } _cam.UpdateViewMatrix(); _visibleObjectCount = 0; if (_frustumCullingEnabled) { var db = ImmediateContext.MapSubresource(_instanceBuffer, MapMode.WriteDiscard, MapFlags.None); foreach (var instancedData in _instancedData) { var w = instancedData.World; var box = new BoundingBox( Vector3.TransformCoordinate(_skullBox.Minimum, w), Vector3.TransformCoordinate(_skullBox.Maximum, w) ); if (_cam.Visible(box)) { db.Data.Write(instancedData); _visibleObjectCount++; } } ImmediateContext.UnmapSubresource(_instanceBuffer, 0); } else { var db = ImmediateContext.MapSubresource(_instanceBuffer, MapMode.WriteDiscard, MapFlags.None); foreach (var instancedData in _instancedData) { db.Data.Write(instancedData); _visibleObjectCount++; } ImmediateContext.UnmapSubresource(_instanceBuffer, 0); } MainWindowCaption = String.Format("Instancing and Culling Demo {0} objects visible out of {1}", _visibleObjectCount, _instancedData.Count); }
public override void DrawScene() { ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); ImmediateContext.InputAssembler.InputLayout = InputLayouts.Basic32; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; Matrix view; Matrix proj; Matrix viewProj; if (_useFpsCamera) { _cam.UpdateViewMatrix(); view = _cam.View; proj = _cam.Proj; viewProj = _cam.ViewProj; Effects.BasicFX.SetEyePosW(_cam.Position); } else { _cam2.UpdateViewMatrix(); view = _cam2.View; proj = _cam2.Proj; viewProj = _cam2.ViewProj; Effects.BasicFX.SetEyePosW(_cam2.Position); } Effects.BasicFX.SetDirLights(_dirLights); var activeTexTech = Effects.BasicFX.Light1TexTech; var activeSkullTech = Effects.BasicFX.Light1Tech; switch (_lightCount) { case 1: activeTexTech = Effects.BasicFX.Light1TexTech; activeSkullTech = Effects.BasicFX.Light1Tech; break; case 2: activeTexTech = Effects.BasicFX.Light2TexTech; activeSkullTech = Effects.BasicFX.Light2Tech; break; case 3: activeTexTech = Effects.BasicFX.Light3TexTech; activeSkullTech = Effects.BasicFX.Light3Tech; break; } for (var p = 0; p < activeTexTech.Description.PassCount; p++) { var pass = activeTexTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_shapesVB, Basic32.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_shapesIB, Format.R32_UInt, 0); var world = _gridWorld; var worldInvTranspose = MathF.InverseTranspose(world); var wvp = world * view * proj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(worldInvTranspose); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Scaling(6, 8, 1)); Effects.BasicFX.SetMaterial(_gridMat); Effects.BasicFX.SetDiffuseMap(_floorTexSRV); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_gridIndexCount, _gridIndexOffset, _gridVertexOffset); world = _boxWorld; worldInvTranspose = MathF.InverseTranspose(world); wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(worldInvTranspose); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); Effects.BasicFX.SetMaterial(_boxMat); Effects.BasicFX.SetDiffuseMap(_stoneTexSRV); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_boxIndexCount, _boxIndexOffset, _boxVertexOffset); foreach (var matrix in _cylWorld) { world = matrix; worldInvTranspose = MathF.InverseTranspose(world); wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(worldInvTranspose); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); Effects.BasicFX.SetMaterial(_cylinderMat); Effects.BasicFX.SetDiffuseMap(_brickTexSRV); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_cylinderIndexCount, _cylinderIndexOffset, _cylinderVertexOffset); } foreach (var matrix in _sphereWorld) { world = matrix; worldInvTranspose = MathF.InverseTranspose(world); wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(worldInvTranspose); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); Effects.BasicFX.SetMaterial(_sphereMat); Effects.BasicFX.SetDiffuseMap(_stoneTexSRV); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_sphereIndexCount, _sphereIndexOffset, _sphereVertexOffset); } } for (int p = 0; p < activeSkullTech.Description.PassCount; p++) { var pass = activeSkullTech.GetPassByIndex(p); ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_skullVB, Basic32.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_skullIB, Format.R32_UInt, 0); var world = _skullWorld; var worldInvTranspose = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(worldInvTranspose); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_skullMat); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); } SwapChain.Present(0, PresentFlags.None); }
public override void DrawScene() { base.DrawScene(); ImmediateContext.ClearRenderTargetView(RenderTargetView, Color.Silver); ImmediateContext.ClearDepthStencilView(DepthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0); _camera.UpdateViewMatrix(); var view = _camera.View; var proj = _camera.Proj; var viewProj = _camera.ViewProj; var blendFactor = new Color4(0, 0, 0, 0); Effects.BasicFX.SetDirLights(_dirLights); Effects.BasicFX.SetEyePosW(_camera.Position); Effects.BasicFX.SetCubeMap(_sky.CubeMapSRV); Effects.NormalMapFX.SetDirLights(_dirLights); Effects.NormalMapFX.SetEyePosW(_camera.Position); Effects.NormalMapFX.SetCubeMap(_sky.CubeMapSRV); Effects.DisplacementMapFX.SetDirLights(_dirLights); Effects.DisplacementMapFX.SetEyePosW(_camera.Position); Effects.DisplacementMapFX.SetCubeMap(_sky.CubeMapSRV); Effects.DisplacementMapFX.SetHeightScale(0.05f); Effects.DisplacementMapFX.SetMaxTessDistance(1.0f); Effects.DisplacementMapFX.SetMinTessDistance(25.0f); Effects.DisplacementMapFX.SetMinTessFactor(1.0f); Effects.DisplacementMapFX.SetMaxTessFactor(5.0f); var activeTech = Effects.DisplacementMapFX.Light3Tech; var activeSphereTech = Effects.BasicFX.Light3ReflectTech; var activeSkullTech = Effects.BasicFX.Light3ReflectTech; switch (_renderOptions) { case RenderOptions.Basic: activeTech = Effects.BasicFX.Light3TexTech; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; break; case RenderOptions.NormalMap: activeTech = Effects.NormalMapFX.Light3TexTech; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; break; case RenderOptions.DisplacementMap: activeTech = Effects.DisplacementMapFX.Light3TexTech; ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.PatchListWith3ControlPoints; break; } var stride = PosNormalTexTan.Stride; var offset = 0; ImmediateContext.InputAssembler.InputLayout = InputLayouts.PosNormalTexTan; ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_shapesVB, stride, offset)); ImmediateContext.InputAssembler.SetIndexBuffer(_shapesIB, Format.R32_UInt, 0); if (Util.IsKeyDown(Keys.W)) { ImmediateContext.Rasterizer.State = RenderStates.WireframeRS; } for (int p = 0; p < activeTech.Description.PassCount; p++) { var world = _gridWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; switch (_renderOptions) { case RenderOptions.Basic: Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Scaling(8, 10, 1)); Effects.BasicFX.SetMaterial(_gridMat); Effects.BasicFX.SetDiffuseMap(_stoneTexSRV); break; case RenderOptions.NormalMap: Effects.NormalMapFX.SetWorld(world); Effects.NormalMapFX.SetWorldInvTranspose(wit); Effects.NormalMapFX.SetWorldViewProj(wvp); Effects.NormalMapFX.SetTexTransform(Matrix.Scaling(8, 10, 1)); Effects.NormalMapFX.SetMaterial(_gridMat); Effects.NormalMapFX.SetDiffuseMap(_stoneTexSRV); Effects.NormalMapFX.SetNormalMap(_stoneNormalTexSRV); break; case RenderOptions.DisplacementMap: Effects.DisplacementMapFX.SetWorld(world); Effects.DisplacementMapFX.SetWorldInvTranspose(wit); Effects.DisplacementMapFX.SetViewProj(viewProj); Effects.DisplacementMapFX.SetWorldViewProj(wvp); Effects.DisplacementMapFX.SetTexTransform(Matrix.Scaling(8, 10, 1)); Effects.DisplacementMapFX.SetMaterial(_gridMat); Effects.DisplacementMapFX.SetDiffuseMap(_stoneTexSRV); Effects.DisplacementMapFX.SetNormalMap(_stoneNormalTexSRV); break; } var pass = activeTech.GetPassByIndex(p); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_gridIndexCount, _gridIndexOffset, _gridVertexOffset); world = _boxWorld; wit = MathF.InverseTranspose(world); wvp = world * viewProj; switch (_renderOptions) { case RenderOptions.Basic: Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Scaling(2, 1, 1)); Effects.BasicFX.SetMaterial(_boxMat); Effects.BasicFX.SetDiffuseMap(_brickTexSRV); break; case RenderOptions.NormalMap: Effects.NormalMapFX.SetWorld(world); Effects.NormalMapFX.SetWorldInvTranspose(wit); Effects.NormalMapFX.SetWorldViewProj(wvp); Effects.NormalMapFX.SetTexTransform(Matrix.Scaling(2, 1, 1)); Effects.NormalMapFX.SetMaterial(_boxMat); Effects.NormalMapFX.SetDiffuseMap(_brickTexSRV); Effects.NormalMapFX.SetNormalMap(_brickNormalTexSRV); break; case RenderOptions.DisplacementMap: Effects.DisplacementMapFX.SetWorld(world); Effects.DisplacementMapFX.SetWorldInvTranspose(wit); Effects.DisplacementMapFX.SetViewProj(viewProj); Effects.DisplacementMapFX.SetWorldViewProj(wvp); Effects.DisplacementMapFX.SetTexTransform(Matrix.Scaling(2, 1, 1)); Effects.DisplacementMapFX.SetMaterial(_boxMat); Effects.DisplacementMapFX.SetDiffuseMap(_brickTexSRV); Effects.DisplacementMapFX.SetNormalMap(_brickNormalTexSRV); break; } pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_boxIndexCount, _boxIndexOffset, _boxVertexOffset); foreach (var matrix in _cylWorld) { world = matrix; wit = MathF.InverseTranspose(world); wvp = world * viewProj; switch (_renderOptions) { case RenderOptions.Basic: Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Scaling(1, 2, 1)); Effects.BasicFX.SetMaterial(_cylinderMat); Effects.BasicFX.SetDiffuseMap(_brickTexSRV); break; case RenderOptions.NormalMap: Effects.NormalMapFX.SetWorld(world); Effects.NormalMapFX.SetWorldInvTranspose(wit); Effects.NormalMapFX.SetWorldViewProj(wvp); Effects.NormalMapFX.SetTexTransform(Matrix.Scaling(1, 2, 1)); Effects.NormalMapFX.SetMaterial(_cylinderMat); Effects.NormalMapFX.SetDiffuseMap(_brickTexSRV); Effects.NormalMapFX.SetNormalMap(_brickNormalTexSRV); break; case RenderOptions.DisplacementMap: Effects.DisplacementMapFX.SetWorld(world); Effects.DisplacementMapFX.SetWorldInvTranspose(wit); Effects.DisplacementMapFX.SetViewProj(viewProj); Effects.DisplacementMapFX.SetWorldViewProj(wvp); Effects.DisplacementMapFX.SetTexTransform(Matrix.Scaling(1, 2, 1)); Effects.DisplacementMapFX.SetMaterial(_cylinderMat); Effects.DisplacementMapFX.SetDiffuseMap(_brickTexSRV); Effects.DisplacementMapFX.SetNormalMap(_brickNormalTexSRV); break; } pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_cylinderIndexCount, _cylinderIndexOffset, _cylinderVertexOffset); } } ImmediateContext.HullShader.Set(null); ImmediateContext.DomainShader.Set(null); ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; for (int p = 0; p < activeSphereTech.Description.PassCount; p++) { foreach (var matrix in _sphereWorld) { var world = matrix; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetTexTransform(Matrix.Identity); Effects.BasicFX.SetMaterial(_sphereMat); activeSphereTech.GetPassByIndex(p).Apply(ImmediateContext); ImmediateContext.DrawIndexed(_sphereIndexCount, _sphereIndexOffset, _sphereVertexOffset); } } stride = Basic32.Stride; offset = 0; ImmediateContext.Rasterizer.State = null; ImmediateContext.InputAssembler.InputLayout = InputLayouts.Basic32; ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_skullVB, stride, offset)); ImmediateContext.InputAssembler.SetIndexBuffer(_skullIB, Format.R32_UInt, 0); for (int p = 0; p < activeSkullTech.Description.PassCount; p++) { var world = _skullWorld; var wit = MathF.InverseTranspose(world); var wvp = world * viewProj; Effects.BasicFX.SetWorld(world); Effects.BasicFX.SetWorldInvTranspose(wit); Effects.BasicFX.SetWorldViewProj(wvp); Effects.BasicFX.SetMaterial(_skullMat); activeSkullTech.GetPassByIndex(p).Apply(ImmediateContext); ImmediateContext.DrawIndexed(_skullIndexCount, 0, 0); } _sky.Draw(ImmediateContext, _camera); ImmediateContext.Rasterizer.State = null; ImmediateContext.OutputMerger.DepthStencilState = null; ImmediateContext.OutputMerger.DepthStencilReference = 0; SwapChain.Present(0, PresentFlags.None); }
public override void UpdateScene(float dt) { base.UpdateScene(dt); if (Util.IsKeyDown(Keys.Up)) { _camera.Walk(10.0f * dt); } if (Util.IsKeyDown(Keys.Down)) { _camera.Walk(-10.0f * dt); } if (Util.IsKeyDown(Keys.Left)) { _camera.Strafe(-10.0f * dt); } if (Util.IsKeyDown(Keys.Right)) { _camera.Strafe(10.0f * dt); } if (Util.IsKeyDown(Keys.PageUp)) { _camera.Zoom(-dt); } if (Util.IsKeyDown(Keys.PageDown)) { _camera.Zoom(+dt); } _camera.UpdateViewMatrix(); for (var index = 0; index < _ammo.Count; index++) { var shot = _ammo[index]; shot.Particle.Integrate(dt); if (shot.Particle.Position.Y < 0.0f || shot.StartTime + 10.0f < Timer.TotalTime || shot.Particle.Position.Z > 200.0f) { _ammo.Remove(shot); } } _fireDelay -= dt; if (Util.IsKeyDown(Keys.D1)) { _currentShotType = ShotType.Pistol; } else if (Util.IsKeyDown(Keys.D2)) { _currentShotType = ShotType.Artillery; } else if (Util.IsKeyDown(Keys.D3)) { _currentShotType = ShotType.Fireball; } else if (Util.IsKeyDown(Keys.D4)) { _currentShotType = ShotType.Laser; } else if (Util.IsKeyDown(Keys.Space) && _fireDelay < 0) { Fire(); _fireDelay = 0.2f; } }