fix(vtk): 地形半透明(0.55)-根因是剖面改真实高程后落地下,不透明地形从侧面遮挡地下剖面;半透明后剖面可从任意角度透过地面看到(专业地球物理三维标准做法)
This commit is contained in:
parent
e718336385
commit
876d88c251
|
|
@ -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<vtkActor> 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<vtkActor> 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:参与裁剪面,避免被"蒙版"切掉
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue