Получение нормали грани меша с помощью raycaster intersectObjects - Three.js

Я попытался получить нормаль поверхности сетки, используя это:

ray = new THREE.Raycaster(x, y); 
var intersection = ray.intersectObjects(objectsOptical, true);
var vector = intersection[0].face.normal;

Добавлено пересечение[0].point и пересечение[0].face.normal (умноженное на константу) как одна вершина и пересечение[0].point как вторая вершина (серой) линии. И я получил это (красные линии — это лучи, а серые должны быть нормалями, но это не так): Иллюстративное изображение

Пожалуйста, помогите мне получить НОРМАЛЫ сетки FACE.

Спасибо.


person Štěpán Venos    schedule 08.02.2014    source источник


Ответы (1)


Нормали, которые вы нанесли красными линиями, выглядят так, как будто они могут быть правильными с учетом перспективной проекции.

Тест raycast попадает в одну треугольную грань вашей сетки. Нормаль, на которую вы ссылаетесь, является нормалью для объекта лица, на который попадает луч, т.е. из оригинальной сетки.

В исходном коде THREE.Raycaster можно увидеть, что вычисления пересечения возвращают грань напрямую.

В другом месте предполагается, что для Ray.intersectObjects() требуются центроиды лица. Однако я не уверен в этом, поскольку исходный код не относится к центроидам.

Возможно, нормали в исходной геометрии были неправильными. Сначала попробуйте эту функцию:

geometry.computeFaceNormals();
person ʀᴏʙ    schedule 09.02.2014