【发布时间】:2013-06-07 07:12:45
【问题描述】:
我正在尝试构建一个拾取射线来查看我在 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。尽管如此,它总是给出“一无所获”。为什么?我做错了什么?
非常感谢您的帮助。
【问题讨论】:
-
请发布一个完整代码的实时示例的链接,以便更容易找出问题所在。
-
@Lee Stemkoski:我想上传一个活生生的例子,但我不能,因为我不知道任何允许使用 .obj 文件的免费主机。如果你能告诉我,我可以上传一个活生生的例子!
-
@Lee Stemkoski:我可以在那里上传 body.obj,是的,但我不能在在线实时示例中使用它。当在某处的 freehoster 上托管 test.html 并在加载程序代码中添加 dropbox/mylink/body.obj 时,由于安全原因,它不会让我这样做。而且我无法在 Dropbox 上上传完整的 html 代码,因为它不会让它像 apache 服务器一样运行。
标签: javascript three.js