使用 2 个渲染器的 VTK 相机剪辑

VTK Camera Clipping with 2 Renderers

当前设置:

gridRenderer->SetLayer(0);
geoRenderer->SetLayer(1);
RenderWindow()->SetNumberOfLayers(2);
RenderWindow()->AddRenderer(geoRenderer);
RenderWindow()->AddRenderer(geoRenderer);
 gridRenderer->SetActiveCamera(geoRenderer->GetActiveCamera());

这成功地让我在背景中有一个 网格 ,在前景中有一个 几何体

问题:

类似问题:

更新:

double geoCB[6];
double gridCB[6];
geoRenderer->ComputeVisiblePropBounds(geoCB);
gridRenderer->ComputeVisiblePropBounds(gridCB);
double finalCB[6];
for (int i = 0; i < 6; i++) {
  if (i % 2 == 0) {
    // Even Index is Min
    if (geoCB[i] < gridCB[i]) {
      finalCB[i] = geoCB[i];
    } else {
      finalCB[i] = gridCB[i];
    }
  } else {
    // Odd Index is Max
    if (geoCB[i] > gridCB[i]) {
      finalCB[i] = geoCB[i];
    } else {
      finalCB[i] = gridCB[i];
    }
  }
}
geoRenderer->ResetCameraClippingRange(finalCB);

不幸的是,这仍然无法正常工作...

也许您可以通过以下方式将裁剪范围明确设置为较大的值: vtkCamera.SetClippingRange(x0,x1)

重要更新:

  • 以上代码正确,每次调用即可 在 RenderWindow->Render().
  • 之前
  • 在创建我自己的 vtkRenderWindow 实现后,我只需要覆盖 Render(),将上面的代码放入其中,然后通过调用默认值 Render() 完成 ovveride
  • 如果您只是将最小裁剪平面设置为一个非常小的值,并将最大裁剪平面设置为一个非常大的值,它可能会起作用,但会破坏深度过滤器,从而完全搞乱整个渲染。