通过鼠标事件获取鼠标位置在3d中的坐标mouse/Raycaster
监听事件
ThreeDom.current.addEventListener('mousemove', mousemoveFunc, false);
监听方法
const mousemoveFunc = (event) => {
event.preventDefault();
// 计算鼠标在屏幕上的位置
const mouse = new THREE.Vector2();
// 计算鼠标在屏幕上的位置
const mouse = new THREE.Vector2();
const getBoundingClientRect = ThreeDom.current.getBoundingClientRect();
mouse.x = ((event.clientX - getBoundingClientRect.left) / ThreeDom.current.offsetWidth) * 2 - 1; // 标准设备横坐标
mouse.y = -((event.clientY - getBoundingClientRect.top) / ThreeDom.current.offsetHeight) * 2 + 1; // 标准设备纵坐标
//全屏时使用
// mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
// mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
// 将屏幕坐标转换为3D坐标
const raycaster = new THREE.Raycaster();
raycaster.setFromCamera(mouse, Three.camera);
// 获取鼠标位置对应的3D坐标
const intersects = raycaster.intersectObjects(Three.scene.children, true);
console.log(intersects);
if (intersects.length > 0) {
const position = intersects[0].point;
console.log('3D坐标: ', position);
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?