2013-04-28 116 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