我现在已经开了几天了,我最后放弃了,决定问你。我试图进行简单的对象检测,因为inetersectScene被不是递归的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);
有什么想法吗?
答案 0 :(得分:0)
intersectObjects
有一个递归标记:
var intersects = ray.intersectObjects(this.intersectedList, true);
答案 1 :(得分:0)
您的代码无效,因为您的相机是多个对象的子/孙,其中一个已应用了翻译。
this.camera.parent.parent.position.y
返回-249。
所以this.camera.position
不是真实的世界相机位置。
请尝试使用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