Jelajahi Sumber

Fix gltf rotation conversion from Vector3 to Quaternion

noalak 8 tahun lalu
induk
melakukan
2ddb0aeec2

+ 5 - 0
Exporters/3ds Max/BabylonExport.Entities/BabylonQuaternion.cs

@@ -50,5 +50,10 @@ namespace BabylonExport.Entities
 
             return result;
         }
+
+        public override string ToString()
+        {
+            return "{ X=" + X + ", Y=" + Y + ", Z=" + Z + ", W=" + W + " }";
+        }
     }
 }

+ 7 - 9
Exporters/3ds Max/BabylonExport.Entities/BabylonVector3.cs

@@ -38,16 +38,9 @@ namespace BabylonExport.Entities
             return new BabylonVector3 { X = a.X * b, Y = a.Y * b, Z = a.Z * b };
         }
 
-        public BabylonQuaternion toQuaternionGltf()
+        public BabylonQuaternion toQuaternion()
         {
-            BabylonQuaternion babylonQuaternion = RotationYawPitchRollToRefBabylon(X, -Y, -Z);
-            // Doing following computation is ugly but works
-            // The goal is to switch from left to right handed coordinate system
-            // Swap X and Y
-            var tmp = babylonQuaternion.X;
-            babylonQuaternion.X = babylonQuaternion.Y;
-            babylonQuaternion.Y = tmp;
-            return babylonQuaternion;
+            return RotationYawPitchRollToRefBabylon(Y, X, Z);
         }
 
         /**
@@ -75,5 +68,10 @@ namespace BabylonExport.Entities
             result.W = (float)((cosYaw * cosPitch * cosRoll) + (sinYaw * sinPitch * sinRoll));
             return result;
         }
+
+        public override string ToString()
+        {
+            return "{ X=" + X + ", Y=" + Y + ", Z=" + Z + " }";
+        }
     }
 }

+ 1 - 1
Exporters/3ds Max/Max2Babylon/2017/Exporter/BabylonExporter.GLTFExporter.AbstractMesh.cs

@@ -47,7 +47,7 @@ namespace Max2Babylon
                     Y = babylonAbstractMesh.rotation[1],
                     Z = babylonAbstractMesh.rotation[2]
                 };
-                gltfNode.rotation = rotationVector3.toQuaternionGltf().ToArray();
+                gltfNode.rotation = rotationVector3.toQuaternion().ToArray();
             }
             gltfNode.scale = babylonAbstractMesh.scaling;
 

+ 1 - 1
Exporters/3ds Max/Max2Babylon/2017/Exporter/BabylonExporter.GLTFExporter.Camera.cs

@@ -52,7 +52,7 @@ namespace Max2Babylon
                     Y = babylonCamera.rotation[1],
                     Z = babylonCamera.rotation[2]
                 };
-                gltfNode.rotation = rotationVector3.toQuaternionGltf().ToArray();
+                gltfNode.rotation = rotationVector3.toQuaternion().ToArray();
             }
             // No scaling defined for babylon camera. Use identity instead.
             gltfNode.scale = new float[3] { 1, 1, 1 };