Opengl 如何反转四元数的两个轴

Opengl 如何反转四元数的两个轴,opengl,graphics,arcore,quaternions,Opengl,Graphics,Arcore,Quaternions,我必须从我正在使用的两个不同的API转换姿势(坐标+旋转的四元数)。更具体地说,我得到了对象相对于相机局部位置的坐标 我的检测库(用于检测这些对象)具有相机的坐标系,该坐标系的方向是Z,X在相机的右侧,Y在相机的下方(如果从相机本身的角度看)。我将在这里使用ACII艺术来展示我的意思: Symbols: +------+ | | = camera from the back +------+ +--+ | +-+ | | = camera from the right

我必须从我正在使用的两个不同的API转换姿势(坐标+旋转的四元数)。更具体地说,我得到了对象相对于相机局部位置的坐标

我的检测库(用于检测这些对象)具有相机的坐标系,该坐标系的方向是Z,X在相机的右侧,Y在相机的下方(如果从相机本身的角度看)。我将在这里使用ACII艺术来展示我的意思:

Symbols:

+------+
|      | = camera from the back
+------+

+--+
|  +-+
|    |   = camera from the right side (imagine the front part as the lens)
|  +-+
+--+

但是,我使用对象姿势的库的X方向相同,但Y和Z方向都是反向的。所以Z指向与相机的观察方向相反的方向,Y指向正上方。更多ASCII草图:

Usage Coordinate System from the back of the camera

^ y    +------+
|      |      |
|      +------+
|
+--------> x
使用摄像机右侧的坐标系
+--+
|+-+^y
|    |         |
|  +-+         |
+--+           |

z在这种情况下,基的变化只是轴的排列,所以要从一个轴转换到另一个轴,只需在四元数的虚向量中复制相同的排列


i、 e.如果你的四元数是(w,x,y,z),基置换是(z,y,x),你的新四元数是(w,z,y,x)。

我认为这可能有助于(如果不是完全解决)你的问题。嗯,我这里不是在处理变换矩阵,而是处理坐标四元数对。您是否建议将它们转换为变换矩阵,转换坐标系,然后再转换回坐标四元数对?我不确定这是否是一种有效的方法,因为我必须在每帧中多次进行这些转换,因此帧速率也会非常昂贵。我不确定是否可以在四元数旋转之间进行转换,否则。。。但是我可能是错的,因为我没有使用四元数好的,请参阅仅使用四元数的解决方案的公认答案。不需要转换。所以在这种情况下,我只是从(w,x,y,z)到(w,x,-y,-z)?我想是的(我没有太多地跟踪转换)好吧,看起来它实际上很简单。谢谢你的帮助。为了将来,请记住。所有的基础都是,是一组坐标。因此,重要的是将基础的变化复制到坐标。如果轴切换,坐标也会切换。
Detection Coordinate System from the right side of the camera

+--------> z
|     +--+
|     |  +-+
|     |    |
V y   |  +-+
      +--+
Usage Coordinate System from the back of the camera

^ y    +------+
|      |      |
|      +------+
|
+--------> x
Usage Coordinate System from the right side of the camera

+--+
|  +-+         ^ y
|    |         |
|  +-+         |
+--+           |
    z <--------+