Изменение точки зрения SCNRenderer

Я создаю SCNRenderer из сцены с определенной точкой зрения. Я использую SCNView, чтобы сделать видимой мою точку зрения, и когда объектная сцена выглядит так, как я хочу, я визуализирую ее в автономном openGLContext, чтобы сделать из нее изображение. Это соответствующий бит кода:

SCNRenderer *lRenderer = [SCNRenderer rendererWithContext:openGLContext.CGLContextObj options: nil];
lRenderer.scene = self.sceneView.scene;
lRenderer.pointOfView = [self.sceneView.pointOfView clone];
[ lRenderer render ];

Я обнаружил, что клонирование точки зрения заставляет визуализатор отображать сцену точно так же, как это делает SCNView. Пока идеально.

Теперь я хочу изменить точку зрения. Например, я хотел бы установить вращение на что-то независимое от вида сцены, скажем, на 0. Итак, я делаю:

lRenderer.pointOfView.rotation = SCNVector4Make(1,1,1,M_PI_2);

перед вызовом [lRenderer render] и это ничего не меняет.

Любое свойство, которое я изменяю в lRenderer.pointOfView, похоже, не имеет значения. Но если я пропущу строку lRenderer.pointOfView = [self.sceneView.pointOfView clone], рендерер будет рендерить с точки зрения по умолчанию, а не с точки зрения self.sceneView, поэтому должно быть что-то в клонированном SCNNode, что я могу изменить в lRenderer.pointOfView, что будет иметь эффект?


person Kristof Van Landschoot    schedule 02.01.2013    source источник


Ответы (1)


Единственное, что здесь выглядит подозрительно, это то, что ваша "клонированная" точка зрения не является частью сцены. Итак, я бы попробовал:

SCNNode *anotherPointOfView = [self.sceneView.pointOfView clone]; //clone
[[self.sceneView.pointOfView parentNode] addChildNode:anotherPointOfView]; //add to the scene (here at the same hierarchy level as the original point of view)

lRenderer.pointOfView = anotherPointOfView; //set the new point of view as the pov of the offscreen renderer
person toyos    schedule 02.01.2013
comment
Вы, наверное, имеете в виду [lRenderer.scene.rootNode addChildNode: lRenderer.pointOfView], верно? self.scene не имеет члена pointOfView, он имеет тип SCNScene. - person Kristof Van Landschoot; 03.01.2013
comment
о нет, я имел в виду [self.sceneView.pointOfView addChildNode: AnotherPointOfView]; исправлено - person toyos; 03.01.2013