private void CreateObjectsFromModel(TgcMesh model, int count, Vector3 center, Vector3 scale, int sparse, float[] scalaVariableObjetos) { var rnd = new Random(); // TODO: buscar una mejor forma de tener una distribucion pareja var rows = (int)Math.Sqrt(count); var cols = (int)Math.Sqrt(count); float[] scalaRotacionObjetos = { FastMath.QUARTER_PI, FastMath.PI, FastMath.PI_HALF, FastMath.TWO_PI }; for (var i = 0; i < rows; i++) { for (var j = 0; j < cols; j++) { var instance = model.createMeshInstance(model.Name + i + "_" + j); instance.AutoTransformEnable = true; // Escalo el objeto en forma Random instance.Scale = scale * scalaVariableObjetos[rnd.Next(0, scalaVariableObjetos.Length)]; var x = center.X + rnd.Next(-sparse, sparse); var z = center.Z + rnd.Next(-sparse, sparse); // Posiciono el objeto en el Escenario instance.Position = new Vector3(x * SceneScaleXZ, CalcularAlturaTerreno(x, z) * SceneScaleY, z * SceneScaleXZ); instance.rotateY(scalaRotacionObjetos[rnd.Next(0, scalaRotacionObjetos.Length)]); instance.AlphaBlendEnable = true; instance.Enabled = true; // Lo guardo en una Lista de Objetos que están en el Escenario SceneMeshes.Add(instance); } } }
public void Dispose() { // Se libera el Terreno terrain.dispose(); mar.dispose(); laguna.dispose(); fogata.dispose(); emisorFuego.dispose(); // Se liberan los elementos de la escena foreach (var mesh in SceneMeshes) { mesh.dispose(); } foreach (var dest in Destroyables) { dest.Dispose(); } // Se libera Lista de Mesh SceneMeshes.Clear(); //Liberar recursos del SkyBox skyBoxGame[env.horaDelDia].dispose(); }