public static GLTF.Math.Matrix4x4 ToGltfMatrix4x4Raw(this Matrix4x4 unityMat) { GLTF.Math.Vector4 c0 = unityMat.GetColumn(0).ToGltfVector4Raw(); GLTF.Math.Vector4 c1 = unityMat.GetColumn(1).ToGltfVector4Raw(); GLTF.Math.Vector4 c2 = unityMat.GetColumn(2).ToGltfVector4Raw(); GLTF.Math.Vector4 c3 = unityMat.GetColumn(3).ToGltfVector4Raw(); GLTF.Math.Matrix4x4 rawGltfMat = new GLTF.Math.Matrix4x4(c0.X, c0.Y, c0.Z, c0.W, c1.X, c1.Y, c1.Z, c1.W, c2.X, c2.Y, c2.Z, c2.W, c3.X, c3.Y, c3.Z, c3.W); return(rawGltfMat); }
/// <summary> /// Inverts the Z and W values of all Vector4s in an array to convert between glTF and Unity's coordinate systems. /// </summary> /// <param name="array">The array of Vector4s to be converted.</param> /// <returns>The array of converted Vector4s.</returns> public static GLTF.Math.Vector4[] FlipVectorArrayHandedness(GLTF.Math.Vector4[] array) { var returnArray = new GLTF.Math.Vector4[array.Length]; for (var i = 0; i < array.Length; i++) { returnArray[i] = FlipVectorHandedness(array[i]); } return(returnArray); }
public static Vector4 ToUnityVector4(this GLTF.Math.Vector4 vec4) { return(new Vector4(vec4.X, vec4.Y, vec4.Z, vec4.W)); }
/// <summary> /// Inverts the Z and W values of a Vector4 to convert between glTF and Unity's coordinate systems. /// </summary> /// <param name="vector">The Vector4 to be converted.</param> /// <returns>The converted Vector4.</returns> public static GLTF.Math.Vector4 FlipVectorHandedness(GLTF.Math.Vector4 vector) { return(new GLTF.Math.Vector4(vector.X, vector.Y, -vector.Z, -vector.W)); }
/// <summary> /// Converts and copies based on the specified coordinate scale /// </summary> /// <param name="array">The array to convert and copy</param> /// <param name="coordinateSpaceCoordinateScale">The specified coordinate space</param> /// <returns>The copied and converted coordinate space</returns> public static Vector4[] ConvertVector4CoordinateSpaceAndCopy(Vector4[] array, GLTF.Math.Vector4 coordinateSpaceCoordinateScale) { var returnArray = new Vector4[array.Length]; for (var i = 0; i < array.Length; i++) { returnArray[i].x = array[i].x * coordinateSpaceCoordinateScale.X; returnArray[i].y = array[i].y * coordinateSpaceCoordinateScale.Y; returnArray[i].z = array[i].z * coordinateSpaceCoordinateScale.Z; returnArray[i].w = array[i].w * coordinateSpaceCoordinateScale.W; } return(returnArray); }
/// <summary> /// Converts vector4 to specified coordinate space /// </summary> /// <param name="attributeAccessor">The attribute accessor to modify</param> /// <param name="coordinateSpaceCoordinateScale">The coordinate space to move into</param> public static void ConvertVector4CoordinateSpace(ref AttributeAccessor attributeAccessor, GLTF.Math.Vector4 coordinateSpaceCoordinateScale) { for (int i = 0; i < attributeAccessor.AccessorContent.AsVec4s.Length; i++) { attributeAccessor.AccessorContent.AsVec4s[i].X *= coordinateSpaceCoordinateScale.X; attributeAccessor.AccessorContent.AsVec4s[i].Y *= coordinateSpaceCoordinateScale.Y; attributeAccessor.AccessorContent.AsVec4s[i].Z *= coordinateSpaceCoordinateScale.Z; attributeAccessor.AccessorContent.AsVec4s[i].W *= coordinateSpaceCoordinateScale.W; } }
public static GLTF.Math.Vector4 ToGltfVector4Raw(this Vector4 unityVec4) { GLTF.Math.Vector4 gltfVec4 = new GLTF.Math.Vector4(unityVec4.x, unityVec4.y, unityVec4.z, unityVec4.w); return(gltfVec4); }