public void RenderScene(bool shadow) { foreach (MyMesh T in scene.Meshes) { T.render(); } patrulla.render(); }
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(); //} }