2016-11-02 2 views
5

Ich habe SCNScene mit animierten Objekten (. Dae-Dateien) und ich habe auch SCNRender mit openGLContext initialisiert. Wenn ich meine animierte Szene auf diesen Renderer eingestellt habe, sehe ich keine Animation, aber wenn ich meine animierte Szene auf SCNView setze, sehe ich Animationen.SCNRender Szene mit animierten Objekten

, wie ich Render gesetzt:

self.renderer = [SCNRenderer rendererWithContext:_openGLContext options:nil]; 
self.renderer.autoenablesDefaultLighting = YES; 
self.renderer.playing = YES; 
self.renderer.scene = myAnimatedScene; 

Ich verstehe, dass OpenGL nur Objekte zeichnen können, es weiß nichts über Animationseinstellungen in meinem .dae Datei

Kann jemand mir erklären, wie Ich kann animierte Szene unter Verwendung SCNRender initialisiert mit openGLContext?

Antwort

0

Es scheint, dass beim Aufruf der folgenden Funktion:

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

die Zeit Parameter wirklich wichtig ist. Vorher habe ich es einfach bei Null gelassen und es gab keine Animationen. Wenn Sie es mit CFAbsoluteTimeGetCurrent() einstellen, scheint es, dass Sie nur eine Animation bekommen können (ich habe es gerade getestet. Mein Spielheld hat sowohl eine Schieß- als auch eine gehende Aktion und durch Setzen von atTime mit CFAbsoluteTimeGetCurrent() , erscheint nur das Gehen.)

Unsere Situationen sind jedoch ein bisschen anders. In meinem Fall habe ich auch eine SCNView, die die Perspektive des Helden darstellt. Also, um alle Animationen zu laufen, habe ich eine Kugel Variable:

var globeTime:TimeInterval = 0 

und rettete die aktuelle Uhrzeit in dem Renderer-Funktion des SCNView:

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

Und schließlich gab es an meinen SCNRender.

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

Dies löste mein Problem perfekt.

Verwandte Themen