【问题标题】:VTK Camera Clipping with 2 Renderers带有 2 个渲染器的 VTK 相机剪辑
【发布时间】:2020-05-09 10:50:00
【问题描述】:

当前设置:

  • 我在 2 内有 2 个渲染器、gridRenderer 和 geoRenderer 渲染窗口的层数:
gridRenderer->SetLayer(0);
geoRenderer->SetLayer(1);
RenderWindow()->SetNumberOfLayers(2);
RenderWindow()->AddRenderer(geoRenderer);
RenderWindow()->AddRenderer(geoRenderer);
  • 然后我通过将他们的两个活动摄像头设置为同一个来连接他们的交互器:
 gridRenderer->SetActiveCamera(geoRenderer->GetActiveCamera());

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

问题:

  • 相机的剪裁平面仅聚焦于 geoRenderer,导致更大的 gridRenderer 的 actor 被剪裁掉。

类似问题:

  • https://gitlab.kitware.com/vtk/vtk/issues/17107

  • 我的问题和这个问题之间的区别在于,我同时更新了 gridRender 和 geoRenderer 的演员,有时会完全删除渲染器中的所有演员(空渲染器可能会弄乱裁剪平面,不渲染任何东西,如果相机选择它作为活动渲染器)。

  • 我的假设是,VTK 对使用哪个渲染器来设置共享相机的剪裁平面感到困惑。我尝试在两个渲染器上使用vtkRenderer::ResetCameraClippingRange(),但无法正确形成剪切平面

  • 有什么方法可以告诉 VTK 在重置剪裁平面/相机时要查看哪个渲染器?

更新:

  • 我已经开始使用总和手动设置剪切范围 ComputeVisiblePropBounds 呼叫,以及禁用 vtkInteractorStyle::AutoAdjustCameraClippingRange 这样:
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);

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

【问题讨论】:

    标签: c++ rendering vtk


    【解决方案1】:

    重要更新:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 记录了这个,连同其他一些信息,并更新了帖子
      猜你喜欢
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多