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

カメラが複数のオブジェクトの子/孫であり、そのうちの1つに変換が適用されているため、コードが機能していません。

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

于 2012-12-06T15:19:42.367 に答える
0

intersectObjects再帰フラグがあります:

var intersects = ray.intersectObjects(this.intersectedList, true);
于 2012-12-06T13:39:12.703 に答える