/// <summary> /// Convert gltf quaternion to a unity quaternion /// </summary> /// <param name="gltfQuat">gltf quaternion</param> /// <returns>unity quaternion</returns> public static Quaternion ToUnityQuaternionConvert(this GLTF.Math.Quaternion gltfQuat) { Vector3 fromAxisOfRotation = new Vector3(gltfQuat.X, gltfQuat.Y, gltfQuat.Z); float axisFlipScale = CoordinateSpaceConversionRequiresHandednessFlip ? -1.0f : 1.0f; Vector3 toAxisOfRotation = axisFlipScale * Vector3.Scale(fromAxisOfRotation, CoordinateSpaceConversionScale.ToUnityVector3Raw()); return(new Quaternion(toAxisOfRotation.x, toAxisOfRotation.y, toAxisOfRotation.z, gltfQuat.W)); }
/// <summary> /// Convert gltf quaternion to a unity quaternion /// </summary> /// <param name="gltfQuat">gltf quaternion</param> /// <returns>unity quaternion</returns> public static Quaternion ToUnityQuaternionConvert(this GLTF.Math.Quaternion gltfQuat) { // get raw matrix conversion (gltf matrix stored in a unity matrix for easier math) Vector3 origAxis = new Vector3(gltfQuat.X, gltfQuat.Y, gltfQuat.Z); float axisFlipScale = CoordinateSpaceConversionRequiresHandednessFlip ? -1.0f : 1.0f; Vector3 newAxis = axisFlipScale * Vector3.Scale(origAxis, CoordinateSpaceConversionScale.ToUnityVector3Raw()); // then put the quaternion back together and return it return(new Quaternion(newAxis.x, newAxis.y, newAxis.z, gltfQuat.W)); }
public static Quaternion ToUnityQuaternion(this GLTF.Math.Quaternion quaternion) { return(new Quaternion(quaternion.X, quaternion.Y, quaternion.Z, quaternion.W)); }