Javascript Three.js使用相机的光线投射选择项目
嘿,伙计们,我正试图让光线直接从相机出来,与我看到的任何东西相交,但我看到的所有参考都使用鼠标,我不知道如何转换 到目前为止,我掌握的代码是:Javascript Three.js使用相机的光线投射选择项目,javascript,three.js,Javascript,Three.js,嘿,伙计们,我正试图让光线直接从相机出来,与我看到的任何东西相交,但我看到的所有参考都使用鼠标,我不知道如何转换 到目前为止,我掌握的代码是: var raycaster = new THREE.Raycaster(); function render() { raycaster.set(camera, 0); renderer.render( scene, camera ); } 我做了类似的事情,只是用鼠标的位置而不是相机 您可以尝试将前两行event.offset
var raycaster = new THREE.Raycaster();
function render()
{
raycaster.set(camera, 0);
renderer.render( scene, camera );
}
我做了类似的事情,只是用鼠标的位置而不是相机
您可以尝试将前两行event.offsetX和event.offsetY替换为画布的中心,如:
编辑:现在您可以对intersect多维数据集执行一些特殊操作。例如,显示他的线框,如:intersectObjects[0]。material.wireframe=true
注意:intersectObjects数组按距离排序。因此,最近的对象将位于索引0处
编辑2:您可以创建一个更新循环更新函数来使用上述代码。我知道两种方法:
使用setIntervaluUpdate,1000/60:1000/60使其每秒呼叫60次。否定:当更新函数的执行时间超过16.6 1000/60毫秒时,它将不精确
在渲染方法中调用update方法。肯定:这将更加精确,并且您已经将应用程序与渲染逻辑分离了
功能更新{
//把上面的代码放在这里
}
函数render{
// ...
使现代化
}
非常感谢。你能把所有这些都放在渲染中吗?不,你不应该把它放在渲染函数中!它与渲染逻辑无关!对不起,我看到的所有其他stuf都进入了渲染。我想它现在可以工作了,我只需要测试itOkay,因为某种原因,光线总是选择三个物体,我猜,但不管我如何移动相机,它似乎都不会改变。我唯一改变的是:对于var I=0;i.长度;i++{intersectObjects[i].object.material.color.set 0xff0000;console.logiintersectobjects;}在我上面的代码中,将在render方法中调用update方法,因此它转到render逻辑。我的意思是,为了更干净的代码,应该将更新逻辑与渲染逻辑分开。您希望对相交对象执行什么操作?
var x = (event.offsetX / renderer.domElement.width) * 2 - 1;
var y = -(event.offsetY / renderer.domElement.height) * 2 + 1;
var z = 0.5;
var mousePosition = new THREE.Vector3(x, y, z);
var raycaster = new THREE.Raycaster();
mousePosition.unproject(camera);
raycaster.set(camera.position, mousePosition.sub(camera.position).normalize());
var intersectObjects = raycaster.intersectObjects(scene.children);
if (intersectObjects.length) {
// do something
}
var x = ((canvasElement.clientWidth / 2) / renderer.domElement.width) * 2 - 1;
var y = -((canvasElement.clientHeight / 2) / renderer.domElement.height) * 2 + 1;