2014-04-17 21 views
1

我不明白如何正常計算threejs。如何在threejs中獲得法線的正確值?

這裏是我的問題:

我創建了一個簡單的平面

var plane = new THREE.PlaneGeometry(10, 100, 10, 10); 
var material = new THREE.MeshBasicMaterial(); 
material.setValues({side: THREE.DoubleSide, color: 0xaabbcc}); 
var mesh = new THREE.Mesh(plane, material); 
mesh.rotateY(Math.PI/2); 
scene.add(mesh); 

當我讀到正常該平面的,我得到(0,0,1)。 但是該平面與z軸平行,因此這個值是錯誤的。

我嘗試添加

mesh.geometry.computeFaceNormals(); 
mesh.geometry.computeVertexNormals(); 

,但我仍然得到同樣的結果。

我錯過了什麼嗎?

如何從threejs獲得法線的正確值?

謝謝。

+0

幾何法線在旋轉後不會重新計算? – CoccotCoder

回答

4

幾何法線在對象空間中。要將它們轉換爲世界空間,請首先確保對象矩陣已更新。

object.updateMatrixWorld(); 

(渲染這是否對你在每個渲染循環,所以你可以跳過這一步)

然後,計算正常矩陣:

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

現在變換正常世界的空間,像這樣:

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

three.js所r.66

+0

這正是我正在尋找的!你能否ev。幫助我翻譯法線:世界空間到地方空間? (最後我需要一個local-world-local2翻譯) –

+0

@tomaspolach如果您需要幫助,請發佈問題。 – WestLangley

+0

如何在「normal.clone()。applyMatrix3」中獲得「正常」? – arpo