public void Render(TgcFrustum frustum) { Character.Render(); if (Character.IsInsideShip) { Ship.RenderIndoorShip(); } else { FogShader.SetValue("CameraPos", TGCVector3.TGCVector3ToFloat4Array(Camera.Position)); FogShader.SetValue("eyePosition", TGCVector3.TGCVector3ToFloat4Array(Camera.Position)); Ship.RenderOutdoorShip(); Skybox.Render(Terrain.SizeWorld()); Terrain.Render(); Shark.Render(); QuadTree.Render(frustum, false); Fishes.ForEach(fish => fish.Render()); Water.Render(); Bubble.Render(); } }
/// <summary> /// 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> public override void Render() { if (disposing) { return; } //ClearTextures(); var device = D3DDevice.Instance.Device; // Capturamos las texturas de pantalla Surface screenRenderTarget = device.GetRenderTarget(0); Surface screenDepthSurface = device.DepthStencilSurface; // Especificamos que vamos a dibujar en una textura device.SetRenderTarget(0, renderTarget.GetSurfaceLevel(0)); device.DepthStencilSurface = depthStencil; // Captura de escena en render target device.BeginScene(); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); bool flagFuera = true; if (estaEnAlgunMenu) { oceano.Render(); heightmap.Render(); foreach (var pez in peces) { if (IsInFrustum(pez.GetMesh())) { pez.Technique("RenderScene"); pez.Render(); } } if (IsInFrustum(shark.GetMesh())) { shark.Technique("RenderScene"); shark.Render(); } foreach (var coral in corales) { if (IsInFrustum(coral.GetMesh())) { coral.Technique("RenderScene"); coral.Render(); } } Particulas.Render(ElapsedTime); foreach (var piedra in piedras) { if (IsInFrustum(piedra.GetMesh())) { piedra.Render(); } } //Efecto metalico effect.SetValue("shininess", 30f); effect.SetValue("KSpecular", 1.0f); effect.SetValue("KAmbient", 1.0f); effect.SetValue("KDiffuse", 0.5f); if (IsInFrustum(nave.obtenerMeshes())) { nave.Technique("RenderSceneLight"); nave.Render(); } effect.SetValue("shininess", 10f); effect.SetValue("KSpecular", 1.1f); effect.SetValue("KAmbient", 1.2f); effect.SetValue("KDiffuse", 0.25f); foreach (var metal in metales) { if (IsInFrustum(metal.GetMesh())) { metal.Technique("RenderSceneLight"); metal.Render(); } } Oceano.Render(); Player.Render(); } if (!estaEnAlgunMenu) { if (estaEnNave) { efectoInterior.SetValue("shininess", 1f); efectoInterior.SetValue("KSpecular", 0.1f); efectoInterior.SetValue("KAmbient", 3.0f); efectoInterior.SetValue("KDiffuse", 0f); interiorNave.Render(); // constantes de iluminacion de la mesa efectoInterior.SetValue("shininess", 1f); efectoInterior.SetValue("KSpecular", 0.2f); efectoInterior.SetValue("KAmbient", 3.0f); efectoInterior.SetValue("KDiffuse", 0.1f); mesaNave.Render(); // es el mismo material (madera) mantengo las mismas constantes sillaInterior.Render(); timonInterior.Render(); // constantes de iluminacion de la soga efectoInterior.SetValue("shininess", 1f); efectoInterior.SetValue("KSpecular", 0.15f); efectoInterior.SetValue("KAmbient", 2.0f); efectoInterior.SetValue("KDiffuse", 0f); sogaInterior.Render(); efectoInterior.SetValue("shininess", 5.0f); efectoInterior.SetValue("KSpecular", 2.5f); efectoInterior.SetValue("KAmbient", 5.0f); efectoInterior.SetValue("KDiffuse", 0f); lamparaNave.Render(); if (Player.Instance().puedoEnfrentarTiburon()) { // renderizo arma arma.Effect(effect); arma.Technique("RenderScene"); arma.Render(); } } else { flagFuera = false; oceano.Render(); heightmap.Render(); foreach (var pez in peces) { if (IsInFrustum(pez.GetMesh())) { pez.Technique("RenderScene"); pez.Render(); } } foreach (var coral in corales) { if (IsInFrustum(coral.GetMesh())) { coral.Technique("RenderScene"); coral.Render(); } } foreach (var piedra in piedras) { if (IsInFrustum(piedra.GetMesh())) { piedra.Technique("RenderScene"); piedra.Render(); } } if (IsInFrustum(shark.GetMesh())) { shark.Technique("RenderScene"); shark.Render(); } Particulas.Render(ElapsedTime); //Efecto metalico effect.SetValue("shininess", 30f); effect.SetValue("KSpecular", 1.0f); effect.SetValue("KAmbient", 1.0f); effect.SetValue("KDiffuse", 0.5f); if (IsInFrustum(nave.obtenerMeshes())) { nave.Technique("RenderSceneLight"); nave.Render(); } effect.SetValue("shininess", 10f); effect.SetValue("KSpecular", 1.1f); effect.SetValue("KAmbient", 1.2f); effect.SetValue("KDiffuse", 0.25f); foreach (var metal in metales) { if (IsInFrustum(metal.GetMesh())) { metal.Technique("RenderSceneLight"); metal.Render(); } } if (Player.Instance().puedoEnfrentarTiburon()) { // renderizo arma arma.Effect(effect); arma.Technique("RenderScene"); arma.Render(); } Oceano.Render(); } Player.Render(); } device.EndScene(); if (!flagFuera || estaEnAlgunMenu) { device.SetRenderTarget(0, coralesBrillantes.GetSurfaceLevel(0)); device.DepthStencilSurface = depthStencil; device.BeginScene(); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); // dibujo 15 corales con luz int j = 0; //todo: poner 10 while (j < 25) { if (IsInFrustum(corales[j].GetMesh())) { corales[j].Technique("Bloom"); corales[j].Render(); } j++; } foreach (var pez in peces) { if (IsInFrustum(pez.GetMesh())) { pez.Technique("BloomMask"); pez.Render(); } } if (shark.estoyVivo() && IsInFrustum(shark.GetMesh())) { shark.Technique("BloomMask"); shark.Render(); } if (IsInFrustum(nave.obtenerMeshes())) { nave.Technique("BloomMask"); nave.Render(); } foreach (var metal in metales) { if (IsInFrustum(metal.GetMesh())) { metal.Technique("BloomMask"); metal.Render(); } } foreach (var piedra in piedras) { if (IsInFrustum(piedra.GetMesh())) { piedra.Technique("BloomMask"); piedra.Render(); } } if (Player.Instance().puedoEnfrentarTiburon()) { // renderizo arma arma.Effect(effect); arma.Technique("BloomMask"); arma.Render(); } device.EndScene(); // aplico pasada de blur horizontal y vertical al FB de los corales q brillan var bufferPasada = coralesBrillantes; for (int index = 0; index < 4; index++) { device.SetRenderTarget(0, FBHorizontalBool.GetSurfaceLevel(0)); device.DepthStencilSurface = depthStencil; device.BeginScene(); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); effect.Technique = "BlurHorizontal"; device.VertexFormat = CustomVertex.PositionTextured.Format; device.SetStreamSource(0, fullScreenQuad, 0); effect.SetValue("fBCoralesBrillantes", bufferPasada); effect.Begin(FX.None); effect.BeginPass(0); device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); effect.EndPass(); effect.End(); device.EndScene(); device.SetRenderTarget(0, FBVerticalBloom.GetSurfaceLevel(0)); device.DepthStencilSurface = depthStencil; device.BeginScene(); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); effect.Technique = "BlurVertical"; device.VertexFormat = CustomVertex.PositionTextured.Format; device.SetStreamSource(0, fullScreenQuad, 0); effect.SetValue("fBCoralesBrillantes", FBHorizontalBool); effect.Begin(FX.None); effect.BeginPass(0); device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); effect.EndPass(); effect.End(); device.EndScene(); bufferPasada = FBVerticalBloom; } } // Especificamos que vamos a dibujar en pantalla device.SetRenderTarget(0, screenRenderTarget); device.DepthStencilSurface = screenDepthSurface; device.BeginScene(); device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); if (estaEnAlgunMenu) { effect.Technique = "PostProcessMenu"; } else if (flagFuera) { effect.Technique = "PostProcess"; } else { effect.Technique = "PostProcessMar"; } device.VertexFormat = CustomVertex.PositionTextured.Format; device.SetStreamSource(0, fullScreenQuad, 0); effect.SetValue("sceneFrameBuffer", renderTarget); effect.SetValue("verticalBlurFrameBuffer", FBVerticalBloom); // Dibujamos el full screen quad effect.Begin(FX.None); effect.BeginPass(0); device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); effect.EndPass(); effect.End(); Hud.Render(); RenderFPS(); RenderAxis(); device.EndScene(); device.Present(); }
public void Render() { if (ShowHelp) { InstructionText.Render(); } else { HelpText.Render(); } if (!ActiveInventory) { if (ShowSharkLife) { Shark.Render(); } Character.Render(); Pointer.Render(); if (ShowInfoExitShip) { ShipText.Text = Constants.SHIP_EXIT_TEXT; ShipText.Render(); } if (ShowInfoEnterShip) { ShipText.Text = Constants.SHIP_ENTER_TEXT; ShipText.Render(); } if (NearObjectForSelect) { CollectText.Render(); } if (ShowInfoItemCollect) { var index = 0; ItemHistory.ForEach(item => { index++; ItemsHistoryText.Text = "COLLECTED " + item + " + 1"; ItemsHistoryText.Position = new TGCVector2(Constants.COLLECT_TEXT_POSITION.X, Constants.COLLECT_TEXT_POSITION.Y + index * 20); ItemsHistoryText.Render(); }); } if (ShowIndicatorShip) { ShipLocationIndicator.Render(); DistanceShipLocation.Text = DistanceWithShip.ToString(); DistanceShipLocation.Render(); } } else { if (CanCraft) { Crafting.Render(); } else { Inventory.Render(); if (ActiveWeapon) { Crafting.RenderItemWeapon(); } } RenderMousePointer(); } }