BabylonExporter.Camera.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Collections.Generic;
  2. using BabylonExport.Entities;
  3. using MaxSharp;
  4. namespace Max2Babylon
  5. {
  6. partial class BabylonExporter
  7. {
  8. private void ExportCamera(Node cameraNode, BabylonScene babylonScene)
  9. {
  10. if (cameraNode._Node.GetBoolProperty("babylonjs_noexport"))
  11. {
  12. return;
  13. }
  14. var maxCamera = (cameraNode.Object as Camera)._Camera;
  15. var babylonCamera = new BabylonCamera();
  16. RaiseMessage(cameraNode.Name, true);
  17. babylonCamera.name = cameraNode.Name;
  18. babylonCamera.id = cameraNode.GetGuid().ToString();
  19. if (cameraNode.HasParent())
  20. {
  21. babylonCamera.parentId = cameraNode.Parent.GetGuid().ToString();
  22. }
  23. babylonCamera.fov = Tools.ConvertFov(maxCamera.GetFOV(0, Interval.Forever._IInterval));
  24. babylonCamera.minZ = maxCamera.GetEnvRange(0, 0, Interval.Forever._IInterval);
  25. babylonCamera.maxZ = maxCamera.GetEnvRange(0, 1, Interval.Forever._IInterval);
  26. if (babylonCamera.minZ == 0.0f)
  27. {
  28. babylonCamera.minZ = 0.1f;
  29. }
  30. // Control
  31. babylonCamera.speed = cameraNode._Node.GetFloatProperty("babylonjs_speed");
  32. babylonCamera.inertia = cameraNode._Node.GetFloatProperty("babylonjs_inertia");
  33. // Collisions
  34. babylonCamera.checkCollisions = cameraNode._Node.GetBoolProperty("babylonjs_checkcollisions");
  35. babylonCamera.applyGravity = cameraNode._Node.GetBoolProperty("babylonjs_applygravity");
  36. babylonCamera.ellipsoid = cameraNode._Node.GetVector3Property("babylonjs_ellipsoid");
  37. // Position
  38. var wm = cameraNode.GetWorldMatrix(0, cameraNode.HasParent());
  39. var position = wm.Trans;
  40. babylonCamera.position = position.ToArraySwitched();
  41. // Target
  42. var target = cameraNode._Node.Target;
  43. if (target != null)
  44. {
  45. babylonCamera.lockedTargetId = target.GetGuid().ToString();
  46. }
  47. else
  48. {
  49. var dir = wm.GetRow(2).MultiplyBy(-1);
  50. babylonCamera.target = position.Add(dir).ToArraySwitched();
  51. }
  52. // Animations
  53. var animations = new List<BabylonAnimation>();
  54. if (!ExportVector3Controller(cameraNode._Node.TMController.PositionController, "position", animations))
  55. {
  56. ExportVector3Animation("position", animations, key =>
  57. {
  58. var worldMatrix = cameraNode.GetWorldMatrix(key, cameraNode.HasParent());
  59. return worldMatrix.Trans.ToArraySwitched();
  60. });
  61. }
  62. ExportFloatAnimation("fov", animations, key => new[] {Tools.ConvertFov(maxCamera.GetFOV(key, Interval.Forever._IInterval))});
  63. babylonCamera.animations = animations.ToArray();
  64. if (cameraNode._Node.GetBoolProperty("babylonjs_autoanimate"))
  65. {
  66. babylonCamera.autoAnimate = true;
  67. babylonCamera.autoAnimateFrom = (int)cameraNode._Node.GetFloatProperty("babylonjs_autoanimate_from");
  68. babylonCamera.autoAnimateTo = (int)cameraNode._Node.GetFloatProperty("babylonjs_autoanimate_to");
  69. babylonCamera.autoAnimateLoop = cameraNode._Node.GetBoolProperty("babylonjs_autoanimateloop");
  70. }
  71. babylonScene.CamerasList.Add(babylonCamera);
  72. }
  73. }
  74. }