我不明白法线是怎么用三个数来计算的。
我的问题是:
我创造了一个简单的平面
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();
但我还是得到了同样的结果。
我错过什么了吗?
如何从三个值中获得法线的正确值?
谢谢。
发布于 2014-04-17 10:41:50
几何法线在物体空间中。要将它们转换为世界空间,首先要确保更新了对象矩阵。
object.updateMatrixWorld();
(渲染器在每个呈现循环中为您执行此操作,因此您可以跳过此步骤。)
然后,计算正常矩阵:
var normalMatrix = new THREE.Matrix3().getNormalMatrix( object.matrixWorld );
现在,把正常的空间转换成这样的世界空间:
var newNormal = normal.clone().applyMatrix3( normalMatrix ).normalize();
three.js r.66号
https://stackoverflow.com/questions/23139442
复制