public static void RenderRefraccion() { Device d3dDevice = GuiController.Instance.D3dDevice; Surface target, bb; // seteamos el rendertarget de refraccion bb = d3dDevice.GetRenderTarget(0); target = Oceano.surf_refraction.GetSurfaceLevel(0); d3dDevice.SetRenderTarget(0, target); // limpiamos target & z en el device d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, ParametrosDeConfiguracion.Agua.Color.ToArgb(), 1.0f, 0); Matrix store, scale; // apachurramos la escena store = d3dDevice.GetTransform(TransformType.World); scale = Matrix.Scaling(1.0f, 0.75f, 1.0f); d3dDevice.MultiplyTransform(TransformType.World, scale); // agregamos unclip-plane //Plane cplane = new Plane(0, -1, 0, 1.7f * ParametrosDeConfiguracion.Agua.AlturaSuperficieal); // d3dDevice.ClipPlanes[0].Plane = cplane; // d3dDevice.ClipPlanes[0].Enabled = true; // d3dDevice.SetRenderState(RenderStates.ClipPlaneEnable, true); // render del sol unicamente Isla.Render(); Sol.Render(EstadoRender.REFRACCION); // sacamos el clip plane //d3dDevice.SetRenderState(RenderStates.ClipPlaneEnable, false); //d3dDevice.ClipPlanes[0].Enabled = false; // restoreamos el render target original d3dDevice.RenderState.ZBufferFunction = Compare.LessEqual; d3dDevice.SetTransform(TransformType.World, store); d3dDevice.SetRenderTarget(0, bb); }
/// <summary> /// Método que se llama cada vez que hay que refrescar la pantalla. /// Escribir aquí todo el código referido al renderizado. /// Borrar todo lo que no haga falta /// </summary> /// <param name="elapsedTime">Tiempo en segundos transcurridos desde el último frame</param> public override void render(float elapsedTime) { GuiController.Instance.FpsCounterEnable = true; if (Utiles.CamaraSumergida) { Postprocesador.CambiarRenderState(); } //Device de DirectX para renderizar Device d3dDevice = GuiController.Instance.D3dDevice; // Procesa los sonidos Sonidos.Procesar(); // las camaras solo se modifican cuando no esta activo el frustum culling // asi podemos usar la fps para culling y la 3rd person para mostrarlo if (!ParametrosDeConfiguracion.VerFrustumCulling) { GuiController.Instance.FpsCamera.Enable = ParametrosDeConfiguracion.CamaraLibre; GuiController.Instance.ThirdPersonCamera.Enable = !ParametrosDeConfiguracion.CamaraLibre; } // Procea Dispositivos de entrada (teclado y mouse) DispositivosDeEntrada.Procesar(); //Renderizar el Rayo //Rayo.Render(); Oceano.RenderRefraccion(); Oceano.RenderReflexion(); d3dDevice.Clear(ClearFlags.ZBuffer | ClearFlags.Target, ParametrosDeConfiguracion.Agua.Color.ToArgb(), 1.0f, 0); // pongo los rendering states d3dDevice.RenderState.ZBufferEnable = true; d3dDevice.RenderState.ZBufferWriteEnable = true; d3dDevice.RenderState.ZBufferFunction = Compare.LessEqual; //d3dDevice.RenderState.AlphaBlendEnable = false; // Renderizar SkyDome SkyDome.Render(); // Renderiza el efecto niebla if (ParametrosDeConfiguracion.Niebla) { Niebla.Render(); } // Renderizar Oceano Oceano.Render(); // Renderizo Barco Barco.Render(EstadoRender.NORMAL); // Render isla y faro Isla.Render(); Faro.Render(); // Seteo el sol como fuente de luz Sol.Render(EstadoRender.NORMAL); Lluvia.Render(); if (ParametrosDeConfiguracion.RenderQuadTree) { QuadTree.Render(); } if (Postprocesador.Trabajando) { Postprocesador.RenderPostProcesado(); } // Proceso logica de juego y dibujo monedas Juego.Procesar(); // Volver a dibujar FPS GuiController.Instance.Text3d.drawText("FPS: " + HighResolutionTimer.Instance.FramesPerSecond, 0, 0, Color.Yellow); GuiController.Instance.AxisLines.render(); }