将Euler角度转换为VR

时间:2016-06-06 21:34:42

标签: math game-engine vtk euler-angles

背景

我在我的移动设备上运行VTK KiwiViewer source,并且我正在使用它来制作使用点云的VR场景,其中用户的手机充当VR护目镜。

我从CMDeviceMotion获得attitude,它为x,y和z轴(分别为俯仰,滚转和偏航)提供了Euler Angles

我试图在不利用Cardboard SDK的情况下获得Google Cardboard Experience。原因是因为Kiwi已经导入了我需要测试的所有模型。

方案

Kiwi使用基于XYZ坐标的系统进行摄像头位置 Focal Point 。以下是您必须使用的三个对象来定位VR视图:

  • Focal Point :相机正在查看的点的xyz
  • 相机位置:相机位于3d空间的xyz
  • 相机向上:相对xyz控制相机的旋转

现在,我始终将相机位置置于0,0,0。我使用sin / cos和Euler Angles * 10将 Focal Point 设置为远离相机10个单位。设置摄像头位置 Focal Point 位置会自动将摄像头设置为可用的正确值。

设置焦点

x = -(sin(roll) * cos(pitch)) * 10;
y = cos(roll) * sin(pitch) * 10;
z = sin(yaw);

setCameraFocalPoint(x, y, z);

问题

我当前的设置工作正常,但它有一些令人讨厌的怪癖。我如何调整转换以获得更稳固的VR体验?

1 个答案:

答案 0 :(得分:1)

你需要找出,Euler角度的常规是什么(X * Y * Z是常见的,但你的SDK可能会使用另一个)。然后,查找according rotation matrix。您的视图方向将是此矩阵的最后一列(如果使用右手坐标系,则为其反向)。向上方向将是第二列。

如果您的SDK允许您直接设置视图矩阵,则可以使用转置的旋转矩阵(并添加第四行和第0列和m44=1)。