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:参与裁剪面,避免被"蒙版"切掉 }