From 6c60f5a83d88e8aaa94e021f61b23e98d9c121ed Mon Sep 17 00:00:00 2001 From: gaozheng Date: Mon, 8 Jun 2026 11:49:53 +0800 Subject: [PATCH] =?UTF-8?q?perf(render):=20=E6=8B=96=E5=88=87=E7=89=87?= =?UTF-8?q?=E4=B8=8D=E5=8D=A1=20=E2=80=94=20=E4=BA=A4=E4=BA=92=E6=97=B6?= =?UTF-8?q?=E4=BD=93=E7=BB=98=E5=88=B6=E8=87=AA=E5=8A=A8=E9=99=8D=E9=87=87?= =?UTF-8?q?=E6=A0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 反馈: 开体素时拖切片卡(每帧全质量重渲 GPU 体绘制跟不上拖动帧率)。 - 修: 切片交互时 interactor DesiredUpdateRate=20fps + VoxelActor mapper Auto/InteractiveAdjustSampleDistances → 拖动时体绘制自动降采样提帧率, 松手按 StillUpdateRate 恢复全质量。 - 全 40 测试绿; app 构建干净。 --- src/app/main.cpp | 4 ++++ src/render/actors/VoxelActor.cpp | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/app/main.cpp b/src/app/main.cpp index 1260151..b58d03b 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -406,6 +406,10 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re } vtkRenderWindowInteractor* interactor = renderWindowPtr->GetInteractor(); if (*showSlice && interactor) { + // 交互时目标帧率↑→体绘制自动降采样(AutoAdjustSampleDistances),拖切片不卡; + // 松手后按 StillUpdateRate 恢复全质量。 + interactor->SetDesiredUpdateRate(20.0); + interactor->SetStillUpdateRate(0.001); const std::vector stops = vcs.stopValues(); const double vmn = stops.size() >= 2 ? stops.front() : 0.0; const double vmx = stops.size() >= 2 ? stops.back() : 1.0; diff --git a/src/render/actors/VoxelActor.cpp b/src/render/actors/VoxelActor.cpp index 0037171..973e97a 100644 --- a/src/render/actors/VoxelActor.cpp +++ b/src/render/actors/VoxelActor.cpp @@ -74,6 +74,9 @@ vtkSmartPointer buildVoxel(const geopro::core::ScalarVolume& vol, // SmartVolumeMapper:有 GPU 走 GPU ray cast,否则自动回退 CPU,避免无 GPU 时卡死/失败。 vtkNew mapper; mapper->SetInputData(img); + // 交互时按 DesiredUpdateRate 自动降采样(与切片共渲时拖动更流畅);静止恢复全质量。 + mapper->SetAutoAdjustSampleDistances(1); + mapper->SetInteractiveAdjustSampleDistances(1); vtkNew prop; prop->SetColor(color);