import * as THREE from 'three'; import { FirstPersonControls } from 'three/examples/jsm/Addons.js'; 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 - 10, window.innerHeight - 10); document.body.appendChild(renderer.domElement); const geometry = new THREE.BoxGeometry(1, 1, 1, 1); const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); const cube = new THREE.Mesh(geometry, material); scene.add(cube); camera.position.z = 5; // Initialize first person controls const controls = new FirstPersonControls(camera, renderer.domElement); controls.lookSpeed = 0.1; controls.movementSpeed = 5; controls.lookVertical = true; controls.constrainVertical = true; controls.verticalMin = 1.0; controls.verticalMax = 2.0; controls.lon = -150; controls.lat = 120; // Clock for controls timing const clock = new THREE.Clock(); function animate() { const delta = clock.getDelta(); // Update controls controls.update(delta); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera); } renderer.setAnimationLoop(animate);