c++ - 带有2个渲染器的VTK摄像机剪辑

标签 c++ rendering vtk

当前设置:

  • 我在 2中有 2个渲染器,gridRenderer和geoRenderer
    渲染窗口的图层:

  • gridRenderer->SetLayer(0);
    geoRenderer->SetLayer(1);
    RenderWindow()->SetNumberOfLayers(2);
    RenderWindow()->AddRenderer(geoRenderer);
    RenderWindow()->AddRenderer(geoRenderer);
    
  • 然后我通过将两个 Activity 摄像机都设置为同一摄像机来连接其交互器:

  •  gridRenderer->SetActiveCamera(geoRenderer->GetActiveCamera());
    

    这成功地使我在背景中具有网格,在前景中具有几何体。

    问题:
  • 相机的剪切平面仅聚焦在geoRenderer上,从而剪切出了更大的gridRenderer的actor。

  • enter image description here

    类似问题:
  • https://gitlab.kitware.com/vtk/vtk/issues/17107
  • 我的问题与这个问题之间的区别是,我同时更新了gridRender和geoRenderer的actor,有时会完全删除中的所有actor(空渲染器会弄乱剪切平面,而不渲染任何东西,如果摄像机选择它作为 Activity 渲染器)。
  • 我的假设是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);
    

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

    最佳答案

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

    关于c++ - 带有2个渲染器的VTK摄像机剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59873920/

    相关文章:

    c++ - 如何在 Ubuntu 20.04 上安装 libstdc++6 调试符号?

    java - LWJGL 加速渲染

    python - 如何从 tvtk PolyData 实例中提取顶点数据?

    jsf - JSF 中的条件渲染

    Android 系统 Webview 更新后的 Android WebView 渲染问题

    c++ - 如何用 VTK 存储 vector 场? C++、VTK编写器

    c++ - 程序在短暂渲染后立即自动停止

    c++ - 向doxygen中的多个组添加一个函数

    c++ - 如何禁用#pragma 警告?

    c++ - 位集、 bool vector 或简单大整数的整数 vector