コード例 #1
0
        /// <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;
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        /// <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();
        }