/ app.js
app.js
1 import "./styles.css" 2 import * as THREE from "./three.min.js" 3 import { OrbitControls } from './OrbitControls.js' 4 5 /** 6 * Base 7 */ 8 9 // Canvas 10 const canvas = document.querySelector('canvas.webgl') 11 12 // Scene 13 const scene = new THREE.Scene() 14 15 /** 16 * Textures 17 */ 18 const textureLoader = new THREE.TextureLoader() 19 20 /** 21 * Test cube 22 */ 23 const cube = new THREE.Mesh( 24 new THREE.BoxGeometry(1, 1, 1), 25 new THREE.MeshBasicMaterial() 26 ) 27 scene.add(cube) 28 29 /** 30 * Sizes 31 */ 32 const sizes = { 33 width: window.innerWidth, 34 height: window.innerHeight 35 } 36 37 window.addEventListener('resize', () => 38 { 39 // Update sizes 40 sizes.width = window.innerWidth 41 sizes.height = window.innerHeight 42 43 // Update camera 44 camera.aspect = sizes.width / sizes.height 45 camera.updateProjectionMatrix() 46 47 // Update renderer 48 renderer.setSize(sizes.width, sizes.height) 49 renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)) 50 }) 51 52 /** 53 * Camera 54 */ 55 // Base camera 56 const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 0.1, 100) 57 camera.position.z = 3 58 scene.add(camera) 59 60 // Controls 61 const controls = new OrbitControls(camera, canvas) 62 controls.enableDamping = true 63 64 /** 65 * Renderer 66 */ 67 const renderer = new THREE.WebGLRenderer({ 68 canvas: canvas 69 }) 70 renderer.setSize(sizes.width, sizes.height) 71 renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)) 72 73 /** 74 * Animate 75 */ 76 const clock = new THREE.Clock() 77 78 const tick = () => 79 { 80 const elapsedTime = clock.getElapsedTime() 81 82 // Update controls 83 controls.update() 84 85 // Render 86 renderer.render(scene, camera) 87 88 // Call tick again on the next frame 89 window.requestAnimationFrame(tick) 90 } 91 92 tick() 93