if you’re wondering how to get the azimuthalangle anywhere else in the component tree, in recent versions we have added “controls” to the state model so that any control can make itself known which is great for interop:
threejs is not reactive, controls changing some internal value is of no concern to useEffect. useEffect triggers after a component has rendered (by react), but something must be the cause for that: a prop change, setState, etc.
you can use useFrame which fires every frame (60fps) but do not call setSpeed in there but set the speed directly.