2016-11-02 54 views
5

mam SCNScene z animowanych obiektów (. DAE plików), a także mam SCNRender zainicjowana openGLContext. Po ustawieniu animowanej sceny do renderowania nie widzę animacji, ale po ustawieniu animowanej sceny na SCNView widzę animacje.SCNRender sceny z animowanymi obiektami

jak ustawić Render:

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

Rozumiem, że OpenGL może jedynie zwrócić przedmioty, nie wie nic o ustawieniach animacji w moim pliku .dae wiedzieć

Czy ktoś mógłby mi wyjaśnić jak Mogę narysować animowaną scenę za pomocą SCNRender inicjalizowanej przy użyciu openGLContext?

Odpowiedz

0

Wydaje się, że podczas wywoływania następujących funkcji:

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

czas parametr jest naprawdę ważne. Zanim opuściłem go zerem i nie było animacji. Jeśli ustawisz go za pomocą CFAbsoluteTimeGetCurrent(), wydaje się, że możesz otrzymać tylko jedną animację (właśnie ją przetestowałem) Mój bohater gry ma akcję strzelania, jak również chodzącą i ustawiając atTime z CFAbsoluteTimeGetCurrent() , pojawia się tylko chodzący.)

Jednak nasze sytuacje są trochę inne. W moim przypadku mam również SCNView, który oddaje perspektywę bohatera. Tak, aby uruchomić wszystkie animacje, stworzyłem zmienną GLOBE:

var globeTime:TimeInterval = 0 

i zapisany aktualny czas w funkcji renderer na SCNView za:

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

I wreszcie przekazał go do mojego SCNRender.

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

To rozwiązało doskonale mój problem.