示例#1
0
 public void RenderScene(bool shadow)
 {
     foreach (MyMesh T in scene.Meshes)
     {
         T.render();
     }
     patrulla.render();
 }
示例#2
0
        public /*override*/ void render(float elapsedTime, Personaje personaje, Vector3 llegada, Explosion explosion)
        {
            Device  device      = GuiController.Instance.D3dDevice;
            Control panel3d     = GuiController.Instance.Panel3d;
            float   aspectRatio = (float)panel3d.Width / (float)panel3d.Height;

            // if (GuiController.Instance.D3dInput.keyPressed(Microsoft.DirectX.DirectInput.Key.Space ))
            //    vista_unica = !vista_unica;

            Vector3 lightPosition = (Vector3)GuiController.Instance.Modifiers["LightPosition"];

            //Modifico parametros para que la luz gire en circulos

            /*cont = cont + elapsedTime * Geometry.DegreeToRadian(120.0f);
             * lightPosition.X = lightPosition.X + (10f * (float)Math.Cos(cont));
             * lightPosition.Y = lightPosition.Y + (10f * (float)Math.Sin(cont));
             * lightPosition.Z = lightPosition.Z + (50f * (float)Math.Sin(cont));*/

            effect.Technique = "DefaultTechnique";

            //Cargar variables de shader
            effect.SetValue("fvLightPosition", TgcParserUtils.vector3ToFloat3Array(lightPosition));
            //effect.SetValue("fvEyePosition", TgcParserUtils.vector3ToFloat3Array(GuiController.Instance.RotCamera.getPosition()));
            effect.SetValue("k_la", (float)GuiController.Instance.Modifiers["Ambient"]);
            effect.SetValue("k_ld", (float)GuiController.Instance.Modifiers["Diffuse"]);
            effect.SetValue("k_ls", (float)GuiController.Instance.Modifiers["Specular"]);
            //effect.SetValue("fvAmbient", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["AmbientColor"]));
            //effect.SetValue("fvDiffuse", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["DiffuseColor"]));
            //effect.SetValue("fvSpecular", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["SpecularColor"]));

            float distancia = FastMath.Pow2(personaje.getPersonaje().Position.X - llegada.X) +
                              FastMath.Pow2(personaje.getPersonaje().Position.Z - llegada.Z);

            distancia = FastMath.Sqrt(distancia);
            distancia = Convert.ToInt32(distancia);
            if (explosion.estaEjecutandose())
            {
                GuiController.Instance.Fog.Enabled = false;
            }
            else
            {
                if (distancia < DISNTANCIA_SIRENA)
                {
                    GuiController.Instance.Fog.Enabled = false;
                }
                else
                {
                    GuiController.Instance.Fog.Enabled = (bool)GuiController.Instance.Modifiers["Enabled"];
                }
            }
            GuiController.Instance.Fog.StartDistance = (float)GuiController.Instance.Modifiers["startDistance"];
            GuiController.Instance.Fog.EndDistance   = (float)GuiController.Instance.Modifiers["endDistance"];
            GuiController.Instance.Fog.Density       = (float)GuiController.Instance.Modifiers["density"];
            GuiController.Instance.Fog.Color         = (Color)GuiController.Instance.Modifiers["color"];
            //Actualizar valores de la Niebla
            GuiController.Instance.Fog.updateValues();

            //Cambio los valores del Specular Power de la luz, para simular el parpadeo de la sirena
            r = t % 10;
            if (r == 0)
            {
                effect.SetValue("fSpecularPower", (float)10);
            }
            else
            {
                effect.SetValue("fSpecularPower", (float)200);
            }
            if (t == 1000)
            {
                t = 0;
            }
            else
            {
                t = t + 1;
            }

            //Mover mesh que representa la luz
            //lightBox.Position = lightPosition;

            // solo una vista
            //device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            device.Viewport = ViewF;

            /*foreach (MyMesh m in scene.Meshes)
             * {
             *  if (m.Name != "escenarioPrueba")
             *  {
             *          m.effect = effect;
             *  }
             * m.render();*/
            patrulla.render();
            //lightBox.render();
            //}
        }