我是矩阵变换概念的新手,我尝试在正交方向上偏移一条线。我想出的是:
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);
现在使用这样的翻译功能将不允许您创建平行线,因为此功能只会移动已经创建的线。我在这里创建了这个演示小提琴,它创建了两条平行线(如果它们具有相同的斜率,则线是平行的)。如果您取消注释翻译调用,它将把第二行移到第一行之上。