2017-07-03 92 views
0

我想混合虛擬現實和增強現實。 目標是我有一個立體相機(每隻眼睛)。立體ARSCNview使虛擬現實(迅速)

我試着把viewCotnroller放在2 ARSCNView,但看起來ARkit只能同時啓用1 ARWorldTrackingSessionConfiguration。我認爲它可能需要這麼多fashData或其他東西..但我該怎麼做?

我研究了將視圖的圖形表示複製到另一個視圖,但無法找到。 請幫我找。

我發現這個鏈接,也許可以把它照亮我們: ARKit with multiple users

這裏是我的問題的一個樣本:

https://www.youtube.com/watch?v=d6LOqNnYm5s

PS:之前我不像帖子,評論爲什麼!

回答

2

下面的代碼基本上是哈爾說的。我以前在github上寫了幾行,可能可以幫助你開始。(簡單的代碼,沒有桶形失真,不需要調整窄視場)。基本上,我們將同一場景連接到第二個ARSCNView(因此兩個ARSCNView都看到相同的場景)。無需獲得ARWorldTrackingSessionConfiguration與2個ARSCNView一起工作。然後,我們抵消它的pointOfView,因此它被定位爲第二隻眼睛。

https://github.com/hanleyweng/iOS-Stereoscopic-ARKit-Template

+0

OMG,這是我正在尋找的exaclty!我在這種迅速的代碼中很新穎。謝謝你這麼多伴侶:-) – Matt

3

ARSession documentationARSession是一個共享對象。

每個使用ARKit構建的AR體驗需要一個ARSession對象。如果您使用 ARSCNView 或 ARSKView 對象來輕鬆構建AR體驗的視覺部分,則視圖對象包含ARSession實例。如果您爲AR內容構建自己的渲染器,則需要自己實例化和維護ARSession對象。

所以最後一句話中有線索。而不是兩個ARSCNView實例,請使用SCNView並在它們之間共享單個ARSession

我期望這是一個常見的使用案例,所以值得申請雷達來請求立體聲支持。

現在該怎麼做?

單(singleton)會話只有一個代表。您需要兩個不同的委託實例,每個視圖一個。你可以通過一個將委託消息發送到每個視圖的對象來解決這個問題。可以解決,但有點額外的工作。

還有一個問題,即需要兩個稍微不同的相機位置,每個眼睛一個立體視覺。 ARKit使用一臺相機,放置在iOS設備的位置,因此您必須對此進行模糊處理。

然後,你必須處理每隻眼睛的不同桶形失真。

這對我來說,寫了我自己的自定義對象來攔截ARKit委託消息,將座標轉換爲我從兩臺不同攝像機看到的內容,並管理兩個不同的SCNView(不是ARSCNView)。或者可以使用一個ARSCNView(一隻眼睛),截取其幀更新,並將這些幀傳遞給SCNView(另一隻眼睛)。

文件雷達,張貼數字,我會欺騙它。

+0

非常感謝您的非常完整的答案! – Matt

+0

但是ARSession不參與SCNView。我終於無法想象如何做到這一點。代理需要包含ARSession的所有數據,但這是不可能的,因爲我們無法訪問所有這些數據。或者,也許我的知識有點差...... – Matt

+0

使用ARSessionDelegate方法之一,可能是'session(_ session:ARSession,didUpdate frame:ARFrame)''。在那裏捕獲AR框架,將它傳遞給您的自定義調度程序,調度程序將其傳遞給每個SCNView以用作背景。就像我說的,很多工作。而且你仍然在爲每隻眼睛使用相同的照相機圖像,所以我認爲即使讓它工作,它也不會令人滿意。 –