From a0fcc4cc6298e0655da9b916816cc2615c83b303 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Mon, 8 Jun 2026 12:12:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(render):=20=E5=88=87=E7=89=87=E5=81=B6?= =?UTF-8?q?=E5=B0=94=E5=81=9C=E9=A1=BF=E6=A0=B9=E5=9B=A0=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20=E2=80=94=20=E4=BD=93=E7=BB=98=E5=88=B6=E6=94=B9=E5=85=A8?= =?UTF-8?q?=E7=A8=8B=E7=BB=9F=E4=B8=80=E5=85=A8=E8=B4=A8=E9=87=8F=20+=20?= =?UTF-8?q?=E6=92=A4=E9=94=80=E8=AF=8A=E6=96=AD=E5=9F=8B=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实测(render_verify + 帧耗时埋点)定位: 体绘制走 GPU(RTX3060), 每帧~7ms(669帧全<21ms), 渲染根本不慢; 前判"CPU回退"错误。"偶尔停顿"是帧间间隙, 非慢帧。 - 根因: ①诊断埋点每帧 flush 磁盘(偶发延迟) ②vtkSmartVolumeMapper AutoAdjust 的"停手补高清"突跳。 - 修: 撤销帧耗时埋点(及无效的 DesiredUpdateRate 改动); VoxelActor 关交互降采样(Auto/Interactive AdjustSampleDistances=0)→全程统一全质量(GPU 足够), 消除停手补帧的突跳。 - 全 40 测试绿; app 构建干净。 --- src/app/main.cpp | 4 ---- src/render/actors/VoxelActor.cpp | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index b58d03b..1260151 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -406,10 +406,6 @@ 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 973e97a..4dfd7ef 100644 --- a/src/render/actors/VoxelActor.cpp +++ b/src/render/actors/VoxelActor.cpp @@ -74,9 +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); + // 全程统一全质量(GPU 足够快, 实测 ~7ms/帧):关掉交互降采样, 避免"停手补高清"那一帧突跳停顿。 + mapper->SetAutoAdjustSampleDistances(0); + mapper->SetInteractiveAdjustSampleDistances(0); vtkNew prop; prop->SetColor(color);