Example #1
0
        private void drawSceneToRenderTarget(Microsoft.DirectX.Direct3D.Device d3dDevice, float elapsedTime)
        {
            //Arrancamos el renderizado. Esto lo tenemos que hacer nosotros a mano porque estamos en modo CustomRenderEnabled = true
            d3dDevice.BeginScene();

            //Como estamos en modo CustomRenderEnabled, tenemos que dibujar todo nosotros, incluso el contador de FPS
            GuiController.Instance.Text3d.drawText("FPS: " + HighResolutionTimer.Instance.FramesPerSecond, 0, 60, Color.Yellow);
            //GuiController.Instance.Text3d.drawText(GuiController.Instance.Shaders.getTgcMeshTechnique(barcoPrincipal.Mesh.RenderType), 200, 200, Color.Black);
            //GuiController.Instance.Text3d.drawText("Posicion Z:" + barcoPrincipal.Mesh.Position.Z, 250, 250, Color.Black);

            //Tambien hay que dibujar el indicador de los ejes cartesianos
            GuiController.Instance.AxisLines.render();

            GuiController.Instance.Drawer2D.beginDrawSprite();

            if (terminoJuego)
            {
                spriteTermino.render();
            }

            if (barcoPrincipal.Vida > 0)
            {
                sprVidaLLena.Scaling = new Vector2(barcoPrincipal.Vida/150f, 1);
                sprVidaLLena.render();
            }
            Size screenSize = GuiController.Instance.Panel3d.Size;

            spriteMinimapa.RotationCenter = new Vector2(103f , 103f );
            spriteMinimapa.Rotation += elapsedTime * 3.14159f;
             spriteMinimapa.render();

            //spritesBarcosBot = new List<TgcSprite>();
            float centroMapaX = spriteMinimapa.Position.X+105f;
            float centroMapaY = spriteMinimapa.Position.Y+95f;
            foreach (Barco barco in enemigos)
            {
                if (barco.Vida > 0)
                {
                    TgcSprite spritebarco = new TgcSprite();
                    spritebarco.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "quicksort\\buttonred.png");
                    spritebarco.Position = new Vector2(centroMapaX + barco.Mesh.Position.X / 35, centroMapaY + barco.Mesh.Position.Z / 35);
                    spritebarco.Scaling = new Vector2(0.08f, 0.08f);
                    spritebarco.render();
                }
                //spritesBarcosBot.Add(spritebarco);
            }

            float ratioW = spriteMinimapa.Texture.Size.Width / screenSize.Width;
            float ratioH = spriteMinimapa.Texture.Size.Height / screenSize.Height;

            spriteBarcoPrincipal.Position = new Vector2(centroMapaX + barcoPrincipal.Mesh.Position.X / 35, centroMapaY + barcoPrincipal.Mesh.Position.Z / 35);
            spriteBarcoPrincipal.render();

            sprBarraVida.render();

            GuiController.Instance.Drawer2D.endDrawSprite();
            //Viejo render aqui ///
            /*
              //Obtener valor de UserVar (hay que castear)
              int valor = (int)GuiController.Instance.UserVars.getValue("variablePrueba");

              //Obtener valores de Modifiers
              float valorFloat = (float)GuiController.Instance.Modifiers["valorFloat"];
              string opcionElegida = (string)GuiController.Instance.Modifiers["valorIntervalo"];
              Vector3 valorVertice = (Vector3)GuiController.Instance.Modifiers["valorVertice"];
              */
            alfa_sol = 1.5f;
            g_LightPos = new Vector3(2000f * (float)Math.Cos(alfa_sol), 2000f * (float)Math.Sin(alfa_sol), 0f);
            g_LightDir = -g_LightPos;
            g_LightDir.Normalize();

            //Actualzar posición de la luz
            Vector3 lightPos = new Vector3(-300, 1500, 3000);
            //sol.Position = lightPos;
            Vector3 eyePosition = GuiController.Instance.ThirdPersonCamera.getPosition();

            if (g_pCubeMapAgua != null)
            {
                //CrearEnvMapAgua();
                efectosAguaIluminacion.SetValue("g_txCubeMapAgua", g_pCubeMapAgua);
                efectosAguaIluminacion.SetValue("texCubeMap", g_pCubeMapAgua);
            }

            efectosAguaIluminacion.SetValue("g_vLightPos", new Vector4(g_LightPos.X, g_LightPos.Y, g_LightPos.Z, 1));
            efectosAguaIluminacion.SetValue("g_vLightDir", new Vector4(g_LightDir.X, g_LightDir.Y, g_LightDir.Z, 1));
            g_LightView = Matrix.LookAtLH(g_LightPos, g_LightPos + g_LightDir, new Vector3(0, 0, 1));
            efectosAguaIluminacion.SetValue("g_mViewLightProj", g_LightView);
            efectosAguaIluminacion.SetValue("time", time);
            efectosAguaIluminacion.SetValue("aux_Tex", textura);
            efectosAguaIluminacion.SetValue("texDiffuseMap", diffuseMapTexture);

            efectosAguaIluminacion.SetValue("lightColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["lightColor"]));
            efectosAguaIluminacion.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos));
            if (!activar_efecto)
            {
                efectosAguaIluminacion.SetValue("lightIntensity", (float)GuiController.Instance.Modifiers["lightIntensity"]);

            }
            else
            {
                efectosAguaIluminacion.SetValue("lightIntensity", 75f);

            }
            efectosAguaIluminacion.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(eyePosition));
            //barcoPrincipal.Mesh.Effect.SetValue("bumpiness", (float)GuiController.Instance.Modifiers["bumpiness"]);
            efectosAguaIluminacion.SetValue("lightAttenuation", (float)GuiController.Instance.Modifiers["lightAttenuation"]);
            //barcoPrincipal.Mesh.Effect.SetValue("reflection", (float)GuiController.Instance.Modifiers["reflection"]);
            efectosAguaIluminacion.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(GuiController.Instance.ThirdPersonCamera.getPosition()));
            efectosAguaIluminacion.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos));

            //cd relampago + Xf es
             var rnd = new Random();
             if (!relampagoOn)
             {
                 if (cooldownRelampago + rnd.Next(2, 4) < time)
                 {

                     effectlluvia.SetValue("relampagoOn", true);
                     cooldownRelampago = time;
                     relampagoOn = true;
                 }
                 else
                 {
                     effectlluvia.SetValue("relampagoOn", false);
                 }
             }
             else {
                 if (cooldownRelampago + ((float)rnd.Next(4, 7))/20 < time)
                 {

                     effectlluvia.SetValue("relampagoOn", true);
                     relampagoOn = false;
                 }
                 else
                 {
                     effectlluvia.SetValue("relampagoOn", false);
                 }
             }

            efectosAguaIluminacion.SetValue("materialEmissiveColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mEmissive"]));
            efectosAguaIluminacion.SetValue("materialAmbientColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mAmbient"]));
            efectosAguaIluminacion.SetValue("materialDiffuseColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mDiffuse"]));
            efectosAguaIluminacion.SetValue("materialSpecularColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mSpecular"]));
            efectosAguaIluminacion.SetValue("materialSpecularExp", (float)GuiController.Instance.Modifiers["specularEx"]);

            //Hacer que la camara siga al personaje en su nueva posicion

            GuiController.Instance.ThirdPersonCamera.Target = barcoPrincipal.Mesh.Position;

            oceano.render();
            //Dibujar objeto principal
            //Siempre primero hacer todos los cálculos de lógica e input y luego al final dibujar todo (ciclo update-render)
            barcoPrincipal.colocarAltura(time);
            foreach (BarcoBot barcoEnem in enemigos)
            {
                barcoEnem.colocarAltura(time);
            }
            if (barcoPrincipal.Vida > 0)
            {
                barcoPrincipal.Movimiento(elapsedTime);
            }
            else
            {
                barcoPrincipal.hundir(elapsedTime);
                terminoJuego = true;
            }
            foreach (BarcoBot barcoenem in enemigos)
            {
                if (barcoenem.Vida > 0)
                {
                    barcoenem.Movimiento(elapsedTime);
                }
                else
                {
                    barcoenem.hundir(elapsedTime);
                }
            }

            barcoPrincipal.Mesh.Effect.SetValue("lightColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["lightColor"]));
            barcoPrincipal.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos));
            barcoPrincipal.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(eyePosition));
            barcoPrincipal.Mesh.Effect.SetValue("lightIntensity", (float)GuiController.Instance.Modifiers["lightIntensity"]);
            //barcoPrincipal.Mesh.Effect.SetValue("bumpiness", (float)GuiController.Instance.Modifiers["bumpiness"]);
            barcoPrincipal.Mesh.Effect.SetValue("lightAttenuation", (float)GuiController.Instance.Modifiers["lightAttenuation"]);
            //barcoPrincipal.Mesh.Effect.SetValue("reflection", (float)GuiController.Instance.Modifiers["reflection"]);
            barcoPrincipal.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(GuiController.Instance.ThirdPersonCamera.getPosition()));
            barcoPrincipal.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos));

            barcoPrincipal.Mesh.Effect.SetValue("materialEmissiveColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mEmissive"]));
            barcoPrincipal.Mesh.Effect.SetValue("materialAmbientColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mAmbient"]));
            barcoPrincipal.Mesh.Effect.SetValue("materialDiffuseColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mDiffuse"]));
            barcoPrincipal.Mesh.Effect.SetValue("materialSpecularColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mSpecular"]));
            barcoPrincipal.Mesh.Effect.SetValue("materialSpecularExp", (float)GuiController.Instance.Modifiers["specularEx"]);
            barcoPrincipal.Mesh.Effect.SetValue("daniado", barcoPrincipal.daniado ? 1 : 0);
            barcoPrincipal.Mesh.Effect.SetValue("time", time);
            barcoPrincipal.Mesh.Effect.SetValue("terminoJuego", terminoJuego);
            barcoPrincipal.Mesh.render();
            if (barcoPrincipal.timerDaniado != null)
            {
                if (barcoPrincipal.timerDaniado.ElapsedMilliseconds >= 2000)
                {
                    barcoPrincipal.daniado = false;
                }
            }

            foreach (BarcoBot barcoEnem in enemigos)
            {
                barcoEnem.Mesh.Effect.SetValue("lightColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["lightColor"]));
                barcoEnem.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos));

                barcoEnem.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(eyePosition));
                barcoEnem.Mesh.Effect.SetValue("lightIntensity", (float)GuiController.Instance.Modifiers["lightIntensity"]);
                barcoEnem.Mesh.Effect.SetValue("lightAttenuation", (float)GuiController.Instance.Modifiers["lightAttenuation"]);

                barcoEnem.Mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(GuiController.Instance.ThirdPersonCamera.getPosition()));
                barcoEnem.Mesh.Effect.SetValue("lightPosition", TgcParserUtils.vector3ToFloat4Array(lightPos));

                barcoEnem.Mesh.Effect.SetValue("materialEmissiveColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mEmissive"]));
                barcoEnem.Mesh.Effect.SetValue("materialAmbientColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mAmbient"]));
                barcoEnem.Mesh.Effect.SetValue("materialDiffuseColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mDiffuse"]));
                barcoEnem.Mesh.Effect.SetValue("materialSpecularColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["mSpecular"]));
                barcoEnem.Mesh.Effect.SetValue("materialSpecularExp", (float)GuiController.Instance.Modifiers["specularEx"]);
                barcoEnem.Mesh.Effect.SetValue("time", time);
                barcoEnem.Mesh.Effect.SetValue("terminoJuego", false);
                if (barcoEnem.daniado)
                {
                    barcoEnem.Mesh.Effect.SetValue("daniado", 1);
                }
                else
                {
                    barcoEnem.Mesh.Effect.SetValue("daniado", 0);
                }

                barcoEnem.Mesh.render();
                barcoEnem.volverAltura(time);
                if (barcoEnem.timerDaniado != null)
                {
                    if (barcoEnem.timerDaniado.ElapsedMilliseconds >= 2000)
                    {
                        barcoEnem.daniado = false;
                    }
                }

            }
            barcoPrincipal.volverAltura(time);

            foreach (var bala in barcoPrincipal.balas)
            {
                if (bala.Mesh.Position.Y > 0)
                {
                    bala.Mover(elapsedTime);
                    bala.Mesh.render();

                }
            }

            foreach (BarcoBot barco in enemigos)
            {
                foreach (var bala in barco.balas)
                {
                    if (bala.Mesh.Position.Y > 0)
                    {
                        if (!bala.col)
                        {
                            bala.Mover(elapsedTime);
                            bala.Mesh.render();
                        }
                    }
                }
            }

            //sol.render();
            skyBox.render();

            //Terminamos manualmente el renderizado de esta escena. Esto manda todo a dibujar al GPU al Render Target que cargamos antes
            d3dDevice.EndScene();
        }
Example #2
0
        private void drawPostProcess(Microsoft.DirectX.Direct3D.Device d3dDevice)
        {
            //Arrancamos la escena
            d3dDevice.BeginScene();

            //Cargamos para renderizar el unico modelo que tenemos, un Quad que ocupa toda la pantalla, con la textura de todo lo dibujado antes
            d3dDevice.VertexFormat = CustomVertex.PositionTextured.Format;
            d3dDevice.SetStreamSource(0, screenQuadVB, 0);

            //Ver si el efecto de alarma esta activado, configurar Technique del shader segun corresponda

            if (activar_efecto)
            {
                effectlluvia.Technique = "AlarmaTechnique";
                //sol.Position = new Vector3(0f, 1950f, 3000f);
            }
            else
            {
                effectlluvia.Technique = "DefaultTechnique";
            }

            //Cargamos parametros en el shader de Post-Procesado
            effectlluvia.SetValue("render_target2D", renderTarget2D);
            effectlluvia.SetValue("textura_alarma", alarmTexture.D3dTexture);
            effectlluvia.SetValue("alarmaScaleFactor", intVaivenAlarm.update());
            effectlluvia.SetValue("time", time);

            //Limiamos la pantalla y ejecutamos el render del shader
            d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            effectlluvia.Begin(FX.None);
            effectlluvia.BeginPass(0);
            d3dDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            effectlluvia.EndPass();
            effectlluvia.End();

            //Terminamos el renderizado de la escena
            d3dDevice.EndScene();
        }