Skip to content

Commit 2a3fbb4

Browse files
committed
Fix GLTF Skin bug
1 parent dd13daf commit 2a3fbb4

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

Sources/GateEngine/Resources/Import & Export/Importers/GLTransmissionFormat.swift

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ private class GLTF: Decodable {
360360
let pattern = UInt32(
361361
littleEndian: $0.load(fromByteOffset: offset, as: UInt32.self)
362362
)
363-
array.append(Float(bitPattern: pattern))
363+
array.append(Scalar(bitPattern: pattern))
364364
}
365365
return array.map({ T($0) })
366366
}
@@ -444,7 +444,7 @@ private class GLTF: Decodable {
444444
let pattern = UInt32(
445445
littleEndian: $0.load(fromByteOffset: offset, as: UInt32.self)
446446
)
447-
array.append(Float(bitPattern: pattern))
447+
array.append(Scalar(bitPattern: pattern))
448448
}
449449
return array.map({ T($0) })
450450
}
@@ -718,8 +718,13 @@ extension GLTransmissionFormat: GeometryImporter {
718718
throw GateEngineError.failedToDecode("Failed to decode geometry.")
719719
}
720720

721-
let geometryBase = RawGeometry(byCombining: geometries, withOptimization: .dontOptimize)
722-
721+
let geometryBase: RawGeometry = {
722+
if geometries.count == 1 {
723+
return geometries[0]
724+
}
725+
return RawGeometry(byCombining: geometries, withOptimization: .dontOptimize)
726+
}()
727+
723728
if options.applyRootTransform, let nodeIndex = gltf.scenes[gltf.scene].nodes?.first {
724729
let transform = gltf.nodes[nodeIndex].transform.createMatrix()
725730
return geometryBase * transform
@@ -817,12 +822,10 @@ extension GLTransmissionFormat: SkinImporter {
817822
}
818823

819824
let skin = skins[skinIndex]
820-
guard
821-
let inverseBindMatrices = await inverseBindMatrices(
822-
from: gltf.bufferViews[skin.inverseBindMatrices],
823-
expecting: skin.joints.count
824-
)
825-
else {
825+
guard let inverseBindMatrices = await inverseBindMatrices(
826+
from: gltf.bufferViews[gltf.accessors[skin.inverseBindMatrices].bufferView],
827+
expecting: gltf.accessors[skin.inverseBindMatrices].count
828+
) else {
826829
throw GateEngineError.failedToDecode("Failed to parse skin.")
827830
}
828831

@@ -831,14 +834,10 @@ extension GLTransmissionFormat: SkinImporter {
831834
}
832835
let mesh = gltf.meshes![meshID]
833836

834-
guard
835-
let meshJoints: [UInt32] = await gltf.values(forAccessor: mesh.primitives[0][.joints]!)
836-
else {
837+
guard let meshJoints: [UInt32] = await gltf.values(forAccessor: mesh.primitives[0][.joints]!) else {
837838
throw GateEngineError.failedToDecode("Failed to parse skin.")
838839
}
839-
guard
840-
let meshWeights: [Float] = await gltf.values(forAccessor: mesh.primitives[0][.weights]!)
841-
else {
840+
guard let meshWeights: [Float] = await gltf.values(forAccessor: mesh.primitives[0][.weights]!) else {
842841
throw GateEngineError.failedToDecode("Failed to parse skin.")
843842
}
844843

0 commit comments

Comments
 (0)