【发布时间】: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 被剪裁掉。
类似问题:
我的问题和这个问题之间的区别在于,我同时更新了 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);
不幸的是,这仍然无法正常工作......
【问题讨论】: