【发布时间】:2019-04-04 15:24:47
【问题描述】:
我有一个 SceneKit 场景,其中包含来自 .dae 文件(从 Blender 导出)的参考节点以及直接在场景编辑器中添加的各种相机和灯光。为了使参考节点在编辑器中以正确的方向显示,它应用了旋转 (-90, 0, 0)。这不会延续到应用内视图,因此我已经成功地在从 viewDidLoad() 调用的函数中应用了旋转。
自从今天重构以来,没有发生轮换。代码仍然尝试以相同的方式应用更正 - 这只是一个整理。
各种 hack 确实成功地旋转了节点:
- 将旋转应用为持续时间为零的
SCNAction.rotateTo(),而不是node.eulerAngles = - 安排稍后应用轮换 (
Timer.scheduledTimer(...))
这两者都表明存在时间问题,即我没有达到的预重构。 SceneKit 节点旋转是否仅在节点至少被渲染一次时才生效?幕后肯定有一些优化,因为即使延迟分配到 node.eulerAngles 也只会在导致值发生变化时对呈现的内容产生影响。
编辑:
仔细比较之前和之后的代码版本,发现了一个看似不重要的顺序变化。在原始文件中,我添加了一些生成的节点(SCNNode 的子类,其平面使用SKScene 作为纹理)在 旋转参考节点(有效)之前。重构后,该顺序已颠倒。节点是兄弟姐妹,而不是后代,所以我不明白为什么这很重要,除非 SKScene-as-texture 将事情放慢到足以避免一些优化?
【问题讨论】:
标签: scenekit