I can’t find an official answer of document for this, although many asked this question before, boss’s answer always mentions camera.onViewMatrixChangedObservable
or scene.onPointerObservable
, or You can use scene.render() anywhere you want
.
But…
camera.onViewMatrixChangedObservable.add( () => scene.render() )
camera.onViewMatrixChangedObservable
is actually not working. User input can not fire this observable at all.
scene.onPointerObservable.add( () => scene.render() )
scene.onPointerObservable
is over working with some issue. Over working means that mouse move event also fire this observable to render but camera’s view has not changed. Issue means that this method can not handle camera’s inertia, the view changed by inertia will be queued to the next pointer event.
Three.js make this much more simpler with OrbitControl.addEventListener( 'change', () => renderer.render(scene, camera) )
and it works very well.