reactive3dCanvas = function( mesh, config={} ) {
let { orbitControl=true, trackballControl=false } = config
const camera = lightedCamera( perspectiveCamera( config.camera ), config.lights )
const s = scene( mesh, camera, config )
var r = renderer( config )
var control = null
if ( trackballControl )
control = addTrackballControl( r, s, camera, config.camera )
else if ( orbitControl )
control = addOrbitControl( r, s, camera, config.camera )
r.domElement.scene = s
r.domElement.render = () => r .render( s, camera )
r.domElement.replaceMesh = function( mesh ) {
s .remove( s .replaceableMesh )
s .add( mesh )
s .replaceableMesh = mesh
r .render( s, camera )
}
r.domElement.adjustCamera = function( position, lookAt, up ) {
camera .lookAt( new THREE.Vector3( ...lookAt ) )
control .target = new THREE.Vector3( ...lookAt )
camera .up = new THREE.Vector3( ...up )
camera .position .set( ...position )
control .update()
r .render( s, camera )
}
r .render( s, camera )
return r.domElement
}