import * as T from 'http://esm.sh/three'; import { OrbitControls } from 'http://esm.sh/three/examples/jsm/controls/OrbitControls.js'; export { T as THREE }; export function Scene(inSettings) { const renderer = new T.WebGLRenderer({canvas:document.querySelector(inSettings.DOM)}); const scene = new T.Scene(); const camera = new T.PerspectiveCamera(80, 2, 0.1, 100); const light = new T.DirectionalLight(0xFFFFFF, 1); const controls = new OrbitControls(camera, renderer.domElement); let dirty = false; const update = inTime => { let timeNew = new Date(); let timeDelta = timeNew - inTime; let delta = timeDelta * 0.001; inSettings.Update(scene, delta); controls.update(); dirty = true; setTimeout(()=>update(timeNew), 50); } const render = inTime => { if(dirty) { renderer.render(scene, camera); dirty = false; } requestAnimationFrame(render); } const resize = () => { let canvas = renderer.domElement; camera.aspect = canvas.clientWidth / canvas.clientHeight; camera.updateProjectionMatrix(); renderer.setSize(canvas.clientWidth, canvas.clientHeight, false); }; scene.add(light); //scene.add(new T.GridHelper(10, 10)); light.position.set(-1, 2, 4); camera.position.set(-1, 2, -1); camera.lookAt(new T.Vector3(0,0,0)); controls.update(); inSettings.Init(scene); window.addEventListener("resize", resize); resize(); render(0); update(new Date()); };