背景
我在我的移动设备上运行VTK KiwiViewer source,并且我正在使用它来制作使用点云的VR场景,其中用户的手机充当VR护目镜。
我从CMDeviceMotion获得attitude
,它为x,y和z轴(分别为俯仰,滚转和偏航)提供了Euler Angles。
我试图在不利用Cardboard SDK的情况下获得Google Cardboard Experience。原因是因为Kiwi已经导入了我需要测试的所有模型。
方案
Kiwi使用基于XYZ坐标的系统进行摄像头位置和 Focal Point 。以下是您必须使用的三个对象来定位VR视图:
现在,我始终将相机位置置于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体验?
答案 0 :(得分:1)
你需要找出,Euler角度的常规是什么(X * Y * Z
是常见的,但你的SDK可能会使用另一个)。然后,查找according rotation matrix。您的视图方向将是此矩阵的最后一列(如果使用右手坐标系,则为其反向)。向上方向将是第二列。
如果您的SDK允许您直接设置视图矩阵,则可以使用转置的旋转矩阵(并添加第四行和第0列和m44=1
)。