BabylonScene.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Runtime.Serialization;
  5. namespace BabylonExport.Entities
  6. {
  7. [DataContract]
  8. public class BabylonScene
  9. {
  10. [DataMember]
  11. public BabylonProducer producer { get; set; }
  12. [DataMember]
  13. public bool autoClear { get; set; }
  14. [DataMember]
  15. public float[] clearColor { get; set; }
  16. [DataMember]
  17. public float[] ambientColor { get; set; }
  18. [DataMember]
  19. public int fogMode { get; set; }
  20. [DataMember]
  21. public float[] fogColor { get; set; }
  22. [DataMember]
  23. public float fogStart { get; set; }
  24. [DataMember]
  25. public float fogEnd { get; set; }
  26. [DataMember]
  27. public float fogDensity { get; set; }
  28. [DataMember]
  29. public float[] gravity { get; set; }
  30. [DataMember]
  31. public string physicsEngine { get; set; }
  32. [DataMember]
  33. public bool physicsEnabled { get; set; }
  34. [DataMember]
  35. public float[] physicsGravity { get; set; }
  36. [DataMember]
  37. public BabylonCamera[] cameras { get; set; }
  38. [DataMember]
  39. public string activeCameraID { get; set; }
  40. [DataMember]
  41. public BabylonLight[] lights { get; set; }
  42. [DataMember]
  43. public BabylonMesh[] meshes { get; set; }
  44. [DataMember]
  45. public BabylonSound[] sounds { get; set; }
  46. [DataMember]
  47. public BabylonMaterial[] materials { get; set; }
  48. [DataMember]
  49. public BabylonMultiMaterial[] multiMaterials { get; set; }
  50. [DataMember]
  51. public BabylonParticleSystem[] particleSystems { get; set; }
  52. [DataMember]
  53. public BabylonLensFlareSystem[] lensFlareSystems { get; set; }
  54. [DataMember]
  55. public BabylonShadowGenerator[] shadowGenerators { get; set; }
  56. [DataMember]
  57. public BabylonSkeleton[] skeletons { get; set; }
  58. [DataMember]
  59. public BabylonActions actions { get; set; }
  60. [DataMember]
  61. public object metadata { get; set; }
  62. [DataMember]
  63. public bool workerCollisions { get; set; }
  64. public BabylonVector3 MaxVector { get; set; }
  65. public BabylonVector3 MinVector { get; set; }
  66. public string OutputPath { get; private set; }
  67. public List<BabylonMesh> MeshesList { get; private set; }
  68. public List<BabylonSound> SoundsList { get; private set; }
  69. public List<BabylonCamera> CamerasList { get; private set; }
  70. public List<BabylonLight> LightsList { get; private set; }
  71. public List<BabylonMaterial> MaterialsList { get; private set; }
  72. public List<BabylonMultiMaterial> MultiMaterialsList { get; private set; }
  73. public List<BabylonShadowGenerator> ShadowGeneratorsList { get; private set; }
  74. public List<BabylonSkeleton> SkeletonsList { get; private set; }
  75. readonly List<string> exportedTextures = new List<string>();
  76. public BabylonScene(string outputPath)
  77. {
  78. OutputPath = outputPath;
  79. MeshesList = new List<BabylonMesh>();
  80. MaterialsList = new List<BabylonMaterial>();
  81. CamerasList = new List<BabylonCamera>();
  82. LightsList = new List<BabylonLight>();
  83. MultiMaterialsList = new List<BabylonMultiMaterial>();
  84. ShadowGeneratorsList = new List<BabylonShadowGenerator>();
  85. SkeletonsList = new List<BabylonSkeleton>();
  86. SoundsList = new List<BabylonSound>();
  87. // Default values
  88. autoClear = true;
  89. clearColor = new[] { 0.2f, 0.2f, 0.3f };
  90. ambientColor = new[] { 0f, 0f, 0f };
  91. gravity = new[] { 0f, 0f, -0.9f };
  92. MaxVector = new BabylonVector3 { X = float.MinValue, Y = float.MinValue, Z = float.MinValue };
  93. MinVector = new BabylonVector3 { X = float.MaxValue, Y = float.MaxValue, Z = float.MaxValue };
  94. }
  95. public void Prepare(bool generateDefaultLight = true, bool generateDefaultCamera = true)
  96. {
  97. meshes = MeshesList.ToArray();
  98. sounds = SoundsList.ToArray();
  99. materials = MaterialsList.ToArray();
  100. multiMaterials = MultiMaterialsList.ToArray();
  101. shadowGenerators = ShadowGeneratorsList.ToArray();
  102. skeletons = SkeletonsList.ToArray();
  103. if (CamerasList.Count == 0 && generateDefaultCamera)
  104. {
  105. var camera = new BabylonCamera { name = "Default camera", id = Guid.NewGuid().ToString() };
  106. var distanceVector = MaxVector - MinVector;
  107. var midPoint = MinVector + distanceVector / 2;
  108. camera.target = midPoint.ToArray();
  109. camera.position = (midPoint + distanceVector).ToArray();
  110. var distance = distanceVector.Length();
  111. camera.speed = distance / 50.0f;
  112. camera.maxZ = distance * 4f;
  113. camera.minZ = distance < 100.0f ? 0.1f : 1.0f;
  114. CamerasList.Add(camera);
  115. }
  116. if (LightsList.Count == 0 && generateDefaultLight)
  117. {
  118. var light = new BabylonLight
  119. {
  120. name = "Default light",
  121. id = Guid.NewGuid().ToString(),
  122. type = 3,
  123. groundColor = new float[] {0, 0, 0},
  124. direction = new[] {0, 1.0f, 0},
  125. intensity = 1
  126. };
  127. LightsList.Add(light);
  128. }
  129. cameras = CamerasList.ToArray();
  130. lights = LightsList.ToArray();
  131. if (activeCameraID == null)
  132. {
  133. activeCameraID = CamerasList[0].id;
  134. }
  135. }
  136. public void AddTexture(string texture)
  137. {
  138. if (exportedTextures.Contains(texture))
  139. return;
  140. exportedTextures.Add(texture);
  141. File.Copy(texture, Path.Combine(OutputPath, Path.GetFileName(texture)), true);
  142. }
  143. public bool AddTextureCube(string textureName)
  144. {
  145. if (exportedTextures.Contains(textureName))
  146. return false;
  147. exportedTextures.Add(textureName);
  148. return true;
  149. }
  150. }
  151. }