protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); cam = new Camera(2.5f, 0.01f, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height); cathedral = Content.Load<Model>("Models/dragon"); renderer = new Renderer(Content, GraphicsDevice, spriteBatch); renderer.AddModel(cathedral); gaussian = new GaussianBlurPP(renderer.PostProcessor, sigma); renderer.PostProcessor.AddPPEffect(gaussian); }
public void Render(GameTime g, Camera cam) { float dt = (float)g.ElapsedGameTime.TotalSeconds; float elapsed = (float)g.TotalGameTime.TotalSeconds; device.SetRenderTargets(colorTarget, normalTarget, depthTarget); clearGBufferEffect.Parameters["farplane"].SetValue(cam.FarPlane); postProcessor.DrawFullScreenQuad(clearGBufferEffect); device.BlendState = BlendState.Opaque; device.DepthStencilState = DepthStencilState.Default; BoundingFrustum frustum = new BoundingFrustum(cam.View * cam.Projection); //renderGBufferEffect.Parameters["frustumCorners"].SetValue(frustum.GetCorners()); foreach (Model m in models) { foreach (ModelMesh mesh in m.Meshes) { foreach (ModelMeshPart meshPart in mesh.MeshParts) { Effect effect = meshPart.Effect; effect.Parameters["World"].SetValue(Matrix.Identity); effect.Parameters["View"].SetValue(cam.View); effect.Parameters["Projection"].SetValue(cam.Projection); } mesh.Draw(); } } //Texture2D result = postProcessor.Process(normalTarget, colorTarget, depthTarget, normalTarget); device.SetRenderTarget(colorTarget); device.Clear(Color.Red); //PostProcessor.DrawFullScreenQuad(depthTarget); Vector3[] corners = frustum.GetCorners(); Vector3[] farCorners = new Vector3[4]; for (int i = 0; i < corners.Length; i++) { corners[i] = Vector3.Transform(corners[i], cam.View); } for (int i = 0; i < 4; i++) { farCorners[i] = corners[i + 4] - corners[i]; } ssaoEffect.Parameters["frustumCorners"].SetValue(farCorners); ssaoEffect.Parameters["depthMap"].SetValue(depthTarget); ssaoEffect.Parameters["normalMap"].SetValue(normalTarget); ssaoEffect.Parameters["noiseMap"].SetValue(NoiseMap); ssaoEffect.Parameters["halfPixel"].SetValue(new Vector2(0.5f / (float)device.PresentationParameters.BackBufferWidth, 0.5f / (float)device.PresentationParameters.BackBufferHeight)); ssaoEffect.Parameters["Projection"].SetValue(cam.Projection); ssaoEffect.Parameters["invProjection"].SetValue(Matrix.Invert(cam.Projection)); Matrix tempView = cam.View; tempView.M41 = 0; tempView.M42 = 0; tempView.M43 = 0; tempView.M44 = 0; ssaoEffect.Parameters["View"].SetValue(tempView); ssaoEffect.Parameters["radius"].SetValue(radius); PostProcessor.DrawFullScreenQuad(ssaoEffect); Texture2D result = postProcessor.Process(colorTarget, colorTarget, depthTarget, normalTarget); device.SetRenderTarget(null); device.Clear(Color.Red); postProcessor.DrawFullScreenQuad(result); }