Javascript Three.js抛出拾取数组
我正在尝试创建一个拾取光线,以查看我在three.js中的3D身体是否已被单击。目前它不起作用,我遵循了这些提示 我目前的代码是:Javascript Three.js抛出拾取数组,javascript,three.js,Javascript,Three.js,我正在尝试创建一个拾取光线,以查看我在three.js中的3D身体是否已被单击。目前它不起作用,我遵循了这些提示 我目前的代码是: function checkClick() { // On every click, check for body hit clickInfo.x = event.clientX; clickInfo.y = event.clientY;
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错误,只是“找不到任何东西”消息(intersects数组为空)。我在场景(模型)中有一个单独的对象,我将其添加到对象中,因为我知道raycaster.intersectObjects需要一个数组作为其参数。它仍然不起作用。然后我按照第一个链接示例中的提示使用scene.children。但它总是给出“一无所获”。为什么?我做错了什么
非常感谢您的帮助。这里有一个链接,指向一个工作示例,当鼠标悬停在3D对象上时,它会改变颜色。也许这段代码可以根据您的需要进行修改
希望有帮助 我在前面已经找到了这个示例,但是简单地复制代码是不起作用的,它仍然使用unprojectVector等方法,这些方法与我到目前为止所学的方法相比已经过时,因为在最新版本中,您应该能够只使用projector.pickingRay(directionVector.clone(),camera);它应该会起作用。但事实并非如此!请发布一个完整代码的实例链接,以便更容易地找出问题所在。@Lee Stemkoski:我想上传一个实例,但我不能,因为我不知道有哪家免费主机允许使用.obj文件。如果你能告诉我一个,我可以上传一个活生生的例子!@李·斯特姆科斯基:我可以在那里上传body.obj,是的,但我不能在在线直播的例子中使用它。当在某个地方的freehoster上托管test.html并在加载程序代码中添加dropbox/mylink/body.obj时,出于安全原因,它不会允许我这样做。我无法在dropbox上上传完整的html代码,因为它不会让它像apache服务器一样运行。