1

特定の視点を持つシーンから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で変更できる何かが必要になりますか?

4

1 に答える 1

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
于 2013-01-02T18:22:23.597 に答える