2013-01-02 1 views
1

특정 시점에서 장면에서 SCNRenderer를 생성 중입니다. SCNView를 사용하여 뷰의 내 시점을 표시하고 객체 장면이 원하는 것처럼 보이면 오프라인 openGLContext에서 이미지를 렌더링하여 렌더링합니다.SCNRenderer의 PointOfView 변경

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

나는 관점의 복제가 렌더러가 SCNView가 작동하는 것과 같은 방식으로 장면을 렌더링하게 발견이 코드의 관련 비트입니다. 지금까지 완벽 해.

이제 시점을 조정하고 싶습니다.

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

[lRenderer render]를 호출하기 전에이는 일을 변경하지 않습니다 : 예를 들어, 내가 씬 뷰의 독립적 인 무언가에 회전을 설정하려는, 나는 수행의 그래서 0을 가정 해 봅시다.

lRenderer.pointOfView에서 변경 한 모든 속성은 중요하지 않습니다. 하지만, 라인 lRenderer.pointOfView = [self.sceneView.pointOfView clone]을 생략하면 렌더러는 self.sceneView의 관점 대신 기본 시점에서 렌더링되므로 복제 된 SCNNode에는 효과가있는 lRenderer.pointOfView에서 변경할 수있는 무언가가 있어야합니까?

답변

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 
+0

당신은 아마 의미'[lRenderer.scene.rootNode addChildNode : lRenderer.pointOfView]'맞죠? self.scene에는 pointOfView 멤버가 없으며 SCNScene 유형입니다. –

+0

호 아니, 내가 의미 [self.sceneView.pointOfView addChildNode : anotherPointOfView]; 참으로 트릭을하는 것으로 보이는 – toyos

+0

을 수정했습니다. 감사! –