私は行列変換の概念に不慣れで、直交方向に線をオフセットしようとしています。私が思いついたのは:
line.translate( offsetPixels, new THREE.Vector3( 1, 1, 0 ) );
これは、ベクトルで定義された軸に沿って線を変換します。だから私の質問は、平行線を取得するためにベクトルで軸を定義する方法ですか?
おそらく私は間違っていますが、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 行目が最初の行の上に移動します。