intersectedObjects无效

时间:2012-12-06 13:32:26

标签: javascript three.js

我现在已经开了几天了,我最后放弃了,决定问你。我试图进行简单的对象检测,因为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);

有什么想法吗?

2 个答案:

答案 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