BabylonScene.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Runtime.Serialization;
  5. using SharpDX;
  6. namespace BabylonExport.Entities
  7. {
  8. [DataContract]
  9. public class BabylonScene
  10. {
  11. [DataMember]
  12. public bool autoClear { get; set; }
  13. [DataMember]
  14. public float[] clearColor { get; set; }
  15. [DataMember]
  16. public float[] ambientColor { get; set; }
  17. [DataMember]
  18. public int fogMode { get; set; }
  19. [DataMember]
  20. public float[] fogColor { get; set; }
  21. [DataMember]
  22. public float fogStart { get; set; }
  23. [DataMember]
  24. public float fogEnd { get; set; }
  25. [DataMember]
  26. public float fogDensity { get; set; }
  27. [DataMember]
  28. public float[] gravity { get; set; }
  29. [DataMember]
  30. public BabylonCamera[] cameras { get; set; }
  31. [DataMember]
  32. public string activeCameraID { get; set; }
  33. [DataMember]
  34. public BabylonLight[] lights { get; set; }
  35. [DataMember]
  36. public BabylonMesh[] meshes { get; set; }
  37. [DataMember]
  38. public BabylonMaterial[] materials { get; set; }
  39. [DataMember]
  40. public BabylonMultiMaterial[] multiMaterials { get; set; }
  41. [DataMember]
  42. public BabylonParticleSystem[] particleSystems { get; set; }
  43. [DataMember]
  44. public BabylonLensFlareSystem[] lensFlareSystems { get; set; }
  45. [DataMember]
  46. public BabylonShadowGenerator[] shadowGenerators { get; set; }
  47. [DataMember]
  48. public BabylonSkeleton[] skeletons { get; set; }
  49. public Vector3 MaxVector { get; set; }
  50. public Vector3 MinVector { get; set; }
  51. public string OutputPath { get; private set; }
  52. public List<BabylonMesh> MeshesList { get; private set; }
  53. public List<BabylonCamera> CamerasList { get; private set; }
  54. public List<BabylonLight> LightsList { get; private set; }
  55. public List<BabylonMaterial> MaterialsList { get; private set; }
  56. public List<BabylonMultiMaterial> MultiMaterialsList { get; private set; }
  57. public List<BabylonShadowGenerator> ShadowGeneratorsList { get; private set; }
  58. public List<BabylonSkeleton> SkeletonsList { get; private set; }
  59. readonly List<string> exportedTextures = new List<string>();
  60. public BabylonScene(string outputPath)
  61. {
  62. OutputPath = outputPath;
  63. MeshesList = new List<BabylonMesh>();
  64. MaterialsList = new List<BabylonMaterial>();
  65. CamerasList = new List<BabylonCamera>();
  66. LightsList = new List<BabylonLight>();
  67. MultiMaterialsList = new List<BabylonMultiMaterial>();
  68. ShadowGeneratorsList = new List<BabylonShadowGenerator>();
  69. SkeletonsList = new List<BabylonSkeleton>();
  70. // Default values
  71. autoClear = true;
  72. clearColor = new[] { 0.2f, 0.2f, 0.3f };
  73. ambientColor = new[] {0f, 0f, 0f };
  74. gravity = new[] {0f, 0f, -0.9f};
  75. }
  76. public void Prepare(bool generateDefaultLight = true)
  77. {
  78. meshes = MeshesList.ToArray();
  79. materials = MaterialsList.ToArray();
  80. multiMaterials = MultiMaterialsList.ToArray();
  81. shadowGenerators = ShadowGeneratorsList.ToArray();
  82. skeletons = SkeletonsList.ToArray();
  83. if (CamerasList.Count == 0)
  84. {
  85. var camera = new BabylonCamera {name = "Default camera", id = Guid.NewGuid().ToString()};
  86. var distanceVector = MaxVector - MinVector;
  87. var midPoint = MinVector +distanceVector / 2;
  88. camera.target = midPoint.ToArray();
  89. camera.position = (midPoint + distanceVector).ToArray();
  90. var distance = distanceVector.Length();
  91. camera.speed = distance/ 50.0f;
  92. camera.maxZ = distance * 4f;
  93. camera.minZ = distance < 100.0f ? 0.1f : 1.0f;
  94. CamerasList.Add(camera);
  95. }
  96. if (LightsList.Count == 0 && generateDefaultLight)
  97. {
  98. var light = new BabylonLight {name = "Default light", id = Guid.NewGuid().ToString()};
  99. var midPoint = MinVector + (MaxVector - MinVector) / 2;
  100. light.type = 0;
  101. light.position = (midPoint + (MaxVector - MinVector)).ToArray();
  102. light.diffuse = new Vector3(1, 1, 1).ToArray();
  103. light.specular = new Vector3(1, 1, 1).ToArray();
  104. LightsList.Add(light);
  105. }
  106. cameras = CamerasList.ToArray();
  107. lights = LightsList.ToArray();
  108. if (activeCameraID == null)
  109. {
  110. activeCameraID = CamerasList[0].id;
  111. }
  112. }
  113. public void AddTexture(string diffuseTexture)
  114. {
  115. if (exportedTextures.Contains(diffuseTexture))
  116. return;
  117. exportedTextures.Add(diffuseTexture);
  118. File.Copy(diffuseTexture, Path.Combine(OutputPath, Path.GetFileName(diffuseTexture)), true);
  119. }
  120. }
  121. }