2017-02-04 202 views
0

我理解Eye.getEyeView和Eye.getPerspective矩陣的角色,至少根據the documentation。第一個取得攝像頭的位置並將其轉換到當前眼睛的位置。這考慮到頭部跟蹤和每個學生的偏移量。第二個只是給出了一個透視投影矩陣,這不依賴於頭部跟蹤,而僅僅在每隻眼睛的視場上。瞭解eye.getEyeView()和eye.getPerspective矩陣

我不明白的是每隻眼睛的視野差異。我們的眼睛大致面向前方,他們應該是一樣的嗎?那麼矩陣實際上是非常不同的。讓我們一起來看看,這些都是在onDrawEye方法,使用SDK中TreasureHunt例子的變體記錄:

左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 

這些除了相差大約0.064的a_ {41}之外是相同的。單位是米我猜這是學生之間的距離?我可以看到爲什麼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效果。

任何人都可以啓發我什麼是怎麼回事?

回答

1

有意義的是,視圖矩陣在x軸上的偏離量 - 這是Daydream支持的標準瞳孔間距。請記住,您的視圖矩陣會在視點周圍變換世界,因此視圖的中心位於原始位置,並且在Y軸向上時指向上/下(取決於API)Z軸,因此x軸上的運動很有意義。

如果你看看尋寶樣本,他們考慮頭部位置/旋轉乘以head_view矩陣。

至於投影矩陣,你通常希望你的眼睛正確地指向焦點。這個偏移執行該操作 - 它正在移動焦點,這略微偏移了投影。它是偏心投影​​,在眼睛外側約45度,內側約50度(取決於設備)。

-Tom