我正在尝试构建一个拾取射线来查看我的 Three.js 中的 3D 主体是否已被单击。目前不起作用,我按照这些 Three.js raycast produces empty intersects array 进行操作还有这些three.js Raycaster intersectObjects提示。
我当前的代码是这样的:
function checkClick() {
// On every click, check for body hit
clickInfo.x = event.clientX;
clickInfo.y = event.clientY;
var x = ( clickInfo.x / window.innerWidth ) * 2 - 1;
var y = -( clickInfo.y / window.innerHeight ) * 2 + 1;
var objects = [];
objects.push(model);
var raycaster = projector.pickingRay(directionVector.clone(),camera);
var intersects = raycaster.intersectObjects(scene.children);
if (intersects.length) {
alert("found something");
}
else {
alert("found nothing");
}
}
我现在了解到,projector.pickingRay 为我节省了大量工作,因为在上面的第二个链接示例中,用户之前需要单独计算所有这些内容。但这不起作用。我没有收到任何 JS 错误,只是收到“什么也没找到”消息(相交数组为空)。我在场景(模型)中确实有一个对象,我将其添加到对象中,因为我知道 raycaster.intersectObjects 需要一个数组作为其参数。它仍然不起作用。然后我按照第一个链接示例中的提示并使用 scene.children 代替。但它总是给出“什么也没发现”。为什么?我做错了什么?
非常感谢您的帮助。
最佳答案
这是一个工作示例的链接,其中当鼠标悬停在 3D 对象上时,该对象会改变颜色。也许可以调整此代码以满足您的需求?
http://stemkoski.github.io/Three.js/Mouse-Over.html
希望对你有帮助!
关于javascript - Three.js 转换一个选取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17044070/