首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重SCNView音频错误

多重SCNView音频错误
EN

Stack Overflow用户
提问于 2017-07-31 13:57:14
回答 1查看 238关注 0票数 2

我正在工作的游戏,支持正常的游戏和虚拟现实使用SceneKit。在正常播放时,我有一个SCNView,一个摄像头,它也对应于视点音频侦听器。当切换到VR模式时,我将屏幕分割成两个SCNView,它们都是从两个不同的摄像机播放相同的场景,而音频侦听器位于它们之间,这里没有问题。

在我的游戏中,我需要位置音频,所以我使用SCNAudioSuorce使用一个SCNAction来播放声音效果,但是由于相同的场景在两个视图中都在播放,我怎么能使其中一个静音,而音频只来自另一个呢?我已经搜索了网络和文档,但是没有发现任何关于这个的东西。

iOS 11 Update:在iOS 11上测试我的应用程序并尝试在VR模式下播放声音之后,该应用程序在__UpdateAudioTransform的呈现队列线程上崩溃,因为我播放该声音,将其从动作(包括其他节点转换)中删除,使游戏运行良好。

更新1:多亏@rickster的建议,我尝试实现了一个SCNTechnique,并在下面的苹果文档中得到了以下内容

代码语言:javascript
复制
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" ]
    ])

其中,stereoCameraLeftNamestereoCameraRightName在其他地方被定义为字符串,并用作包含相应摄像机和视图的节点的名称,维度仅用于测试。当我将这种技术应用到场景中时,它不起作用,根据场景pointOfView的设置方式,我要么看到整个场景中充满了背景颜色(pointOfView设置为用于非VR模式的相机,不再链接到场景图形),要么看到使用两个摄像机中的一个(pointOfView设置为nil)呈现的全部大小,我遗漏了什么?

更新2:经过一些试验和错误之后,我发现为自定义视图定义简单传递的正确方法是这样的,wh被定义为CGFloat

代码语言:javascript
复制
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" ]
])

但是有一个问题:当第二次通过时,屏幕的左边仍然是黑色(清晰的颜色),而右边是正确的,如果我排除了这一次,只留下第一次,左侧就会正确地呈现,右边会出现与预期的场景背景颜色相同的情况。奇怪的是,如果没有在运行iPhone 11的iOS 6s上进行测试,而是在模拟器(iOS 11)上进行测试,那么我肯定在将这两次测试结合在一起时遗漏了一些东西。

更新2.1:从第二次传递中删除blendStates的提供了相同的结果。

更新3:试图重新创建一个MWE以重新创建问题--我发现我的方法是正确的,我将尝试调查我项目的其他部分,以找出问题所在。

最终更新:问题似乎是由视图中的反别名导致的,禁用它可以使SCNTechnique正常工作,就像iOS 11的一个bug,我已经提交了一份错误报告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 20:31:23

这是试图在多个视图中呈现相同场景的一系列问题之一。(其他包括性能和并发性。)相反,它可能是一个更好的选择,只使用一个视图,并使用SCNTechnique渲染视图的场景两次。

当您配置一种技术时,您可以为每一张抽签单分别设置pointOfView --如果您要寻找立体声分离,这可能会非常方便。

您还可以为每次传递设置viewport。如果你在做某种立体声渲染,你可以用这个让一个渲染过程覆盖视图的一半,另一个渲染传递覆盖另一半。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45417930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档