2

私は行列変換の概念に不慣れで、直交方向に線をオフセットしようとしています。私が思いついたのは:

line.translate( offsetPixels,  new THREE.Vector3( 1, 1, 0 )  );

これは、ベクトルで定義された軸に沿って線を変換します。だから私の質問は、平行線を取得するためにベクトルで軸を定義する方法ですか?

4

1 に答える 1

3

おそらく私は間違っていますが、THREE.Line またはそのスーパークラスである THREE.Object3D に translate というメソッドがある場所がわかりません... もちろん、それほど難しくない独自の翻訳関数を作成することもできます。

function translate(object, offset, direction) {
    if (offset <= 0) return false;
    if (!(object instanceof THREE.Object3D)) return false;
    if (!(direction instanceof THREE.Vector3)) return false;

    direction.normalize();
    object.position.x += offset * direction.x;
    object.position.y += offset * direction.y;
    object.position.z += offset * direction.z;

    return true;
}

私が書いたこの関数は、クラス THREE.Object3D から派生したあらゆる種類のオブジェクトを変換します。上記のようにオフセットと、方向を指定する Vector3 を渡します。

この呼び出しは、lineA を負の x 方向に 30 だけ変換します。

translate(lineA, 30, new THREE.Vector3(-1,0,0);

方向ベクトルが正規化されている (その長さで除算されている) ため、以下は同一です。

translate(lineA, 30, new THREE.Vector3(-5,0,0);

このような変換関数を使用しても、平行線を作成することはできません。この関数は、既に作成された線を移動するだけだからです。ここで、2 本の平行線を作成するこのデモ フィドルを作成しました (線が同じ勾配を持っている場合、線は平行です)。翻訳する呼び出しのコメントを外すと、2 行目が最初の行の上に移動します。

于 2012-06-17T13:06:53.927 に答える