import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; const scene = new THREE.Scene(); scene.background = new THREE.Color("white"); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.set(0, 3, 10); const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); scene.add(new THREE.AmbientLight(0xffffff, 0.6)); const light = new THREE.DirectionalLight(0xffffff, 1); light.position.set(5, 10, 5); scene.add(light); const objects = []; const geometries = [ new THREE.BoxGeometry(2, 2, 2), new THREE.SphereGeometry(1.2, 32, 32), new THREE.TorusGeometry(1.2, 0.4, 16, 100) ]; const positions = [-5, 0, 5]; const colors = ["#ff4f4f", "#4f8cff", "#4fff8c"]; geometries.forEach((geo, i) => { const mat = new THREE.MeshStandardMaterial({ color: colors[i], roughness: 0.4, metalness: 0.3, emissive: new THREE.Color(0x000000) }); const mesh = new THREE.Mesh(geo, mat); mesh.position.set(positions[i], 0, 0); scene.add(mesh); objects.push(mesh); }); let selectedObject = null; const raycaster = new THREE.Raycaster(); const mouse = new THREE.Vector2(); const controls = new OrbitControls(camera, renderer.domElement); controls.enableDamping = true; window.addEventListener("click", (event) => { mouse.x = (event.clientX / window.innerWidth) * 2 - 1; mouse.y = -(event.clientY / window.innerHeight) * 2 + 1; raycaster.setFromCamera(mouse, camera); const intersects = raycaster.intersectObjects(objects); if (selectedObject) { selectedObject.scale.set(1, 1, 1); selectedObject.material.emissive.setHex(0x000000); } if (intersects.length > 0) { const clicked = intersects[0].object; if (selectedObject === clicked) { selectedObject = null; } else { selectedObject = clicked; selectedObject.scale.set(1.25, 1.25, 1.25); selectedObject.material.emissive.setHex(0x333333); } } else { selectedObject = null; } }); function animate() { requestAnimationFrame(animate); controls.update(); renderer.render(scene, camera); } animate(); window.addEventListener("resize", () => { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); });