我由以前用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
。但这不是因为{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))
不用说,我所有的相机都完全放在错误的位置。
所以我的两个问题是:
从DirectX11中的{Real,I,J,K}表示形式构造四元数的正确方法是什么
在DirectX中将四元数转换为旋转矩阵的正确方法是什么
谢谢