最近在加载3d模型时,需要点击模型的某个部位,然后模型自动旋转到该部位,就遇到了获取模型部位不准备的问题。
three.js中的raycaster用法是canvas是整个页面窗口的,所以它的代码是:
// 将鼠标位置归一化为设备坐标。x 和 y 方向的取值范围是 (-1 to +1)
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
但实际上我的项目中渲染模型的区域只有页面中的一块区域,所以这么些写获取到的部位总是不准确,终于在一个博主那找到了解决方案,特此记录:
// 通过鼠标点击位置,计算出 raycaster 所需点的位置,以屏幕为中心点,范围 -1 到 1
//这里的container就是画布所在的div,也就是说,这个是要拿整个scene所在的容器来界定的
let getBoundingClientRect = container.getBoundingClientRect()
mouse.x = ((event.clientX - getBoundingClientRect .left) / container.offsetWidth) * 2 - 1;
mouse.y = -((event.clientY - getBoundingClientRect .top) / container.offsetHeight) * 2 + 1;
这样就能解决获取部位不准备的问题了,感谢大佬
这是原链接