rotation stays still
Do you mean no rotation at all or rotation stops at pi, or something else ? What happens if you remove duration ? Or set relative to nil ?
Did you try a rotation of - .pi/2 for instance to get 3*.pi/2 ?
You could animate in 2 steps: pi then the part over pi (not very clean solution though).
I made a simple test.
let rot = simd_quatf(angle: .pi, axis: SIMD3(x:0, y:0, z:1))
print(rot)
I get:
simd_quatf(real: 7.54979e-08, imag: SIMD3<Float>(0.0, 0.0, 1.0))
let rot = simd_quatf(angle: .pi/2, axis: SIMD3(x:0, y:0, z:1))
I get
simd_quatf(real: 0.7071068, imag: SIMD3<Float>(0.0, 0.0, 0.70710677))
let rot = simd_quatf(angle: 0 * .pi, axis: SIMD3(x:0, y:0, z:1))
print(rot)
I get:
simd_quatf(real: 1.0, imag: SIMD3<Float>(0.0, 0.0, 0.0))
real is zero. No rotation.
let rot = simd_quatf(angle: 1.1 * .pi, axis: SIMD3(x:0, y:0, z:1))print(rot)
I get a rotation
simd_quatf(real: -0.15643445, imag: SIMD3<Float>(0.0, 0.0, 0.98768836))
let rot = simd_quatf(angle: 1.5 * .pi, axis: SIMD3(x:0, y:0, z:1))print(rot)
get the expected rotation
simd_quatf(real: -0.70710677, imag: SIMD3<Float>(0.0, 0.0, 0.70710677))
So, simd_quatf computes rotation properly.