/// <summary> /// Se llama cuando termina la ejecución del ejemplo. /// Hacer Dispose() de todos los objetos creados. /// Es muy importante liberar los recursos, sobretodo los gráficos ya que quedan bloqueados en el device de video. /// </summary> public override void Dispose() { //Dispose de la caja. MeshDelObj.Dispose(); //Dispose del mesh. Mesh.Dispose(); }
/// <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() { //Inicio el render de la escena, para ejemplos simples. Cuando tenemos postprocesado o shaders es mejor realizar las operaciones según nuestra conveniencia. PreRender(); //Dibuja un texto por pantalla DrawText.drawText("Con la tecla F se dibuja el bounding box.", 0, 20, Color.OrangeRed); DrawText.drawText("Con clic izquierdo subimos la camara [Actual]: " + TGCVector3.PrintVector3(Camara.Position), 0, 30, Color.OrangeRed); //Siempre antes de renderizar el modelo necesitamos actualizar la matriz de transformacion. //Debemos recordar el orden en cual debemos multiplicar las matrices, en caso de tener modelos jerárquicos, tenemos control total. // Box.Transform = Matrix.Scaling(Box.Scale) * // Matrix.RotationYawPitchRoll(Box.Rotation.Y, Box.Rotation.X, Box.Rotation.Z) * // Matrix.Translation(Box.Position); //A modo ejemplo realizamos toda las multiplicaciones, pero aquí solo nos hacia falta la traslación. //Finalmente invocamos al render de la caja // Box.render(); // myBox.render(); //Cuando tenemos modelos mesh podemos utilizar un método que hace la matriz de transformación estándar. //Es útil cuando tenemos transformaciones simples, pero OJO cuando tenemos transformaciones jerárquicas o complicadas. // Mesh.UpdateMeshTransform(); //Render del mesh // Mesh.render(); // myBoxTgcMesh.render(); /* MeshDelObj.Transform = Matrix.Scaling(MeshDelObj.Scale) * Matrix.RotationYawPitchRoll(MeshDelObj.Rotation.Y, MeshDelObj.Rotation.X, MeshDelObj.Rotation.Z) * Matrix.Translation(MeshDelObj.Position); * MeshDelObj.UpdateMeshTransform(); */ MeshDelObj.Render(); //Render de BoundingBox, muy útil para debug de colisiones. if (BoundingBox) { Box.BoundingBox.Render(); Mesh.BoundingBox.Render(); MeshDelObj.Render(); } //Finaliza el render y presenta en pantalla, al igual que el preRender se debe para casos puntuales es mejor utilizar a mano las operaciones de EndScene y PresentScene PostRender(); }