在three.js中添加点击事件主要涉及以下几个基础概念:
以下是添加点击事件的基本步骤和示例代码:
// 引入three.js库
import * as THREE from 'three';
// 创建场景、相机和渲染器
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.body.appendChild(renderer.domElement);
// 添加一个简单的立方体到场景中
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 5;
// 创建Raycaster实例
const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2();
// 添加点击事件监听器
window.addEventListener('click', onMouseClick, false);
function onMouseClick(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(scene.children);
if (intersects.length > 0) {
console.log('点击了物体:', intersects[0].object);
// 在此处添加更多处理逻辑,如改变物体颜色等
intersects[0].object.material.color.set(0xff0000);
}
}
// 渲染循环
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
animate();
setFromCamera
方法被正确调用。通过以上步骤和代码示例,可以在three.js项目中有效地添加和管理点击事件。
领取专属 10元无门槛券
手把手带您无忧上云