使用ARCore Frame旋转对象。以整体姿势

时间:2019-04-04 14:39:46

标签: android unity3d quaternions arcore

我正在创建用于ARCore和Unity锻炼的室内导航应用程序。

该应用与该网址Navigation App Using ARCore上的应用非常相似

主要区别在于相机从上方跟随指针,而指针是箭头。还有另一个对象(红色立方体)显示手机的方向。

我已经成功地从手机中获得了姿势旋转,并将其用于红色立方体上:

myRedCube.transform.rotation = Frame.Pose.rotation;

现在,我只需要根据手机的移动方向在x-z平面上旋转箭头,以使用户看到他要去的地方(相机从上方看向指针)。如果我设置一个固定角度,则可以很好地工作,但是如果我使用ARCore的角度,旋转角度将与我预期的不同。

我尝试提取Frame.Pose.rotation的y欧拉角,并用于:

arrow.transform.rotation = Quaternion.Euler(0,myYAngle,0);

但是旋转不正确。

我做过的另一项测试是使用传递给LookRotation的定向向量:

Vector3 tempVector = Quaternion.AngleAxis(myYAngle, Vector3.up) * Vector3.forward;
arrow.transform.rotation = Quaternion.LookRotation(tempVector);

在这种情况下,箭头也不考虑x-z平面上的旋转。 在这两个示例中,myYAngle是从Frame.Pose.rotation.eulerAngles属性获得的。

在四元数的提取与新旋转的应用之间,我可能会丢失一些东西。

有人可以解释我如何从Frame.Pose中操纵旋转四元数以达到所需的效果吗?欢迎使用其他建议的方法。我正在使用三星Galaxy S9测试该应用程序。

enter image description here

0 个答案:

没有答案