我理解Eye.getEyeView和Eye.getPerspective矩阵的作用,至少根据the documentation。第一个取得相机的位置并将其转换到当前眼睛的位置。这考虑了头部跟踪和每个瞳孔的偏移。第二个只是给出了一个透视投影矩阵,这并不取决于头部跟踪,而只取决于每只眼睛的视野。
我不明白的是每只眼睛的视野之间的差异。我们的眼睛大致面向前方,它们应该是一样的吗?那么矩阵实际上是相当不同的。让我们来看看,这些是使用SDK中TreasureHunt示例的变体记录在onDrawEye方法中的:
左眼观察矩阵:
0.99938333 & 0.013064715 & 0.03259317 & 0.0 \\
-0.022139862 & 0.95490175 & 0.2960955 & 0.0 \\
-0.02725487 & -0.2966345 & 0.9546021 & 0.0 \\
0.03028951 & -0.0033823675 & 0.10220718 & 1.0
右眼观察矩阵:
0.99938333 & 0.013064715 & 0.03259317 & 0.0 \\
-0.022139862 & 0.95490175 & 0.2960955 & 0.0 \\
-0.02725487 & -0.2966345 & 0.9546021 & 0.0 \\
-0.03361049 & -0.0033823675 & 0.10220718 & 1.0
除了a_ {41}之外,它们是相同的,相差约0.064。单位是米,我想这是学生之间的距离?我可以看出为什么3x3方向矩阵是相同的。但我无法理解为什么第四行上的其他两个变化值a_ {42}和a_ {43}不同。只有一个轴的眼睛位置不同!对于每一帧来说,这并非偶然。
现在让我们检查一下透视矩阵:
左视角矩阵:
0.8990804 & 0.0 & 0.0 & 0.0 \\
0.0 & 0.762166 & 0.0 & 0.0 \\
0.106264874 & 0.08848558 & -1.00002 & -1.0 \\
0.0 & 0.0 & -0.0200002 & 0.0
右视角矩阵:
0.89908034 & 0.0 & 0.0 & 0.0 \\
0.0 & 0.762166 & 0.0 & 0.0 \\
-0.10626444 & 0.08848558 & -1.00002 & -1.0 \\
0.0 & 0.0 & -0.0200002 & 0.0
这些仅在a_ {31}中有所不同。我认为将单位应用于该值是不合理的(但如果我错了,请纠正我)。这似乎会使输出图像左移或右移约0.1。我希望这两个矩阵是相等的,并且在eyeView矩阵中要考虑差异。将两者都改为等于0会破坏3D效果。
任何人都可以告诉我发生了什么事吗?
答案 0 :(得分:1)
有意义的是,视图矩阵在x轴上偏离该量 - 这是Daydream中支持的标准瞳孔间距离。请记住,您的视图矩阵会改变视点周围的世界,因此视图中心位于原始位置并且向上/向下(取决于API)Z轴随Y向上,因此x轴上的运动是有意义的。
如果您查看寻宝样本,他们会在乘以head_view矩阵时考虑头部位置/旋转。
对于投影矩阵,您通常希望您的眼睛正确朝向焦点。该偏移执行该操作 - 它移动焦点,这稍微使投影偏斜。它是一个偏心投影,眼睛外侧约为45度,内侧约为50度(取决于设备)。
- 汤姆