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

Я, наконец нашел старый что 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