@@ -1147,14 +1147,15 @@ extension GLTransmissionFormat: ObjectAnimation3DImporter {
11471147 var objectAnimation = ObjectAnimation3D . Animation ( )
11481148
11491149 var timeMax : Float = . nan
1150+ var timeMin : Float = . nan
11501151
11511152 for channel in animation. channels {
11521153 let sampler = animation. samplers [ channel. sampler]
11531154
1154- guard let times: [ Float ] = await gltf. values ( forAccessor: sampler. input) else {
1155+ guard let times: [ Float ] = await gltf. animationValues ( forAccessor: sampler. input) else {
11551156 continue
11561157 }
1157- guard let values: [ Float ] = await gltf. values ( forAccessor: sampler. output) else {
1158+ guard let values: [ Float ] = await gltf. animationValues ( forAccessor: sampler. output) else {
11581159 continue
11591160 }
11601161
@@ -1213,8 +1214,23 @@ extension GLTransmissionFormat: ObjectAnimation3DImporter {
12131214 break
12141215 }
12151216
1216- timeMax = . maximum( times. max ( ) !, timeMax)
1217+ if let max = times. max ( ) {
1218+ timeMax = . maximum( max, timeMax)
1219+ }
1220+ if let min = times. min ( ) {
1221+ timeMin = . minimum( min, timeMin)
1222+ }
12171223 }
1224+
1225+ var duration = timeMax - timeMin
1226+ if duration. isFinite == false {
1227+ duration = 0
1228+ }
1229+
1230+ // Slide animation to start at time zero
1231+ objectAnimation. positionOutput. times = objectAnimation. positionOutput. times. map ( { $0 - timeMin} )
1232+ objectAnimation. rotationOutput. times = objectAnimation. rotationOutput. times. map ( { $0 - timeMin} )
1233+ objectAnimation. scaleOutput. times = objectAnimation. scaleOutput. times. map ( { $0 - timeMin} )
12181234
12191235 return ObjectAnimation3DBackend ( name: animation. name, duration: timeMax, animation: objectAnimation)
12201236 }
0 commit comments