我正在从具有特定视角的场景创建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上更改的内容有效果吗?
答案 0 :(得分: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