2013-04-28 113 views
2

我有一个THREE.PlaneGeometry,与ComputeFaceNormals()。我使用这个几何创建了两个网格,并应用了不同的旋转。我想计算相机和两个网格中心面法线之间的两个角度。它应该是:three.js所:转换脸局部空间正常到世界空间

vLocalCamera = vCamera.position - mesh1.position; 

mesh1.normal() . vLocalCamera = cos(angle); 

的问题是,我不知道如何让网世界正规坐标(从几何和网格旋转)与three.js所API

回答

4

如果你要脸正常,normal,从局部空间到世界空间转换,你做它像这样:

var normalMatrix = new THREE.Matrix3().getNormalMatrix(object.matrixWorld); 

var worldNormal = normal.clone().applyMatrix3(normalMatrix).normalize(); 

three.js所河58

0

我finaly发现一只老发帖说three.js所不计算世界很正常的,所以我用手工做的,并能正常工作。虽然,可能有更好的方法来做到这一点。如果其他人有兴趣:

var rotationMatrix = new THREE.Matrix4().extractRotation(this.mesh.matrixWorld); 
    this.normalWorld = this.geometry.faces[0].normal.clone().applyMatrix4(rotationMatrix); 

    var vLocalCamera = new THREE.Vector3(); 
    vLocalCamera.subVectors(wbEngine.wb_getCamera().getPosition(), this.mesh.position); 
    var cosTheta = Math.abs(this.normalWorld.dot(vLocalCamera.normalize())); 
+1

这个答案只会在特殊情况下工作。一般来说它不会工作。请参阅我的回答。 – WestLangley 2013-04-30 23:58:57