我正在使用SceneKit支持正常播放和VR的游戏。当正常播放时,我有一个单一的SCNView
,一个摄像机也对应于视图音频监听器。当切换到VR模式时,我将屏幕分成两个,两个从两个不同的相机播放相同的场景,音频监听器位于它们之间,这里没有问题。多个SCNView音频错误
在我的比赛,我需要定位音频所以我用SCNAudioSuorce
用来播放声音效果SCNAction
但由于在同一场景中同时查看打我怎么能静音他们中的一个,并有声音只能从其他来的?我搜索了网页和文档,但没有发现任何关于此的信息。
iOS的11更新:测试iOS上11我的应用程序,并试图播放声音,而在VR模式下__UpdateAudioTransform
再现队列线程应用程序崩溃,因为我玩的声音,从动作中取出(后包括其他节点转换)使游戏运行良好。
更新1:感谢@rickster建议我尝试实施SCNTechnique
和下面的Apple文档我得到这个
SCNTechnique(dictionary: [
"passes" : [
"leftView": [
"draw": "DRAW_SCENE",
"pointOfView": stereoCameraLeftName,
"viewport": "(0, 0, 400, 400)"
],
"rightView": [
"draw": "DRAW_SCENE",
"pointOfView": stereoCameraRightName,
"viewport": "(200, 0, 400, 400)"
]
],
"sequence": [ "leftView", "rightView" ]
])
其中stereoCameraLeftName
和stereoCameraRightName
在其他地方定义为字符串,并用作节点的名称包含相应的摄像头和视口尺寸仅用于测试。当我将这种技术应用到场景中时,它不起作用,并且根据场景pointOfView
的设置,我要么看到充满背景色的完整场景(设置为用于非VR模式的相机的pointOfView
,不再链接到场景图)或使用两台相机之一渲染的全尺寸(pointOfView
设置为nil
),我错过了什么?
更新2:一些试错后,我发现,定义一个简单的通过自定义视正确的方法是这样的,有w
和h
定义为CGFloat
:
let technique = SCNTechnique(dictionary: [
"passes" : [
"leftView": [
"outputs": [ "color": "COLOR" ],
"draw": "DRAW_SCENE",
"colorStates": [
"clear": true,
"clearColor": "sceneBackground"
],
"pointOfView": stereoCameraLeftName,
"viewport": "0 0 \(w) \(h)"
],
"rightView": [
"outputs": [ "color": "COLOR" ],
"draw": "DRAW_SCENE",
"colorStates": [
"clear": false
],
"pointOfView": stereoCameraRightName,
"viewport": "\(w) 0 \(w) \(h)",
"blendStates": [
"colorOp": "add",
"alphaOp": "add"
]
]
],
"sequence": [ "leftView", "rightView" ]
])
但有是一个问题:当第二遍渲染时屏幕的左侧保持黑色(清晰的颜色)并且右侧渲染正确,如果我排除此遍只留下第一遍,则左侧正确渲染,右侧按预期与场景背景颜色一起出现。奇怪的是,如果不是在运行iOS 11的iPhone 6上进行测试,而是在模拟器(iOS 11)上进行测试,似乎都可以正常工作,但我相信我错过了将这两个传递相结合的东西。
更新2.1:从第二遍删除blendStates
给出了相同的结果。
更新3:试图重新创建MWE以重新创建问题我发现我的方法是正确的,我将尝试调查项目的其他部分以找到问题的位置。
最后更新:的问题似乎是由反锯齿的看法是积极造成的,禁用它使SCNTechnique
工作得很好,看起来像iOS的11的错误,我已经提交了一份bug报告。
谢谢我会研究它,你有任何教程/指南我应该读这个? –
我已经在定义技术方面取得了一些进展,正如你可以在我的问题中看到的那样,我只是使它无法工作的一小步。你有什么想法为什么它不能正常工作? –
关于您的最终更新:提交有关多重采样(反锯齿)的错误。请注意,通过使用技术,您可以控制基于每遍的多重采样,因此问题的一部分可能涉及视图特定和特定通过多重采样设置之间的冲突。 – rickster