perf(render): 拖切片不卡 — 交互时体绘制自动降采样
- 反馈: 开体素时拖切片卡(每帧全质量重渲 GPU 体绘制跟不上拖动帧率)。 - 修: 切片交互时 interactor DesiredUpdateRate=20fps + VoxelActor mapper Auto/InteractiveAdjustSampleDistances → 拖动时体绘制自动降采样提帧率, 松手按 StillUpdateRate 恢复全质量。 - 全 40 测试绿; app 构建干净。
This commit is contained in:
parent
65283492fb
commit
6c60f5a83d
|
|
@ -406,6 +406,10 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
||||||
}
|
}
|
||||||
vtkRenderWindowInteractor* interactor = renderWindowPtr->GetInteractor();
|
vtkRenderWindowInteractor* interactor = renderWindowPtr->GetInteractor();
|
||||||
if (*showSlice && interactor) {
|
if (*showSlice && interactor) {
|
||||||
|
// 交互时目标帧率↑→体绘制自动降采样(AutoAdjustSampleDistances),拖切片不卡;
|
||||||
|
// 松手后按 StillUpdateRate 恢复全质量。
|
||||||
|
interactor->SetDesiredUpdateRate(20.0);
|
||||||
|
interactor->SetStillUpdateRate(0.001);
|
||||||
const std::vector<double> stops = vcs.stopValues();
|
const std::vector<double> stops = vcs.stopValues();
|
||||||
const double vmn = stops.size() >= 2 ? stops.front() : 0.0;
|
const double vmn = stops.size() >= 2 ? stops.front() : 0.0;
|
||||||
const double vmx = stops.size() >= 2 ? stops.back() : 1.0;
|
const double vmx = stops.size() >= 2 ? stops.back() : 1.0;
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,9 @@ vtkSmartPointer<vtkVolume> buildVoxel(const geopro::core::ScalarVolume& vol,
|
||||||
// SmartVolumeMapper:有 GPU 走 GPU ray cast,否则自动回退 CPU,避免无 GPU 时卡死/失败。
|
// SmartVolumeMapper:有 GPU 走 GPU ray cast,否则自动回退 CPU,避免无 GPU 时卡死/失败。
|
||||||
vtkNew<vtkSmartVolumeMapper> mapper;
|
vtkNew<vtkSmartVolumeMapper> mapper;
|
||||||
mapper->SetInputData(img);
|
mapper->SetInputData(img);
|
||||||
|
// 交互时按 DesiredUpdateRate 自动降采样(与切片共渲时拖动更流畅);静止恢复全质量。
|
||||||
|
mapper->SetAutoAdjustSampleDistances(1);
|
||||||
|
mapper->SetInteractiveAdjustSampleDistances(1);
|
||||||
|
|
||||||
vtkNew<vtkVolumeProperty> prop;
|
vtkNew<vtkVolumeProperty> prop;
|
||||||
prop->SetColor(color);
|
prop->SetColor(color);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue