至少根据文档,我了解 Eye.getEyeView 和 Eye.getPerspective 矩阵的作用。第一个获取相机的位置并将其转换为当前眼睛的位置。这考虑了头部跟踪和每个瞳孔的偏移量。第二个只是给出一个透视投影矩阵,这不依赖于头部跟踪,只依赖于每只眼睛的视野。
我不明白的是每只眼睛的视野之间的差异。我们的眼睛几乎是朝前的,所以它们应该是一样的吗?好吧,这些矩阵实际上是相当不同的。让我们看一下,这些是使用 SDK 中 TreasureHunt 示例的变体记录在 onDrawEye 方法中的:
左 EyeView 矩阵:
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
右 EyeView 矩阵:
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 效果。
谁能告诉我发生了什么?