Javascript 相交对象不工作

Javascript 相交对象不工作,javascript,three.js,Javascript,Three.js,我为此苦苦挣扎了几天,最后我放弃了,决定问你。我正在尝试一个简单的对象检测,由于inetersectScene被intersectObjects替换,而intersectObjects不是递归的,所以我正在创建一个新的数组,在其中存储我想要与之交互的所有对象。我正在尝试使用纯网格和object3d,但这两种方法都不适用。然后我将数组传递给intersectObjects函数,但返回的数组总是空的 下面是一些代码: // Translate page coords to element coord

我为此苦苦挣扎了几天,最后我放弃了,决定问你。我正在尝试一个简单的对象检测,由于inetersectScene被intersectObjects替换,而intersectObjects不是递归的,所以我正在创建一个新的数组,在其中存储我想要与之交互的所有对象。我正在尝试使用纯网格和object3d,但这两种方法都不适用。然后我将数组传递给intersectObjects函数,但返回的数组总是空的

下面是一些代码:

// Translate page coords to element coords

var offset = $(this.renderer.domElement).offset();

var eltx = pagex - offset.left;

var elty = pagey - offset.top;

// Translate client coords into viewport x,y

var vpx = (eltx / this.container.offsetWidth) * 2 - 1;

var vpy = -(elty / this.container.offsetHeight) * 2 + 1;


var vector = new THREE.Vector3(vpx, vpy, 0.5);

this.projector.unprojectVector(vector, this.camera);

var ray = new THREE.Ray(this.camera.position, 
vector.subSelf(this.camera.position).normalize());

//console.log(ray);

var intersects = ray.intersectObjects(this.intersectedList);

console.log(intersects.length);
有什么想法吗?

intersectObjects有一个递归标志:

var intersects = ray.intersectObjects(this.intersectedList, true);

您的代码不起作用,因为您的相机是多个对象的子对象/孙子对象,其中一个对象应用了平移

this.camera.parent.parent.position.y
返回-249

所以这个相机位置不是真实的,世界,相机位置

尝试改用this.camera.matrixWorld.getPosition.clone

像这样:

var cpos = this.camera.matrixWorld.getPosition().clone();
var ray = new THREE.Ray( cpos, vector.subSelf( cpos ).normalize() );

three.js r.53

那么基本上摄影机的父对象应该是场景吗?如果没有,我就不能旋转。。。这意味着我不能使用控件?我编辑了我的答案。这可能不是three.js的问题。看看你是否能让它工作。这肯定与相机位置有关,因为当我改变它并开始移动时,对象开始重新运行一些对象,但我的光标位于随机位置。还有其他的想法吗?我可以修改相机吗?另一个问题是我应该使用我正在构建的对象列表还是场景。孩子们将作为intersectObjects的参数来完成工作?真的非常感谢您抽出时间…对不起,我已经花了几个小时研究您的代码了,我不能再花更多的时间了。我希望你能理解。我从来没有把所有的东西都抱在怀里。看看你是否能通过实验来回答你的问题。另外,如果您认为当相机是控件的子对象时可能会出现问题,那么请制作一个简单的JSFIDLE示例并提交错误报告。我在这一点上的想法是,我上面的答案是正确的。我有一个小问题。。。因为我的camera.position不是我的实际摄像机位置,所以我可以从世界矩阵中得到我的实际摄像机位置,但这给了我一个位置向量。如何将其传递给projector.unprojectVector,因为它接受摄影机作为第二个参数,而实际上它不是我的真实摄影机?所以,我可以通过我的实际摄像机位置来代替摄像机吗?