1

複数の三角形の面で構成される平面 (THREE.js、CanvasRenderer) を作成しました。顔の上にマウス ポインターを合わせると、顔の色がランダムに変わるようにします。面のすべての頂点が z = 0 にある場合、問題なく動作します。

http://jsfiddle.net/koweiny/FT4uS/

しかし、面を他の値 (たとえば z = -10) に設定すると、表面が z = 0 の目に見えない表面の反射であるかのように、狂ったように動作します。

http://jsfiddle.net/koweiny/FT4uS/2/

コードの唯一の変更点は、変数ノードの 3 番目のコンポーネントです。これは現在、すべての頂点に対して -10 です。

var node = new THREE.Vector3(x, y, -10);

それ以外の

var node = new THREE.Vector3(x, y, 0);

なぜこれが起こるのか誰か教えてもらえますか?

4

2 に答える 2

1

Ray.intersectObjects()面重心が必要です。

geometry.computeCentroids();

フィドル: http: //jsfiddle.net/FT4uS/5/

three.js r.53

于 2012-12-20T18:34:09.390 に答える
0

これは、intersectObjects の奇妙な動作を思い出させました。私の推測では、オブジェクトがシーンの中心から遠く離れている場合、boudingSphere は巨大であるため、マウスをその隣の空きスペースに移動すると、この関数は次のオブジェクトを返しました。

したがって、この関数を確実に作成しないようにするために、オブジェクト内のポイントを境界ボックスと比較するだけです。

_this.checkIfPointMatchBox = function( set ) {      
    if (set.point.x < set.object.geometry.boundingBox.min.x || set.point.x > set.object.geometry.boundingBox.max.x) {
        return false;
    }
    if (set.point.y < set.object.geometry.boundingBox.min.y || set.point.y > set.object.geometry.boundingBox.max.y) {
        return false;
    }
    if (set.point.z < set.object.geometry.boundingBox.min.z || set.point.z > set.object.geometry.boundingBox.max.z) {
        return false;
    }
    return true;
}
于 2012-12-22T03:25:29.810 に答える