您好,登錄后才能下訂單哦!
這篇文章主要介紹“Cesium怎么調整3dtile高度”,在日常操作中,相信很多人在Cesium怎么調整3dtile高度問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Cesium怎么調整3dtile高度”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在3dtile的制作過程中,如果原始的數據中,模型數據存在高程,在生成的3dtile中也會存在高程的信息,這時就需要在系統中,底圖數據的高程也要存在,這樣才能和3dtile進行匹配,不過,Cesium的開發文檔中,也提供一個在數據加載完成后,動態調整3dtile高度的方式,有一定限制是整體調整3dtile的高度,即改變3dtile的整體高程差。
API文檔參照:https://cesiumjs.org/Cesium/Build/Documentation/Cesium3DTileset.html
具體實現的代碼如下:
//定義viewer
var viewer = new Cesium.Viewer('cesiumContainer');
var tileset = new Cesium.Cesium3DTileset({
url: '3dtile在線地址',
show: true
});
//加載3dtile
viewer.scene.primitives.add(tileset);
//3dtile加載完成后執行
tileset.readyPromise.then(function(tileset) {
// 定位到3dtiles的位置
viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -20, 0));
//高度偏差,向上是正數,向下是負數
var heightOffset = -1063.0;
//計算tileset的綁定范圍
var boundingSphere = tileset.boundingSphere;
//計算中心點位置
var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
//計算中心點位置的地表坐標
var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
//偏移后的坐標
var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);
var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
//tileset.modelMatrix轉換
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
});
按照真實數據測試了一下效果,轉換后高度是變化了,但是拉到太近,模型會顯示不出來,可以根據實際測試一下效果,還是建議在3dtile生成的過程中,完成高度的調整,沒有轉換過程,也能提高系統的性能。
到此,關于“Cesium怎么調整3dtile高度”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。