我们在使用cesium的时候有时会遇到一个问题就是模型导入之后,模型没有固定住会随着视角的变化而移动,研究发现模型在地底下。我认为是建模的问题有可能是建模软件使用的坐标不是wgs84导致高程不一的原因,但我没试过。
解决方案是:1.打开深度检测 2.手动把模型提上来
打开深度检测
viewer.scene.globe.depthTestAgainstTerrain = true;
移动模型(原生js)文章来源:https://www.toymoban.com/news/detail-562306.html
let l = new Cesium.Cesium3DTileset({
url: `./terra_b3dms/tileset.json`,//这里是模型地址
maximumScreenSpaceError: 1
});
//这里是移动的距离
const tx = 0;
const ty = 0;
const tz = 120;
l.readyPromise.then(function (argument) {
viewer.scene.primitives.add(l);
const cartographic = Cesium.Cartographic.fromCartesian(
l.boundingSphere.center
);
const surface = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
cartographic.height
);
const m = Cesium.Transforms.eastNorthUpToFixedFrame(surface);
//平移
const _tx = tx ? tx : 0;
const _ty = ty ? ty : 0;
const _tz = tz ? tz : 0;
const tempTranslation = new Cesium.Cartesian3(_tx, _ty, _tz);
const offset = Cesium.Matrix4.multiplyByPoint(
m,
tempTranslation,
new Cesium.Cartesian3(0, 0, 0)
);
const translation = Cesium.Cartesian3.subtract(
offset,
surface,
new Cesium.Cartesian3()
);
l.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
viewer.zoomTo(l);
});
如果你觉的手动配置太low了,还有一个思路,但是我没试过;
你可以获取模型的坐标在获得模型所在地形的高度在赋值给模型;
如果走通了,记得发我一份┗|`O′|┛ 嗷~~文章来源地址https://www.toymoban.com/news/detail-562306.html
到了这里,关于解决cesium中3dtiles模型随视角移动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!