BabylonExporter.Camera.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System.Collections.Generic;
  2. using Autodesk.Max;
  3. using BabylonExport.Entities;
  4. namespace Max2Babylon
  5. {
  6. partial class BabylonExporter
  7. {
  8. private void ExportCamera(IIGameNode cameraNode, BabylonScene babylonScene)
  9. {
  10. if (cameraNode.MaxNode.GetBoolProperty("babylonjs_noexport"))
  11. {
  12. return;
  13. }
  14. var gameCamera = cameraNode.IGameObject.AsGameCamera();
  15. var initialized = gameCamera.InitializeData;
  16. var babylonCamera = new BabylonCamera();
  17. RaiseMessage(cameraNode.Name, 1);
  18. babylonCamera.name = cameraNode.Name;
  19. babylonCamera.id = cameraNode.MaxNode.GetGuid().ToString();
  20. if (cameraNode.NodeParent != null)
  21. {
  22. babylonCamera.parentId = cameraNode.NodeParent.MaxNode.GetGuid().ToString();
  23. }
  24. float fov = 0;
  25. gameCamera.CameraFOV.GetPropertyValue(ref fov, 0, false);
  26. babylonCamera.fov = fov;
  27. float minZ = 0;
  28. gameCamera.CameraNearClip.GetPropertyValue(ref minZ, 0, false);
  29. babylonCamera.minZ = minZ;
  30. float maxZ = 0;
  31. gameCamera.CameraFarClip.GetPropertyValue(ref maxZ, 0, false);
  32. babylonCamera.maxZ = maxZ;
  33. if (babylonCamera.minZ == 0.0f)
  34. {
  35. babylonCamera.minZ = 0.1f;
  36. }
  37. // Control
  38. babylonCamera.speed = cameraNode.MaxNode.GetFloatProperty("babylonjs_speed", 1.0f);
  39. babylonCamera.inertia = cameraNode.MaxNode.GetFloatProperty("babylonjs_inertia", 0.9f);
  40. // Collisions
  41. babylonCamera.checkCollisions = cameraNode.MaxNode.GetBoolProperty("babylonjs_checkcollisions");
  42. babylonCamera.applyGravity = cameraNode.MaxNode.GetBoolProperty("babylonjs_applygravity");
  43. babylonCamera.ellipsoid = cameraNode.MaxNode.GetVector3Property("babylonjs_ellipsoid");
  44. // Position
  45. {
  46. var wm = cameraNode.GetLocalTM(0);
  47. var position = wm.Translation;
  48. babylonCamera.position = new float[] { position.X, position.Y, position.Z };
  49. // Target
  50. var target = gameCamera.CameraTarget;
  51. if (target != null)
  52. {
  53. babylonCamera.lockedTargetId = target.MaxNode.GetGuid().ToString();
  54. }
  55. else
  56. {
  57. var dir = wm.GetRow(3);
  58. babylonCamera.target = new float[] { position.X - dir.X, position.Y - dir.Y, position.Z - dir.Z };
  59. }
  60. }
  61. // Animations
  62. var animations = new List<BabylonAnimation>();
  63. //if (!ExportVector3Controller(cameraNode.TMController.PositionController, "position", animations))
  64. //{
  65. ExportVector3Animation("position", animations, key =>
  66. {
  67. var wm = cameraNode.GetLocalTM(key);
  68. var position = wm.Translation;
  69. return new float[] { position.X, position.Y, position.Z };
  70. });
  71. //}
  72. if (gameCamera.CameraTarget == null)
  73. {
  74. ExportVector3Animation("target", animations, key =>
  75. {
  76. var wm = cameraNode.GetLocalTM(key);
  77. var position = wm.Translation;
  78. var dir = wm.GetRow(3);
  79. return new float[] { position.X - dir.X, position.Y - dir.Y, position.Z - dir.Z };
  80. });
  81. }
  82. ExportFloatAnimation("fov", animations, key => new[] { Tools.ConvertFov((gameCamera.MaxObject as ICameraObject).GetFOV(key, Tools.Forever)) });
  83. babylonCamera.animations = animations.ToArray();
  84. if (cameraNode.MaxNode.GetBoolProperty("babylonjs_autoanimate"))
  85. {
  86. babylonCamera.autoAnimate = true;
  87. babylonCamera.autoAnimateFrom = (int)cameraNode.MaxNode.GetFloatProperty("babylonjs_autoanimate_from");
  88. babylonCamera.autoAnimateTo = (int)cameraNode.MaxNode.GetFloatProperty("babylonjs_autoanimate_to");
  89. babylonCamera.autoAnimateLoop = cameraNode.MaxNode.GetBoolProperty("babylonjs_autoanimateloop");
  90. }
  91. babylonScene.CamerasList.Add(babylonCamera);
  92. }
  93. }
  94. }