BabylonExporter.Camera.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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(IINode cameraNode, BabylonScene babylonScene)
  9. {
  10. if (cameraNode.GetBoolProperty("babylonjs_noexport"))
  11. {
  12. return;
  13. }
  14. var maxCamera = (cameraNode.ObjectRef as ICameraObject);
  15. var babylonCamera = new BabylonCamera();
  16. RaiseMessage(cameraNode.Name, 1);
  17. babylonCamera.name = cameraNode.Name;
  18. babylonCamera.id = cameraNode.GetGuid().ToString();
  19. if (cameraNode.HasParent())
  20. {
  21. babylonCamera.parentId = cameraNode.ParentNode.GetGuid().ToString();
  22. }
  23. babylonCamera.fov = Tools.ConvertFov(maxCamera.GetFOV(0, Tools.Forever));
  24. if (maxCamera.ManualClip == 1)
  25. {
  26. babylonCamera.minZ = maxCamera.GetClipDist(0, 1, Tools.Forever);
  27. babylonCamera.maxZ = maxCamera.GetClipDist(0, 2, Tools.Forever);
  28. }
  29. else
  30. {
  31. babylonCamera.minZ = 0.1f;
  32. babylonCamera.maxZ = 10000.0f;
  33. }
  34. if (babylonCamera.minZ == 0.0f)
  35. {
  36. babylonCamera.minZ = 0.1f;
  37. }
  38. // Control
  39. babylonCamera.speed = cameraNode.GetFloatProperty("babylonjs_speed", 1.0f);
  40. babylonCamera.inertia = cameraNode.GetFloatProperty("babylonjs_inertia", 0.9f);
  41. // Collisions
  42. babylonCamera.checkCollisions = cameraNode.GetBoolProperty("babylonjs_checkcollisions");
  43. babylonCamera.applyGravity = cameraNode.GetBoolProperty("babylonjs_applygravity");
  44. babylonCamera.ellipsoid = cameraNode.GetVector3Property("babylonjs_ellipsoid");
  45. // Position
  46. var wm = cameraNode.GetWorldMatrix(0, cameraNode.HasParent());
  47. var position = wm.Trans;
  48. babylonCamera.position = position.ToArraySwitched();
  49. // Target
  50. var target = cameraNode.Target;
  51. if (target != null)
  52. {
  53. babylonCamera.lockedTargetId = target.GetGuid().ToString();
  54. }
  55. else
  56. {
  57. var dir = wm.GetRow(2).MultiplyBy(-1);
  58. babylonCamera.target = position.Add(dir).ToArraySwitched();
  59. }
  60. // Animations
  61. var animations = new List<BabylonAnimation>();
  62. if (!ExportVector3Controller(cameraNode.TMController.PositionController, "position", animations))
  63. {
  64. ExportVector3Animation("position", animations, key =>
  65. {
  66. var worldMatrix = cameraNode.GetWorldMatrix(key, cameraNode.HasParent());
  67. return worldMatrix.Trans.ToArraySwitched();
  68. });
  69. }
  70. ExportFloatAnimation("fov", animations, key => new[] {Tools.ConvertFov(maxCamera.GetFOV(key, Tools.Forever))});
  71. babylonCamera.animations = animations.ToArray();
  72. if (cameraNode.GetBoolProperty("babylonjs_autoanimate"))
  73. {
  74. babylonCamera.autoAnimate = true;
  75. babylonCamera.autoAnimateFrom = (int)cameraNode.GetFloatProperty("babylonjs_autoanimate_from");
  76. babylonCamera.autoAnimateTo = (int)cameraNode.GetFloatProperty("babylonjs_autoanimate_to");
  77. babylonCamera.autoAnimateLoop = cameraNode.GetBoolProperty("babylonjs_autoanimateloop");
  78. }
  79. babylonScene.CamerasList.Add(babylonCamera);
  80. }
  81. }
  82. }