如何在三个js中获得正常的正确值?

时间:2014-04-17 17:15:17

标签: javascript three.js

我不明白如何在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获得正常的正确值?

感谢。

1 个答案:

答案 0 :(得分:7)

几何法线在对象空间中。要将它们转换为世界空间,首先要确保更新对象矩阵。

object.updateMatrixWorld();

(渲染器在每个渲染循环中为您执行此操作,因此您可以跳过此步骤。)

然后,计算正常矩阵:

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

现在将法线转换为世界空间,如下所示:

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

three.js r.66