2017-12-17 14 views
1

私が理解しているように、vtkレンダリングウィンドウを作成すると、別のレンダラーを追加することができ、レンダラーごとに異なる見方からレンダリングすることができます。いいえ、実際にシーンをレンダリングするには、vtkのレンダーウィンドウのメソッドrender()を使用して、すべてのレンダラーを並行してレンダリングします。現在、GetZbufferDataという名前のvtkレンダリングウィンドウメソッドがあります。このメソッドは、明らかにzバッファを含む配列を返します。だから私の質問は、どのレンダラーがこのzbufferに対応しているのですか? ありがとうございました。vtkレンダリングウィンドウGetZbufferDataメソッド

答えて

1

すべてのレンダラーが同じウィンドウにある場合、それらは同じフレームバッファーを共有するので、同じzバッファーも共有します。あなたの質問に対する簡単な答えは、「すべての人に」です。個々のZ値を取得するには、レンダラーで正確に何をしているかによって異なります。

「タイル表示」を実行している場合は、各レンダラーに異なるビューポート(vtkRenderer::SetViewport()hereなど)を割り当てる必要があります。その後、適切なx、y座標をGetZBufferData関数に渡すことによって、特定の「タイル」(レンダラー)のzデータにアクセスできます。例えば、vtkRenderWindow renWinren1をレンダラーに属する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::SetNumberOfLayers(int)を設定することで、複数の「レイヤー」を持つレンダリングウィンドウを作成し、各レンダラーを別のレイヤー(vtkRenderer::SetLayer(0-based layer index))に割り当てることができます。ウィンドウはレイヤー0からレイヤーの最後までレンダリングされます。特定のレンダラーのZデータを1つだけ取得することに興味がある場合は、最後のレイヤーでレンダリングした場合に取得する必要があります。しかし、私はzバッファが個々のレンダラのレンダリングの間でクリーンアップされているかどうかはわかりませんが、実際にはそうではないと賭けているので、矛盾した混乱を招くかもしれません。