如何在ArCore中将世界空间中的旋转转换为局部空间中的旋转

时间:2019-07-12 11:38:52

标签: java android kotlin quaternions arcore

我用四元数表示世界旋转。我需要将这个世界旋转转换为局部旋转。

我有一个用四元数表示的世界旋转:

val rotationQuaternion: Quaternion = scene.camera.worldRotation

这种旋转看起来像这样:

localRotation = rotationQuaternion

但是它会影响其他多个世界和局部转换,因此我需要将此旋转转换为局部旋转。

使用方法worldToLocalDirection在我看来是正确的,因此我需要从rotationQuaternion中提取方向(我相信是这样的):

val direction = Quaternion.rotateVector(rotationQuaternion, Vector3.forward())

然后我得到了一个本地空间方向:

val vectorInLocalSpace: Vector3 = worldToLocalDirection(direction)

我必须返回四元数:

worldRotation = Quaternion.lookRotation(Vector3.forward(), vectorInLocalSpace)
val rotationQuaternion: Quaternion = scene.camera.worldRotation
val direction = Quaternion.rotateVector(rotationQuaternion, Vector3.forward())
val vectorInLocalSpace: Vector3 = worldToLocalDirection(direction)
worldRotation = Quaternion.lookRotation(Vector3.forward(), vectorInLocalSpace)

我阅读了多篇文章,并应用了总结的步骤。虽然,整个事情看起来完全不正确。

0 个答案:

没有答案