const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ); const renderer = new THREE.WebGLRenderer(); //renderer.setSize( window.innerWidth, window.innerHeight ); document.getElementById('scene2').appendChild(renderer.domElement); const material = new THREE.ShaderMaterial({ vertexShader: document.getElementById('wire-vert').textContent, fragmentShader: document.getElementById('wire-frag').textContent }); material.wireframe = true; const geometry = new THREE.BoxGeometry(2, 2, 2); const cube = new THREE.Mesh(geometry, material); scene.add(cube); camera.position.z = 5; function resizeCanvasToDisplaySize() { const canvas = renderer.domElement; const width = canvas.clientWidth; const height = canvas.clientHeight; // you must pass false here or three.js sadly fights the browser renderer.setSize(width, height, false); camera.aspect = width / height; camera.updateProjectionMatrix(); // set render target sizes here } function animate() { requestAnimationFrame( animate ); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera); } animate(); const resizeObserver = new ResizeObserver(resizeCanvasToDisplaySize); resizeObserver.observe(renderer.domElement, {box: 'content-box'});