SCNRender场景与动画对象

时间:2016-11-02 10:54:51

标签: ios animation opengl-es scenekit

我的 SCNScene 包含动画对象(。 dae 文件),并且 SCNRender 使用 openGLContext 初始化。 当我将动画场景设置为此渲染时,我看不到动画,但是当我将动画场景设置为 SCNView 时,我会看到动画。

我如何设置渲染:

Mechanism

据我所知,OpenGL只能绘制对象,它对 .dae 文件中的动画设置一无所知

有人可以解释我如何使用开放式文件初始化 SCNRender 来绘制动画场景吗?

1 个答案:

答案 0 :(得分:0)

在调用以下函数时似乎:

var globeTime:TimeInterval = 0

time 参数非常重要。在我刚离开它之前没有动画。如果你用CFAbsoluteTimeGetCurrent()设置它,你似乎只能得到一个动画(我刚测试过它。我的游戏英雄有射击动作和行走动作,并设置 atTime 使用CFAbsoluteTimeGetCurrent(),只显示行走的那个。)

然而,我们的情况有点不同。就我而言,我还有一个SCNView渲染英雄的视角。因此,为了运行所有动画,我创建了一个globe变量:

func renderer(_ aRenderer: SCNSceneRenderer,
              updateAtTime time: TimeInterval) {
    globeTime = time
    //...
}

并将当前时间保存在SCNView的渲染器功能中:

//...
renderer.render(atTime: globeTime, viewport: viewport,
                commandBuffer: commandBuffer,
                passDescriptor: renderPassDescriptor)

最后将它传递给我的SCNRender。

SELECT "Live" AS source, a.date, a.name, a.id, a.trn
  FROM archive AS a JOIN live AS l
    ON a.name = l.name AND a.id = l.id AND a.trn = l.trn
UNION  ALL
SELECT "Archive" AS source, a.date, a.name, a.id, a.trn
  FROM archive AS a
 WHERE NOT EXISTS(
       SELECT * FROM live AS l
        WHERE a.name = l.name AND a.id = l.id AND a.trn = l.trn
       )

这完全解决了我的问题。