// <param name="elapsedTime">Tiempo en segundos transcurridos desde el último frame</param> public override void render(float elapsedTime) { Device d3dDevice = GuiController.Instance.D3dDevice; axisRotation += AXIS_ROTATION_SPEED * elapsedTime; float camaraY = (float)GuiController.Instance.Modifiers["camaraY"]; float camaraZ = (float)GuiController.Instance.Modifiers["camaraZ"]; camaraTerceraPersona.CambiarCamara(camaraY, camaraZ); //Obtener valor de UserVar (hay que castear) int valor = (int)GuiController.Instance.UserVars.getValue("variablePrueba"); #region //Radio de la nave string filePath = (string)GuiController.Instance.Modifiers["MP3-File"]; LoadMp3(filePath); TgcMp3Player player = GuiController.Instance.Mp3Player; TgcMp3Player.States currentState = player.getStatus(); if (GuiController.Instance.D3dInput.keyPressed(Microsoft.DirectX.DirectInput.Key.Y)) { if (currentState == TgcMp3Player.States.Open) { //Reproducir MP3 player.play(true); } if (currentState == TgcMp3Player.States.Stopped) { //Parar y reproducir MP3 player.closeFile(); player.play(true); } } else if (GuiController.Instance.D3dInput.keyPressed(Microsoft.DirectX.DirectInput.Key.O)) { if (currentState == TgcMp3Player.States.Playing) { //Parar el MP3 player.stop(); } } #endregion //Cargamos el Render Targer al cual se va a dibujar la escena 3D. Antes nos guardamos el surface original //En vez de dibujar a la pantalla, dibujamos a un buffer auxiliar, nuestro Render Target. pOldRT = d3dDevice.GetRenderTarget(0); Surface pSurf = renderTarget2D.GetSurfaceLevel(0); d3dDevice.SetRenderTarget(0, pSurf); d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); //Dibujamos la escena comun, pero en vez de a la pantalla al Render Target drawSceneToRenderTarget(d3dDevice, elapsedTime); //Liberar memoria de surface de Render Target pSurf.Dispose(); //Si quisieramos ver que se dibujo, podemos guardar el resultado a una textura en un archivo para debugear su resultado (ojo, es lento) //TextureLoader.Save(GuiController.Instance.ExamplesMediaDir + "Shaders\\render_target.bmp", ImageFileFormat.Bmp, renderTarget2D); //Ahora volvemos a restaurar el Render Target original (osea dibujar a la pantalla) d3dDevice.SetRenderTarget(0, pOldRT); //Luego tomamos lo dibujado antes y lo combinamos con una textura con efecto de alarma drawPostProcess(d3dDevice); nave.Renderizar(elapsedTime, obstaculos); NaveEnemiga1.MoverHaciaObjetivo(elapsedTime, nave.Modelo.Position); NaveEnemiga1.Renderizar(elapsedTime, obstaculos); #region Detectar Colisiones ColisionNave(elapsedTime); ColisionDisparos(elapsedTime); #endregion sol.BoundingBox.transform(sol.Transform); sol.Transform = TransformarSol(elapsedTime); GuiController.Instance.ThirdPersonCamera.Target = nave.Modelo.Position; //Limpiamos todas las transformaciones con la Matrix identidad sol.render(); d3dDevice.Transform.World = Matrix.Identity; Universo.renderAll(); }