BabylonExporter.Camera.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. var wm = cameraNode.GetObjectTM(0);
  46. var position = wm.Translation;
  47. babylonCamera.position = new float[] { position.X, position.Y, position.Z };
  48. // Target
  49. var target = gameCamera.CameraTarget;
  50. if (target != null)
  51. {
  52. babylonCamera.lockedTargetId = target.MaxNode.GetGuid().ToString();
  53. }
  54. else
  55. {
  56. IPoint3 cameraTargetDist = Loader.Global.Point3.Create();
  57. gameCamera.CameraTargetDist.GetPropertyValue(cameraTargetDist, 0);
  58. var targetPos = position.Add(cameraTargetDist);
  59. babylonCamera.target = new float[] { targetPos.X, targetPos.Y, targetPos.Z };
  60. }
  61. // todo : handle animations
  62. //// Animations
  63. //var animations = new List<BabylonAnimation>();
  64. //cameraNode.IGameControl.
  65. //if (!ExportVector3Controller(cameraNode.TMController.PositionController, "position", animations))
  66. //{
  67. // ExportVector3Animation("position", animations, key =>
  68. // {
  69. // var worldMatrix = cameraNode.GetWorldMatrix(key, cameraNode.HasParent());
  70. // return worldMatrix.Trans.ToArraySwitched();
  71. // });
  72. //}
  73. //ExportFloatAnimation("fov", animations, key => new[] {Tools.ConvertFov(maxCamera.GetFOV(key, Tools.Forever))});
  74. //babylonCamera.animations = animations.ToArray();
  75. //if (cameraNode.GetBoolProperty("babylonjs_autoanimate"))
  76. //{
  77. // babylonCamera.autoAnimate = true;
  78. // babylonCamera.autoAnimateFrom = (int)cameraNode.GetFloatProperty("babylonjs_autoanimate_from");
  79. // babylonCamera.autoAnimateTo = (int)cameraNode.GetFloatProperty("babylonjs_autoanimate_to");
  80. // babylonCamera.autoAnimateLoop = cameraNode.GetBoolProperty("babylonjs_autoanimateloop");
  81. //}
  82. babylonScene.CamerasList.Add(babylonCamera);
  83. }
  84. }
  85. }