Три js: как получить нормаль повернутой плоскости

Я пытаюсь получить нормаль повернутой плоскости. Мое решение состоит в том, чтобы скопировать обновленную плоскость, а затем получить нормали. Он работает, когда я поворачиваю только на 1 угол, но не работает при вращении на 2 или 3 угла. jsFiddle

Зеленый — скопированная плоскость, фиолетовый — повернутая плоскость. введите здесь описание изображения

Как это решить? Помогите мне, пожалуйста

Моя функция копирования:

 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

person user1846418    schedule 23.11.2020    source источник


Ответы (1)


Я думаю, что при таком подходе вы всегда будете получать вектор 0, 0, 1, потому что нормаль к плоскости всегда (0, 0, 1) * objectRotation.

Вместо этого попробуйте начать с Vector3 из 0, 0, 1, а затем примените к нему вращение объекта:

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

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

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

теперь у вас есть Vector3 с обновленным мировым нормалем вместо локального нормаля! Прочитайте .applyEuler() здесь.

person Marquizzo    schedule 23.11.2020
comment
Большое спасибо! Это именно то, что я хочу. Вы спасли мой день :) - person user1846418; 25.11.2020