【问题标题】:How to force SCNView to render a new frame?如何强制 SCNView 渲染新框架?
【发布时间】:2014-12-31 23:50:24
【问题描述】:

如果场景内没有动画,有没有办法强制 SCNView 按需渲染新帧?如果场景是静态的,SCNView 只渲染一次,然后仅在发生某些变化之后。

通常这是有道理的,但我正在与 Vuforia 增强现实框架一起工作,它要求我在每次处理来自相机的新视频帧时渲染一个新帧。我通过使用 CAEAGLLayer 创建自己的 UIView 来解决此问题,CAEAGLLayer 使用 SCNRenderer 呈现 SceneKit 内容。这很好,但我很好奇是否有办法使用 SCNView 来做到这一点,这样我就可以避免直接接触 OpenGL ES。

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

    更新

    从 iOS 11.0 和 macOS 10.13 开始,SCNView 上的 rendersContinuously 属性是强制视图连续渲染帧的首选方式。


    上一个答案

    您可以将其playing 属性设置为YES

    【讨论】:

    • 谢谢,很快。我不敢相信我忽略了这个属性。但这并不是我想要的,我需要一种方法来立即渲染单个帧。
    • SCNView 与显示链接绑定,这意味着它呈现 60fps 并与显示刷新同步。如果要决定何时绘制场景,则必须使用 SCNRenderer。
    • 我在 SCNView 上没有看到 playing 属性 - developer.apple.com/reference/scenekit/scnview,它被删除了吗?
    • 它基于developer.apple.com/reference/scenekit/scnscenerenderer 协议,SCNView 符合该协议
    • 这也解决了我的渲染卡顿问题:节点变换矩阵更新和实际绘制的更新节点之间存在延迟。
    【解决方案2】:

    您可以像这样增加sceneTime

    sceneView.sceneTime += 1
    

    然后它会渲染一个帧。

    【讨论】:

    • 不完全是我正在寻找的解决方案,但这解决了我的问题
    【解决方案3】:

    作为 UIView,您可以使用与任何其他 UIView 相同的机制来请求更新:[_sceneView setNeedsDisplay]; 但是,正如所指出的,这不应该用作驱动更新的主要方式,因为它不会与显示器同步。

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2015-05-22
      • 2014-07-27
      • 1970-01-01
      • 2019-11-12
      • 2016-12-31
      • 2021-05-10
      • 2019-06-25
      • 1970-01-01
      相关资源
      最近更新 更多