关于threejs使用raycaster拾取不准确的问题,排除画布大小干扰外,关键得看某参数
事情是这样的,我创建了一条线,由数百个点构成。
但是每当进行拾取的时候,还没挨着线条,隔老远就拾取到了。
在网上找相应的案例,看到别人设置了一个raycaster.params.Line.threshold = 0
…
事情是这样的,我创建了一条线,由数百个点构成。
但是每当进行拾取的时候,还没挨着线条,隔老远就拾取到了。
在网上找相应的案例,看到别人设置了一个raycaster.params.Line.threshold = 0
…
class Layers {
constructor() {
this.mask = 1 | 0;
……
经过观察,发现使用raycaster这个射线工具来追踪物体时,当拖拽物体时,物体之间产生交叉,而我在pointermove这个事件中又没有经过严格判定(也就是不管是否按下鼠标左键,都同样进行物体切换),这就导致了在拖拽途中,控制器所控制的对象发生了切换。要解决也简单,因为在鼠标事件中有一个叫做pressure的属性,它为0的话表示鼠标按键没有按下。把这个限制条件加上,问题就得到解决了。
const pointerMove=(event)=>{
……
换言之
const controls = new OrbitControls(camera,renderer.domElement);//创建控件对象
controls.object.up=new Vector3(0,1,0);//确认(0,1,0)这个方向为摄像机的正上方。
……
const gui = new GUI();
let params={
……
animationloop();
……
我自己碰到的情况是换了高分辨率屏幕,并且改了示例代码,导致没能匹配高分辨率。
在渲染器附近的代码加上
renderer.setPixelRatio(window.devicePixelRatio);
……