2017-12-17 17 views
1

vtk 렌더 윈도우를 만들면 다른 렌더러를 추가 할 수 있고 각 렌더러마다 다른 관점에서 렌더링 할 수 있습니다. 실제로 장면을 렌더링하는 데는 vtk 렌더 윈도우 메서드 인 render()를 사용하여 모든 렌더러를 병렬로 렌더링합니다. 이제 zbuffer를 포함하는 배열을 반환하는 GetZbufferData라는 vtk 렌더링 윈도우 메서드가 있습니다. 그래서 내 질문은, 어떤 렌더러가이 z 버퍼를 대응시키는 것입니까? 설명해 주셔서 감사합니다.vtk 렌더 윈도우 GetZbufferData 메소드

답변

1

모든 렌더러가 동일한 창에 있으면 동일한 Z 버퍼도 같은 프레임 버퍼를 공유하게됩니다. 질문에 대한 간단한 대답은 "모두에게"입니다. 개별 z 값을 얻으려면 렌더러에서 수행중인 작업에 따라 다릅니다.

"타일링 된 뷰"를 수행하는 경우 각 렌더러에 다른 뷰포트 (vtkRenderer::SetViewport(), here 등)를 할당하려고합니다. 그런 다음 GetZBufferData 함수에 적절한 x, y 좌표를 전달하여 주어진 "타일"(렌더러)에 대한 z 데이터에 액세스 할 수 있습니다. 같은 뷰포트가있는 경우

double x1 = ren1->GetViewport()[0] * (renWin->GetSize()[0] - 1); 
double y1 = ren1->GetViewport()[1] * (renWin->GetSize()[1] - 1); 
double x2 = ren1->GetViewport()[2] * (renWin->GetSize()[0] - 1); 
double y2 = ren1->GetViewport()[3] * (renWin->GetSize()[1] - 1); 

float *ren1Z = renWin->GetZbufferData(
    static_cast<int>(x1),static_cast<int>(y1),static_cast<int>(x2), 
    static_cast<int>(y2)); 

, 그것은 더 복잡 될 것이다 : 예를 들어, vtkRenderWindow renWinren1를 렌더러에 속한 Z 버퍼의 전체 부분을 얻을 수 있습니다. vtkRenderWindow::SetNumberOfLayers(int)을 설정하여 여러 "레이어"가있는 렌더 윈도우를 만들 수 있으며 각 렌더러를 다른 레이어 (vtkRenderer::SetLayer(0-based layer index))에 할당 할 수 있습니다. 그런 다음 창은 레이어 0에서 마지막 레이어로 렌더링됩니다. 특정 렌더러의 z- 데이터를 하나만 가져 오는 데 관심이있는 경우 마지막 레이어에서 렌더링하면 가져와야합니다. 그러나, z 버퍼가 개별 렌더러 렌더러 사이에서 청소되는지 확실하지 않습니다. 실제로는 그렇지 않을 것이라고 내기 때문에 일관성없는 혼란이 생길 ​​수 있습니다.