rendererResult = {
const renderer = new THREE.WebGLRenderer({ antialias: true });
invalidation.then(() => (controls.dispose(), renderer.dispose()));
const scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
scene.add(model.scene);
model.scene.position.z = zPosition
const hemiLight = new THREE.HemisphereLight( 0xffffff, 0xffffff, 0.6 );
hemiLight.color.setHSL(1, 1, 1);
hemiLight.groundColor.setHSL(0, 1, 0);
hemiLight.position.set(0, 50, 0);
scene.add(hemiLight);
var bbox = new THREE.Box3().setFromObject(model.scene);
var helper = new THREE.Box3Helper( bbox, 0xffff00 );
scene.add( helper );
const aspect = width / height;
const near = 1;
const far = 100000;
const cameraTop = new THREE.PerspectiveCamera(45, aspect, near, far);
cameraTop.position.z = -0.1;
cameraTop.position.y = 1500;
cameraTop.fov = 40;
cameraTop.lookAt(new THREE.Vector3(0, 0, 0));
const s = 5
const cameraFront = new THREE.OrthographicCamera( width / -4 * s, width / 4 * s, height / 2 * s, height / - 2 * s, 1, 5000 );
cameraFront.position.x = 1000;
cameraFront.lookAt(new THREE.Vector3(0, 0, 0));
const controls = new THREE.OrbitControls(cameraTop, renderer.domElement);
invalidation.then(() => (controls.dispose(), renderer.dispose()));
renderer.setSize(width, height);
renderer.setPixelRatio(devicePixelRatio);
scene.add(new THREE.CameraHelper(cameraTop));
let left = 0;
const bottom = 0;
renderer.setViewport(left, bottom, Math.floor(width / 2), height);
renderer.setScissor(left, bottom, Math.floor(width / 2), height);
renderer.setScissorTest(true);
renderer.setClearColor(new THREE.Color(1, 1, 1));
cameraTop.aspect = Math.floor(width / 2) / height;
cameraTop.updateProjectionMatrix();
renderer.render(scene, cameraTop);
left = Math.floor(width / 2);
renderer.setViewport(left, bottom, Math.floor(width / 2), height);
renderer.setScissor(left, bottom, Math.floor(width / 2), height);
renderer.setScissorTest(true);
renderer.setClearColor(new THREE.Color(1, 1, 1));
cameraFront.aspect = Math.floor(width / 2) / height;
cameraFront.updateProjectionMatrix();
renderer.render(scene, cameraFront);
const projScreenMatrix = new THREE.Matrix4();
projScreenMatrix.multiplyMatrices(cameraTop.projectionMatrix, cameraTop.matrixWorldInverse);
const frustum = new THREE.Frustum();
frustum.setFromMatrix(projScreenMatrix);
return {element: renderer.domElement, insects: frustum.intersectsBox(bbox)};
}