美文网首页 SceneKit学习
SceneKit之渲染循环Render Loop

SceneKit之渲染循环Render Loop

作者: 沈枫_ShenF | 来源:发表于2019-05-09 09:59 被阅读5次

在使用SceneKit构建应用程序或游戏时,我们需要用 SCNView 来显示想要的场景,在渲染你的场景时,SCNView 会运行一个循环,该循环处理并绘制场景,SCNSceneRendererDelegate 中一系列方法展示了整个过程

so, 接下来,我们来详细研究下这个过程。

首先,放张图展示一下整个渲染循环:

SceneKit渲染器中的帧处理过程

each Frame 顺时针依次进行如图中的操作:

1.调用renderer(_ : updateAtTime time:), SceneKit 在每帧的渲染中会调用此方法一次,目的是将 game logic 游戏的业务逻辑加到循环中,调用过程中SceneKit立即更新场景中的各节点的层次结构,你对场景所做的任何改变都会立即反应并显示出来,可以在这里写一些基础逻辑,比如添加或移除node节点。

  1. SceneKit执行附加到场景图的动作SCNActionSCNAnimatable动画。SCNAction 我会在这篇文章中讲解。

  2. 调用 renderer(_:didApplyAnimationsAtTime:) ,此时场景中所有节点在这一帧的actions(动作)和animations(动画)都已经更新完成。

  3. Simulates Physics:物理效果模拟。这部分会在这篇文章中讲解。

  4. 调用renderer(_:didSimulatePhysicsAtTime:),此时物理效果模拟已经完成,可以在这里添加和物理效果有关的代码, 比如node在受到一个力影响后改变颜色。

  5. Evaluates Constraints:约束更新。

  6. 调用renderer(_:willRenderScene:atTime:),渲染器已经清除了视窗并准备渲染场景,此时即将要渲染场景,可以在这里对场景做最后的更改。

  7. Renders the scene graph in the view,在view中渲染场景。

  8. 调用renderer(_: didRenderScene: atTime:),完成场景渲染。

小结

通常,我们构建一款游戏应用,会设计出一套游戏玩法gameplay,玩法中各项任务涉及到的游戏逻辑game logic就需要我们实现,那 SCNSceneRendererDelegate 就给出了我们去实现这些逻辑的方法。
需要注意的是,默认情况下,如果一个场景中没有任何改变时,Scene Kit会进入paused状态,渲染循环暂停后代理方法将不会继续调用,为了防止这种情况,需要设置SCNView 的playing属性为true:

scnView.playing = true

相关文章

  • SceneKit之渲染循环Render Loop

    在使用SceneKit构建应用程序或游戏时,我们需要用 SCNView 来显示想要的场景,在渲染你的场景时,SCN...

  • 3-Render-Loop渲染循环

    文章选自掘金苹果API搬运工的文章[SceneKit专题]3-Render-Loop渲染循环主要记录自己在学习AR...

  • [SceneKit专题]3.Render Loop渲染循环

    说明 本系列文章是对<3D Apple Games by Tutorials>一书的学习记录和体会此书对应的代码地...

  • [SceneKit专题-OC]3.Render Loop渲染循环

    说明 本系列文章的学习首先要感谢史前图腾的共享精神,在他的系列文章中有详细的解释,但是他的代码都是Swift写的....

  • AutoLayout原理

    视图更新和渲染循环(render loop)有关,工作流程如下图: 主要分三步: 更新约束,从下往上,最终到达Wi...

  • SceneKit学习-Render Loop九步

    学会Render Loop九步,这个框架就学完了(开玩笑?NO!) 这些方法总是按照顺序来执行,因此可以在我们需要...

  • SceneKit 相关

    SceneKit SCNNode 结构图 通过两张图片,更好地了解SCNNode的结构 一个渲染循环 渲染循环内做...

  • #3 THREEJS 动画

    1.render loop中使场景产生动画 可以在循环中使用 requestAnimationFrame 函数,这...

  • Rendering loop 渲染循环

    在大多数现代浏览器中,渲染循环使用requestAnimationFrame (RAF)方法。如果RAF不可用,它...

  • 33-循环结构(LOOP、WHILE、REPEAT)

    一、循环结构之-LOOP LOOP循环语句用来重复执行某些语句。LOOP内的语句一直重复执行直到循环被退出(使用L...

网友评论

    本文标题:SceneKit之渲染循环Render Loop

    本文链接:https://www.haomeiwen.com/subject/irpioqtx.html