我正在寻求用THREEJS制作一个地球仪,这个地球仪的范围从观察整个地球到观察城市。最简单的解决方案是使用maploader,但这不是我想要的。
这个想法是使用镶嵌技术,但是您可能会理解,如果将地球放大到某个国家或城市的水平,则地球可能会太细或不够细。
我当前的尝试是使用geoJson(http://makc.github.io/three.js/map2globe/)来创建地球,该地球在从最远的地方查看时都可以使用。然后,当我放大时,我会使用内置的LOD功能来在每次缩放到特定级别时更改地图。
我的LOD实现示例:
const earth = new Earth(1, null, '#6394b3', country_data);
const earth_low = new Earth(1, null, '#6394b3', country_data_low);
// both vertices from another file with different details
var earthGeometries = [
[earth, 1],
[earth_low, 2]
];
let earthMesh;
for (let i = 0; i < earthGeometries.length; i++) {
earthMesh = earthGeometries[i][0];
earthMesh.updateMatrix();
earthMesh.matrixAutoUpdate = false;
lod.addLevel(earthMesh, earthGeometries[i][1]);
}
lod.updateMatrix();
lod.matrixAutoUpdate = false;
group.add(lod);
这有效,但似乎确实使它不那么平滑,并且性能不如我期望的那样。
现在,我读了一篇博客(http://jeremybouny.fr/en/articles/webgl_lod/)帖子,该帖子使用了自定义LOD函数,但似乎无法使其在我的地球上正常工作。
任何人都可以通过指导我朝正确的方向提供帮助,或者给我一个有关如何处理此问题的基本示例!