/// <summary> /// Método que pone la pantalla en blanco simulando un relámpago. /// </summary> public static void Relampago() { Device d3dDevice = GuiController.Instance.D3dDevice; // Crea una luz puntual d3dDevice.Lights[0].Direction = Barco.mesh.Position; d3dDevice.Lights[0].Diffuse = Color.White; d3dDevice.Lights[0].Ambient = Color.White; d3dDevice.Lights[0].Specular = Color.LightCoral; d3dDevice.Lights[0].Attenuation0 = 100f; d3dDevice.Lights[0].Type = LightType.Spot; d3dDevice.Lights[0].Enabled = true; d3dDevice.RenderState.Lighting = true; // Renderiza solo el bote en esta escena Barco.Render(EstadoRender.NORMAL); // Carga las luces y el render state d3dDevice.Lights[0].Enabled = false; d3dDevice.RenderState.Lighting = false; }
public static void RenderReflexion() { Device d3dDevice = GuiController.Instance.D3dDevice; // seteamos rendertarget de reflexion Surface target, bb; bb = d3dDevice.GetRenderTarget(0); target = Oceano.surf_reflection.GetSurfaceLevel(0); d3dDevice.SetRenderTarget(0, target); //d3dDevice.DepthStencilSurface = Oceano.depthstencil; // limpiamos target & z en el device d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, 0, 1.0f, 0); // reflejamos la escena Matrix store, scale; store = d3dDevice.GetTransform(TransformType.World); scale = Utiles.CamaraSumergida ? Matrix.Identity : Matrix.Scaling(1, -1, 1); d3dDevice.MultiplyTransform(TransformType.World, scale); // agregamos un clip-plane //Plane cplane = new Plane(0, -1, 0, 0); //d3dDevice.ClipPlanes[0].Plane = cplane; //d3dDevice.SetRenderState(RenderStates.ClipPlaneEnable, true); //en el reflejo el sol y barco va invertidos con respecto a y Sol.Render(EstadoRender.REFLEXION); Barco.Render(EstadoRender.REFLEXION); // sacamos el clip plane //d3dDevice.SetRenderState(RenderStates.ClipPlaneEnable, false); //d3dDevice.ClipPlanes[0].Enabled = false; // restoreamos el render target original d3dDevice.SetTransform(TransformType.World, store); d3dDevice.SetRenderTarget(0, bb); //d3dDevice.DepthStencilSurface = g_depthstencil; }
/// <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(); }