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);

现在使用这样的翻译功能将不允许您创建平行线,因为此功能只会移动已经创建的线。我在这里创建了这个演示小提琴,它创建了两条平行线(如果它们具有相同的斜率,则线是平行的)。如果您取消注释翻译调用,它将把第二行移到第一行之上。

于 2012-06-17T13:06:53.927 回答