Rom*_*yuk 6 animation opengl-es ios scenekit
我有SCNScene与动画对象(DAE文件)和我也有SCNRender与初始化openGLContext.当我将动画场景设置为此渲染时,我看不到动画,但是当我将动画场景设置为SCNView时,我会看到动画.
我如何设置渲染:
self.renderer = [SCNRenderer rendererWithContext:_openGLContext options:nil];
self.renderer.autoenablesDefaultLighting = YES;
self.renderer.playing = YES;
self.renderer.scene = myAnimatedScene;
Run Code Online (Sandbox Code Playgroud)
据我所知,OpenGL只能绘制对象,它对我的.dae文件中的动画设置一无所知
有人可以解释我如何使用openGLContext初始化的SCNRender绘制动画场景吗?
看来,当调用以下函数时:
renderer.render(atTime: time, viewport: viewport,
commandBuffer: commandBuffer,
passDescriptor: renderPassDescriptor)
Run Code Online (Sandbox Code Playgroud)
时间参数非常重要。在我将其保留为零并且没有动画之前。如果用CFAbsoluteTimeGetCurrent()设置的话,好像只能得到一个动画(我刚刚测试过,我的游戏英雄有射击动作,也有行走动作,通过CFAbsoluteTimeGetCurrent()设置atTime ,只能得到一个动画)行走的人出现了。)
然而,我们的情况有点不同。就我而言,我还有一个 SCNView 来渲染英雄的视角。因此,为了运行所有动画,我创建了一个 Globe 变量:
var globeTime:TimeInterval = 0
Run Code Online (Sandbox Code Playgroud)
并在SCNView的渲染器函数中保存当前时间:
func renderer(_ aRenderer: SCNSceneRenderer,
updateAtTime time: TimeInterval) {
globeTime = time
//...
}
Run Code Online (Sandbox Code Playgroud)
最后将其传递给我的 SCNRender。
//...
renderer.render(atTime: globeTime, viewport: viewport,
commandBuffer: commandBuffer,
passDescriptor: renderPassDescriptor)
Run Code Online (Sandbox Code Playgroud)
这完美解决了我的问题。
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |