三js:如何获取旋转平面的法线

Three js: How to get normal of rotated plane

我正在尝试获取旋转平面的法线。我的解决方案是 复制更新的平面 然后 获取法线 。 当我只旋转 1 个角度时它可以工作,但不能旋转 2 或 3 个角度。 jsFiddle

绿色一个是复制平面,紫色一个是旋转平面。 enter image description here

如何解决这个问题?请帮助我

我的复制功能:

 function copyPlane() {
    let copyPlaneGeom = new THREE.PlaneGeometry(3, 3, 3);
    copyPlaneGeom.rotateX(plane.rotation.x);
    copyPlaneGeom.rotateY(plane.rotation.y);
    copyPlaneGeom.rotateZ(plane.rotation.z);
    let copyPlane = new THREE.Mesh(copyPlaneGeom, new THREE.MeshBasicMaterial({color: 0x00ff00}));
        scene.add(copyPlane)
    
    let normals = copyPlane.geometry.faces[0].normal

我认为采用这种方法,您将始终获得 0, 0, 1 的向量,因为平面的法线始终是 (0, 0, 1) * objectRotation

相反,尝试从 0, 0, 1 的 Vector3 开始,然后对其应用对象的旋转:

var originalNormal = new Vector3(0, 0, 1);

// Get the mesh rotation
var objRotation = plane.rotation;

// Apply mesh rotation to vector
originalNormal.applyEuler(objRotation);

现在你有一个 Vector3,它带有更新的 wold 法线,而不是本地法线!了解 .applyEuler() here