From 876d88c251fa3421a6698b6ef0a061f811320659 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Wed, 17 Jun 2026 16:32:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(vtk):=20=E5=9C=B0=E5=BD=A2=E5=8D=8A?= =?UTF-8?q?=E9=80=8F=E6=98=8E(0.55)-=E6=A0=B9=E5=9B=A0=E6=98=AF=E5=89=96?= =?UTF-8?q?=E9=9D=A2=E6=94=B9=E7=9C=9F=E5=AE=9E=E9=AB=98=E7=A8=8B=E5=90=8E?= =?UTF-8?q?=E8=90=BD=E5=9C=B0=E4=B8=8B,=E4=B8=8D=E9=80=8F=E6=98=8E?= =?UTF-8?q?=E5=9C=B0=E5=BD=A2=E4=BB=8E=E4=BE=A7=E9=9D=A2=E9=81=AE=E6=8C=A1?= =?UTF-8?q?=E5=9C=B0=E4=B8=8B=E5=89=96=E9=9D=A2;=E5=8D=8A=E9=80=8F?= =?UTF-8?q?=E6=98=8E=E5=90=8E=E5=89=96=E9=9D=A2=E5=8F=AF=E4=BB=8E=E4=BB=BB?= =?UTF-8?q?=E6=84=8F=E8=A7=92=E5=BA=A6=E9=80=8F=E8=BF=87=E5=9C=B0=E9=9D=A2?= =?UTF-8?q?=E7=9C=8B=E5=88=B0(=E4=B8=93=E4=B8=9A=E5=9C=B0=E7=90=83?= =?UTF-8?q?=E7=89=A9=E7=90=86=E4=B8=89=E7=BB=B4=E6=A0=87=E5=87=86=E5=81=9A?= =?UTF-8?q?=E6=B3=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/TileBasemap.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/TileBasemap.cpp b/src/app/TileBasemap.cpp index a3444f7..d4788f7 100644 --- a/src/app/TileBasemap.cpp +++ b/src/app/TileBasemap.cpp @@ -50,6 +50,7 @@ constexpr double kGroundZ = 0.0; // 底图置于 z=0 地面参考(剖面 constexpr double kZEps = 0.02; // 每层级 Z 微偏移:高层级压上面,避免共面瓦片 z-fighting constexpr int kHardCap = 400; // 瓦片硬上限:超过则即便未落地也强制清理,兜底内存 constexpr double kPi = 3.14159265358979323846; +constexpr double kTerrainOpacity = 0.55; // 地形半透明:地下剖面可从任意角度透过地面看到(不再被遮挡) // 地面起伏:Mapbox terrain-RGB DEM 瓦片(原版 web 同款源,全球 CDN,比 AWS Terrarium 快)。 // 公式 elev(米) = -10000 + (R*65536 + G*256 + B)*0.1。数据到 z15,更高层级取祖先块。 @@ -388,6 +389,7 @@ vtkSmartPointer TileBasemap::buildFlat(int z, int x, int y, actor->SetMapper(mapper); actor->SetTexture(tex); actor->GetProperty()->LightingOff(); // 底图不受场景光照 + actor->GetProperty()->SetOpacity(kTerrainOpacity); // 半透明:不遮挡地下剖面 // 注意:UseBounds 保持默认 true → 参与相机裁剪面计算,否则底图会被裁剪面"蒙版"切掉。 // 坐标轴/取景不被底图撑大,由 VtkSceneView 改用"数据自身包围盒"解决(非靠 UseBounds=false)。 return actor; @@ -501,6 +503,7 @@ vtkSmartPointer TileBasemap::buildWarped(int sz, int sx, int sy, int d actor->SetMapper(mapper); actor->SetTexture(tex); actor->GetProperty()->LightingOff(); + actor->GetProperty()->SetOpacity(kTerrainOpacity); // 半透明:不遮挡地下剖面 return actor; // UseBounds 默认 true:参与裁剪面,避免被"蒙版"切掉 }