Реализация Python-функции pyquaternion.rotation_matrix в DirectX - PullRequest
0 голосов
/ 22 мая 2019

Я конвертирую код бывших программистов, написанных на Python, в DirectX, и у меня возникают проблемы с правильной ориентацией угла.

Библиотека Python, которую они используют для импорта и составления матриц вращения: pyquaternion https://github.com/KieranWynn/pyquaternion/blob/master/pyquaternion/quaternion.py

Это фрагмент кода Python:

q = Quaternion(quaternion)
R = q.rotation_matrix

Мой код на C ++ таков: где q_0 ... q_3 - элементы кватерниона

FXMVECTOR v_quaternion= XMLoadFloat4(&XMFLOAT4(q_0, q_1, q_2, q_3))
viewMatrix = XMMatrixRotationQuaternion(v_quaternion);

Я не разбираюсь в python, но из библиотеки я понимаю, что первый элемент в pyquaternion - это действительное число, а остальные 3 - значения i, j и k ,

Согласно этому документу, структура FXMVECTOR должна иметь переменные-члены X, Y, Z и W. Но это не так, потому что он typedef введен как XMVECTOR в DirectXmath.h, и я не знаю, в каком порядке мне нужно вводить элементы кватерниона для его построения.

Я проверял оба FXMVECTOR v_quaternion= XMLoadFloat4(&XMFLOAT4(q_0, q_1, q_2, q_3)) а также FXMVECTOR v_quaternion= XMLoadFloat4(&XMFLOAT4(q_3, q_0, q_1, q_2))

Излишне говорить, что все мои камеры были ориентированы в совершенно неправильных местах.

Итак, мои 2 вопроса:

  1. Как правильно построить кватернион из представления {Real, I, J, K} в DirectX11

  2. Как правильно преобразовать этот кватернион в матрицу вращения в DirectX

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...