// 初始化场景、相机、渲染器 var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement);

// 添加一个立方体作为mesh结构 var geometry = new THREE.BoxGeometry(1, 1, 1); var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); var cube = new THREE.Mesh(geometry, material); scene.add(cube);

// 监听双击事件 var doubleClick = false; var timeout; renderer.domElement.addEventListener('dblclick', function(event) { event.preventDefault();

// 获取相对于canvas的鼠标位置 var mouse = new THREE.Vector2(); mouse.x = (event.clientX / window.innerWidth) * 2 - 1; mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;

// 创建一个射线投射器 var raycaster = new THREE.Raycaster(); raycaster.setFromCamera(mouse, camera);

// 获取射线与mesh结构的相交点 var intersects = raycaster.intersectObject(cube);

if (intersects.length > 0) { // 如果双击了mesh结构上的某一点,则输出该点相对于世界坐标系的坐标 if (doubleClick) { var point = intersects[0].point; console.log('World Coordinates:', point); } else { // 如果只单击一次,则提示不能够获得该点的世界坐标 console.log('Cannot get world coordinates with a single click'); }

// 设置doubleClick为true,表示下一次点击为双击
doubleClick = true;
clearTimeout(timeout);
timeout = setTimeout(function() {
  // 如果在一定时间内没有第二次点击,则重置doubleClick为false
  doubleClick = false;
}, 300);

} });

camera.position.z = 5;

// 渲染场景 function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate();


原文地址: https://www.cveoy.top/t/topic/pRm7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录