2017-07-03 84 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以用作背景。就像我说的,很多工作。而且你仍然在为每只眼睛使用相同的照相机图像,所以我认为即使让它工作,它也不会令人满意。 –