在DirectX中实现Python pyquaternion.rotation_matrix函数

时间:2019-05-22 01:20:00

标签: python c++ directx

我由以前用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个是ij ,和k值。

根据本文档,FXMVECTOR结构应该具有成员变量XYZW。但这不是因为{X typedef是DirectXmath.h中的XMVECTOR,而且我不知道为了构造它,我需要按什么顺序输入四元数元素。

我都测试过 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))

不用说,我所有的相机都完全放在错误的位置。

所以我的两个问题是:

  1. 从DirectX11中的{Real,I,J,K}表示形式构造四元数的正确方法是什么

  2. 在DirectX中将四元数转换为旋转矩阵的正确方法是什么

谢谢

0 个答案:

没有答案