刘勇虎的官方网站
网站内容包含大前端、服务器开发、Python开发、iOS开发、Android开发、网站维护等技术文章。专注于分享技术经验,职业心得体会,IT优秀文章与教程创作。
Stay hungry,Stay foolish,Stay young
设置 depthTestAgainstTerrain 为 false
viewer.scene.globe.depthTestAgainstTerrain = false;
True if primitives such as billboards, polylines, labels, etc. should be depth-tested against the terrain surface, or false if such primitives should always be drawn on top of terrain unless they’re on the opposite side of the globe. The disadvantage of depth testing primitives against terrain is that slight numerical noise or terrain level-of-detail switched can sometimes make a primitive that should be on the surface disappear underneath it.
如果广告牌、折线、标签等基本体应针对地形表面进行深度测试,则为True,如果这些基本体应始终绘制在地形之上,除非它们位于地球的另一侧,则为false。针对地形进行深度测试图元的缺点是,轻微的数字噪声或地形细节级别的切换有时会使应该在表面上的图元消失在其下方。
参考
https://cesium.com/learn/cesiumjs/ref-doc/Globe.html?classFilter=globe#depthTestAgainstTerrain
计算一个坐标点与3D Tile的距离通常需要考虑3D空间中的几何计算。这里我假设你想计算一个点与一个3D Tile中的几何体(比如一个三角网格模型)之间的距离。
理解3D Tile的几何体类型:3D Tile可以包含不同类型的几何体,比如三角网格(mesh)、点云(point cloud)等。你需要知道具体的几何体类型来决定如何计算距离。
获取点和3D Tile的表达:
计算距离:
如果3D Tile是一个三角网格模型(mesh):
如果3D Tile是一个包围盒(bounding box):
具体计算:具体的计算方法取决于你如何获取和表示3D Tile中的几何体,以及你希望计算的精度和效率要求。通常可以使用几何库(如CGAL、Open3D等)来帮助进行这些计算,这些库通常提供了点和三角形之间距离计算的函数。
根据具体情况选择合适的方法,这些步骤可以帮助你计算一个点与3D Tile之间的距离。
如果你在使用 Cesium 中,想要计算一个点与一个 3D Tile 之间的距离,通常需要通过一些几何计算来实现,因为 Cesium 并没有直接提供一个内置的方法来直接计算这种距离。
获取点的坐标:假设你有一个点的经纬度或者笛卡尔坐标 ( P(x_p, y_p, z_p) )。
获取3D Tile的信息:
计算距离:
Cartesian3
对象和 Cartesian3.distance
方法来计算两个点之间的距离。实现建议:
下面是一个简单的示例代码,假设我们要计算一个点与一个三角网格模型的最短距离:
// 假设有一个点的笛卡尔坐标
var point = new Cesium.Cartesian3(x_p, y_p, z_p);
// 假设有一个三角网格模型
var tile = ...; // 从你的场景或数据中获取
var minDistance = Number.POSITIVE_INFINITY;
// 遍历三角形
for (var i = 0; i < tile.geometry.attributes.position.values.length; i += 9) {
// 从三角网格模型中获取三角形的顶点坐标
var v1 = new Cesium.Cartesian3(tile.geometry.attributes.position.values[i],
tile.geometry.attributes.position.values[i + 1],
tile.geometry.attributes.position.values[i + 2]);
var v2 = new Cesium.Cartesian3(tile.geometry.attributes.position.values[i + 3],
tile.geometry.attributes.position.values[i + 4],
tile.geometry.attributes.position.values[i + 5]);
var v3 = new Cesium.Cartesian3(tile.geometry.attributes.position.values[i + 6],
tile.geometry.attributes.position.values[i + 7],
tile.geometry.attributes.position.values[i + 8]);
// 计算点到三角形的最短距离
var distance = Cesium.distanceToTriangle(point, v1, v2, v3);
// 更新最小距离
if (distance < minDistance) {
minDistance = distance;
}
}
// minDistance 就是点到三角网格模型的最短距离
console.log("Minimum distance from point to 3D Tile: " + minDistance);
在这个示例中,我们使用了 Cesium 的 distanceToTriangle
函数来计算点到三角形的最短距离,并通过遍历所有三角形来找到点与整个 3D Tile 的最短距离。
这种方法需要你能够访问和处理 3D Tile 中的几何信息,以及对 Cesium 几何计算库的理解和使用。