Учитывая два трехмерных вектора A и B, мне нужно вывести матрицу вращения, которая вращается от A до B.
Вот что я придумал:
- Вывести косинус из
acos(A . B) - Получить синус из
asin(|A x B| / (|A| * |B|)) - Используйте A x B в качестве оси вращения
- Используйте матрицу, указанную внизу этой страницы ( угол оси)
Это работает нормально, за исключением поворотов 0 (которые я игнорирую) и 180 (которые я рассматриваю как особый случай). Есть ли более изящный способ сделать это с помощью библиотеки Direct3D? Я ищу конкретный ответ Direct3D.
Изменить: удалены acos и asin (см. сообщение Хью Аллена)