protected override void UpdateInternal(GameTime gameTime) { base.UpdateInternal(gameTime); _timeStep = (float)gameTime.ElapsedGameTime.TotalSeconds; _gameTime = (float)gameTime.TotalGameTime.TotalSeconds; Age += _timeStep; }
protected override void DrawInternal(GameTime gameTime) { base.DrawInternal(gameTime); var camera = D3DApp11.I.Camera; var eyePos = camera.Position; var t = Matrix.Translation(eyePos); var wvp = t * camera.ViewProjectionMatrix; var skyFx = EffectManager11.Instance.GetEffect<SkyboxEffect11>(); skyFx.SetWorldViewProj(wvp); skyFx.SetCubeMap(CubeMapSRV); var stride = VertPos.Stride; const int offset = 0; var context = D3DApp11.I.ImmediateContext; context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_vb, stride, offset)); context.InputAssembler.SetIndexBuffer(_ib, Format.R32_UInt, 0); context.InputAssembler.InputLayout = InputLayouts.Pos; context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; var tech = skyFx.SkyTech; for (var p = 0; p < tech.Description.PassCount; p++) { using (var pass = tech.GetPassByIndex(p)) { pass.Apply(context); context.DrawIndexed(_indexCount, 0, 0); } } }
public void Update(GameTime gameTime) { if (!IsInitialized) { Initialize(); } if (Enabled) { UpdateInternal(gameTime); } }
protected override void DrawInternal(GameTime gameTime) { var immediateContext = D3DApp11.I.ImmediateContext; // Clear views immediateContext.ClearDepthStencilView(_depthView, DepthStencilClearFlags.Depth, 1.0f, 0); immediateContext.ClearRenderTargetView(_renderView, Color.Black); base.DrawInternal(gameTime); }
protected override void UpdateInternal(GameTime gameTime) { base.UpdateInternal(gameTime); var camera = D3DApp11.I.Camera; var state = _keyboard.GetCurrentState(); var d = (float)gameTime.ElapsedGameTime.TotalSeconds; const float distanceFactor = 3f; const float angleFactor = 0.1f; const float zoomFactor = 0.01f; if (state.IsPressed(Key.W)) { camera.Walk(d * distanceFactor); } if (state.IsPressed(Key.S)) { camera.Walk(-d * distanceFactor); } if (state.IsPressed(Key.A)) { camera.Strafe(-d * distanceFactor); } if (state.IsPressed(Key.D)) { camera.Strafe(d * distanceFactor); } if (state.IsPressed(Key.Right)) { camera.Yaw(d * angleFactor); } if (state.IsPressed(Key.Left)) { camera.Yaw(-d * angleFactor); } if (state.IsPressed(Key.Up)) { camera.Pitch(-d * angleFactor); } if (state.IsPressed(Key.Down)) { camera.Pitch(d * angleFactor); } if (state.IsPressed(Key.Equals) || state.IsPressed(Key.PageUp) || state.IsPressed(Key.Add)) { camera.Zoom(-d * zoomFactor); } if (state.IsPressed(Key.Subtract) || state.IsPressed(Key.PageDown) || state.IsPressed(Key.Minus)) { camera.Zoom(d * zoomFactor); } }
protected override void DrawInternal(GameTime gameTime) { var device = D3DApp11.I.D3DDevice; var context = D3DApp11.I.ImmediateContext; var camera = D3DApp11.I.Camera; var sky = D3DApp11.I.Skybox; var basicFx = EffectManager11.Instance.GetEffect<BasicEffect11>(); var normalMapFx = EffectManager11.Instance.GetEffect<NormalMapEffect11>(); var displacementMapFx = EffectManager11.Instance.GetEffect<DisplacementMapEffect11>(); var depthStencilView = D3DApp11.I.RenderTarget.DepthStencilView; var renderTargetView = D3DApp11.I.RenderTarget.RenderTargetView; var viewport = D3DApp11.I.RenderTarget.Viewport; basicFx.SetShadowMap(null); normalMapFx.SetShadowMap(null); displacementMapFx.SetShadowMap(null); _shadowMap.BindDsvAndSetNullRenderTarget(context); DrawSceneToShadowMap(device); // 必须复原,避免加入法向贴图和粒子时错误渲染 context.Rasterizer.State = null; context.OutputMerger.BlendState = null; if (_settings.DrawMode == DrawMode.Wireframe) { context.Rasterizer.State = RenderStates11.Instance.WireframeRS; } context.HullShader.Set(null); context.DomainShader.Set(null); context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; context.OutputMerger.SetTargets(depthStencilView, renderTargetView); context.Rasterizer.SetViewports(new RawViewportF[] { viewport }); var view = camera.ViewMatrix; var proj = camera.ProjectionMatrix; basicFx.SetDirLights(_dirLights); basicFx.SetEyePosW(camera.Position); basicFx.SetCubeMap(_settings.IsReflectionEnabled ? sky.CubeMapSRV : null); basicFx.SetShadowMap(_settings.IsShadowEnabled ? _shadowMap.DepthMapSRV : null); normalMapFx.SetDirLights(_dirLights); normalMapFx.SetEyePosW(camera.Position); normalMapFx.SetCubeMap(_settings.IsReflectionEnabled ? sky.CubeMapSRV : null); normalMapFx.SetShadowMap(_settings.IsShadowEnabled ? _shadowMap.DepthMapSRV : null); displacementMapFx.SetDirLights(_dirLights); displacementMapFx.SetEyePosW(camera.Position); displacementMapFx.SetCubeMap(_settings.IsReflectionEnabled ? sky.CubeMapSRV : null); displacementMapFx.SetShadowMap(_settings.IsShadowEnabled ? _shadowMap.DepthMapSRV : null); displacementMapFx.SetMaxTessDistance(0.1f); displacementMapFx.SetMinTessDistance(0.05f); EffectTechnique activeNonReflectiveGeomTech = normalMapFx.Light3TexTech; EffectTechnique activeReflectiveGeomTech = basicFx.Light3TexReflectTech; EffectTechnique activeModelTech = basicFx.Light3TexReflectTech; UpdateTechniques(out activeNonReflectiveGeomTech, out activeReflectiveGeomTech, out activeModelTech); context.InputAssembler.InputLayout = InputLayouts.PosNormTexTan; RenderMode renderMode; switch (_settings.SurfaceMapping) { case SurfaceMapping.Simple: renderMode = RenderMode.Basic; break; case SurfaceMapping.NormalMapping: renderMode = RenderMode.NormalMapped; break; case SurfaceMapping.DisplacementMapping: renderMode = RenderMode.DisplacementMapped; break; default: throw new ArgumentOutOfRangeException(nameof(_settings.SurfaceMapping)); } for (var p = 0; p < activeNonReflectiveGeomTech.Description.PassCount; p++) { // draw grid var pass = activeNonReflectiveGeomTech.GetPassByIndex(p); _grid.ShadowTransform = _shadowTransform; _grid.Draw(context, pass, view, proj, renderMode); // draw box _box.ShadowTransform = _shadowTransform; _box.Draw(context, pass, view, proj, renderMode); // draw columns foreach (var cylinder in _cylinders) { cylinder.ShadowTransform = _shadowTransform; cylinder.Draw(context, pass, view, proj, renderMode); } } for (var p = 0; p < activeReflectiveGeomTech.Description.PassCount; p++) { var pass = activeReflectiveGeomTech.GetPassByIndex(p); foreach (var sphere in _spheres) { sphere.ShadowTransform = _shadowTransform; sphere.Draw(context, pass, view, proj, RenderMode.Basic); } } // MIC, decelerator for (var p = 0; p < activeModelTech.Description.PassCount; ++p) { if (_settings.IsDeceleratorVisible) { _decelInstance.ShadowTransform = _shadowTransform; _decelInstance.Draw(context, activeModelTech.GetPassByIndex(p), view, proj, RenderMode.Basic); } if (_settings.IsBarbecueBarVisible) { _barbInstance.ShadowTransform = _shadowTransform; _barbInstance.Draw(context, activeModelTech.GetPassByIndex(p), view, proj, RenderMode.Basic); } if (_settings.IsTruckVisible) { _truckInstance.ShadowTransform = _shadowTransform; _truckInstance.Draw(context, activeModelTech.GetPassByIndex(p), view, proj, RenderMode.Basic); } if (_settings.IsTireVisible) { _tireInstance.ShadowTransform = _shadowTransform; _tireInstance.Draw(context, activeModelTech.GetPassByIndex(p), view, proj, RenderMode.Basic); } } context.Rasterizer.State = null; if (_settings.QuadVisible) { DrawScreenQuad(device); } base.DrawInternal(gameTime); }
protected override void UpdateInternal(GameTime gameTime) { UpdateBufferedSettings(); base.UpdateInternal(gameTime); if (_settings.AreLightsMoving) { _lightRotationAngle = 0.1f * (float)gameTime.TotalGameTime.TotalSeconds; var r = Matrix.RotationY(_lightRotationAngle); for (var i = 0; i < _dirLights.Length; i++) { var lightDir = _originalLightDirs[i]; lightDir = Vector3.TransformNormal(lightDir, r); _dirLights[i].Direction = lightDir; } } var camera = D3DApp11.I.Camera; _fire.EyePosW = camera.Position; _rain.EyePosW = camera.Position; _rain.EmitPosW = camera.Position; BuildShadowTransform(); }
protected override void DrawInternal(GameTime gameTime) { base.DrawInternal(gameTime); var camera = D3DApp11.I.Camera; var context = D3DApp11.I.ImmediateContext; var vp = camera.ViewProjectionMatrix; // set shader variables _fx.SetViewProj(vp); _fx.SetGameTime(_gameTime); _fx.SetTimeStep(_timeStep); _fx.SetEyePosW(EyePosW); _fx.SetEmitPosW(EmitPosW); _fx.SetEmitDirW(EmitDirW); _fx.SetTexArray(_texArraySRV); _fx.SetRandomTex(_randomTexSRV); context.InputAssembler.InputLayout = InputLayouts.Particle; context.InputAssembler.PrimitiveTopology = PrimitiveTopology.PointList; var stride = Particle.Stride; const int offset = 0; // bind the input vertex buffer for the stream-out technique // use the _initVB when _firstRun = true context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_firstRun ? _initVB : _drawVB, stride, offset)); // bind the stream-out vertex buffer context.StreamOutput.SetTargets(new[] { new StreamOutputBufferBinding(_streamOutVB, offset) }); // draw the particles using the stream-out technique, which will update the particles positions // and output the resulting particles to the stream-out buffer var techDesc = _fx.StreamOutTech.Description; for (var p = 0; p < techDesc.PassCount; p++) { _fx.StreamOutTech.GetPassByIndex(p).Apply(context); if (_firstRun) { context.Draw(1, 0); _firstRun = false; } else { // the _drawVB buffer was populated by the Stream-out technique, so we don't // know how many vertices are contained within it. Direct3D keeps track of this // internally, however, and we can use DrawAuto to draw everything in the buffer. context.DrawAuto(); } } // Disable stream-out context.StreamOutput.SetTargets(null); // ping-pong the stream-out and draw buffers, since we will now want to draw the vertices // populated into the buffer that was bound to stream-out var temp = _drawVB; _drawVB = _streamOutVB; _streamOutVB = temp; // draw the particles using the draw technique that will transform the points to lines/quads context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_drawVB, stride, offset)); techDesc = _fx.DrawTech.Description; for (var p = 0; p < techDesc.PassCount; p++) { _fx.DrawTech.GetPassByIndex(p).Apply(context); context.DrawAuto(); } }
protected virtual void DrawInternal(GameTime gameTime) { }
protected virtual void UpdateInternal(GameTime gameTime) { }
public void Draw(GameTime gameTime) { if (Visible) { DrawInternal(gameTime); } }
private void Render() { if (!IsRunning) { return; } Timer.FrameTime = 1f / 60f; Timer.Tick(); if (!IsPaused) { if (!ManualVSync || (Timer.TotalTime - _lastRenderSecond > Timer.FrameTime)) { if (_userResized) { RaiseSurfaceInvalidated(this, EventArgs.Empty); _userResized = false; } var gameTime = new GameTime(TimeSpan.FromSeconds(Timer.FrameTime), TimeSpan.FromSeconds(Timer.TotalTime)); Update(gameTime); Render(gameTime); CalculateFps(); _lastRenderSecond = Timer.TotalTime; } } else { Thread.Sleep(100); } }
protected override void UpdateInternal(GameTime gameTime) { base.UpdateInternal(gameTime); _camera.UpdateViewMatrix(); }
protected abstract void Render(GameTime gameTime);
protected override void Render(GameTime gameTime) { Draw(gameTime); // Present! _swapChain.Present(0, PresentFlags.None); }