C++ 带有2个渲染器的VTK摄影机剪辑

C++ 带有2个渲染器的VTK摄影机剪辑,c++,rendering,vtk,C++,Rendering,Vtk,当前设置: 我有2个渲染器,gridRenderer和Georgender,在2之内 渲染窗口的层: gridRenderer->SetLayer(0); Georgender->SetLayer(1); RenderWindow()->SetNumberOfLayers(2); RenderWindow()->添加渲染器(Georgender); RenderWindow()->添加渲染器(Georgender); 然后,我通过将两个活动摄像头设置为同一个摄像头来连接他们的互动器:

当前设置:

  • 我有2个渲染器,gridRenderer和Georgender,在2之内 渲染窗口的层:
gridRenderer->SetLayer(0);
Georgender->SetLayer(1);
RenderWindow()->SetNumberOfLayers(2);
RenderWindow()->添加渲染器(Georgender);
RenderWindow()->添加渲染器(Georgender);
  • 然后,我通过将两个活动摄像头设置为同一个摄像头来连接他们的互动器:
gridRenderer->SetActiveCamera(Georgender->GetActiveCamera());
这成功地让我在背景中有一个网格,在前景中有一个几何体

问题:

  • 摄影机的剪裁平面仅聚焦在Georgender上,导致更大的gridRenderer的演员被剪裁掉

类似问题:

  • 我的问题与此问题的区别在于,我正在更新gridRender和Georgender的角色,有时会完全删除渲染器中的所有角色(如果摄影机选择空渲染器作为活动渲染器,空渲染器可能会弄乱剪裁平面,而不会渲染任何内容)

  • 我的假设是,VTK混淆了要使用哪个渲染器来设置共享摄影机的剪裁平面。我尝试在两个渲染器上使用
    vtkrender::ResetCameraClippingRange()
    ,但无法正确形成剪裁平面

  • 重置剪裁平面/摄影机时,是否有办法告诉VTK要查看哪个渲染器?

更新:

  • 我已经开始使用
    ComputeVisiblePropBounds
    调用,同时禁用
    VTKInteratorStyle::AutoAdjustCameraClippingRange
    如下:
double-geoCB[6];
双网格cb[6];
Georgender->ComputeVisiblePropBounds(geoCB);
gridRenderer->ComputeVisiblePropBounds(gridCB);
双重财务B[6];
对于(int i=0;i<6;i++){
如果(i%2==0){
//偶数索引为Min
if(geoCB[i]gridCB[i]){
finalCB[i]=geoCB[i];
}否则{
finalCB[i]=gridCB[i];
}
}
}
Georgender->ResetCameraClippingRange(finalCB);

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

也许您可以使用以下命令将剪裁范围显式设置为大值:
vtkCamera.setClippingGrange(x0,x1)
重要更新:

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

记下了这篇文章,以及其他一些信息,并更新了帖子