【发布时间】:2015-01-25 13:32:40
【问题描述】:
我的 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();
其中:object 是我要旋转的对象,face 是该对象的选定面,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) 或类似的方式旋转,有时如果我预先旋转对象,它只会稍微旋转一点。
理论上,lookAt 使用我的 faceRef 所在的世界向量,只要我正确设置了“向上”,它应该可以工作,但不能。
有什么想法吗?
【问题讨论】:
标签: javascript three.js normals