问题来自两个单独的物体对准面在three.js所(Issue aligning faces in T

2019-10-21 07:56发布

我有我的three.js所代码的问题。

我试图通过选择两个面来对准两个对象,并且具有第二面(和对象)旋转以匹配所述第一对象的选择面的法线矢量。

到目前为止,我有:

var normalMatrix = new THREE.Matrix3().getNormalMatrix( object.matrixWorld );
var worldNormal = face.normal.clone().applyMatrix3( normalMatrix ).normalize();
var normalMatrixRef = new THREE.Matrix3().getNormalMatrix( objectRef.matrixWorld );
var worldNormalRef = faceRef.normal.clone().applyMatrix3( normalMatrixRef).normalize();

其中:对象是我将要旋转的对象,面对的就是对象的选择面,objectRef是静止的对象引用和faceRef是正常的我想匹配的对象。

在此之前做

  object.lookAt(worldNormalRef);

,我想无论是

object.up = new THREE.Vector3(0,0,1); 
object.up = worldNormal;
object.up = face.normal; 

既不工作。

无论object.up情况下不工作,因为他们应该。 当我做的动作,目标对象(一个旋转)不旋转,但不正确对齐的面孔。 这是任意的,但不知何故被链接对象当前旋转(即:有时它一起转动(0,1,0)或simliar,othertimes如果我预先旋转的对象,它只是旋转的轻微位。

理论上的lookAt采用了世界矢量这我faceRef是,只要我设置了“向上”正确的,它应该工作,但忽略了最低。

有任何想法吗?

Answer 1:

我发现在我的代码的问题,我希望它能够帮助别人的未来。 该

object.lookAt(worldNormalRef); 

而是需要进行修改,以全新的面貌法线添加到当前对象的postition为的lookAt正常工作:

//create a point to lookAt
var newPoint = new THREE.Vector3(
    object.position.x + worldNormalRef.x,
    object.position.y + worldNormalRef.y,
    object.position.z + worldNormalRef.z
);

object.up = face.normal;//Z axis up
object.lookAt(newPoint ); 

还要注意的是object.up应如上设置为face.normal(脸我要对齐参考对象的脸),而不是上面设置的worldNormal(我会删除我的这部分代码)。



文章来源: Issue aligning faces in Three.JS from two seperate objects