1

我现在为此苦苦挣扎了几天,最后我放弃了,决定问你。我正在尝试进行简单的对象检测,并且由于 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);

有任何想法吗?

4

2 回答 2

0

intersectObjects有一个递归标志:

var intersects = ray.intersectObjects(this.intersectedList, true);
于 2012-12-06T13:39:12.703 回答
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() );

三.js r.53

于 2012-12-06T15:19:42.367 回答