Расчет поворота объекта по нормали к плоскости - PullRequest
0 голосов
/ 02 августа 2020

В настоящее время я работаю над процедурно сгенерированным ландшафтом с использованием симплексного шума и алгоритма маршевых кубов. Я завершил процесс создания наземного меня sh, на котором будут ie разные сущности, такие как растения. Однако визуализированные модели всегда будут указывать вверх, а не в направлении, на которое указывает треугольная грань, в которой они l ie. Это превращает их в землю, что выглядит не очень хорошо. Я уже вычислил нормали каждого треугольника, поэтому мне интересно, как бы преобразовать нормаль три angular лица в 3D-поворот XYZ для модели.

На изображении ниже показана моя текущая проблема:

Модели растений с обрезкой введите описание изображения здесь

1 Ответ

0 голосов
/ 05 августа 2020

Просто возьмите векторное произведение вектора вверх с нормалью плоскости. Это даст вам ось вращения. Затем возьмите скалярное произведение вектора вверх на нормаль плоскости, что даст вам косинус угла поворота. Итак, у вас есть:

Axis = normalize(cross(up, normal))

Angle = acos(dot(up, normal))

Затем вы можете построить кватернион или матрицу вращения по оси и углу.

См .: https://en.m.wikipedia.org/wiki/Rodrigues%27_rotation_formula

https://en.m.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle

https://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm

...