BabylonExporter.Camera.cs 3.3 KB

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