Cesium引入Three同步相機

2021-09-26 14:33:57 字數 1930 閱讀 3891

這個帖子講述了如何在在cesium引入three,總結一下原理就是

html中設定兩個容器分別用於容納cesium與three,且three容器在cesium容器下面,這樣才能讓three產生的場景覆蓋在cesium上,並且禁用three容器的滑鼠事件,通過cesium同步three。

初始化ceiusm,初始化three(渲染器設定背景為透明,達成疊加效果),初始化物體並分別新增到各自的場景中

獲取指定位置的座標,將three場景的座標設定為指定位置的座標,並設定朝向與top方向

關掉three相機的自動更行,複製cesium相機的fov與matrix並賦值給three相機,更新three相機,cesium+three同步

一、原帖中採用的three原始碼為r87版本,基於原版本可以正常執行,如果切換為r87後的版本則會發現沒有報錯但是cesium正常顯示但是three模型顯示不出的問題

解決方案:r87版本中的object3d函式的lookat方法的形參是vector3,後續版本的lookat方法的形參是將vector3拆分成三個引數傳入,所以更換為後續版本需要把原始碼中的lookat方法的實參進行改變才能正確顯示。

二、cesium與three正常載入後,cesium地圖閃爍

解決方案:這個問題可能是因為ceiusm與three重新整理不同步導致的,在專案中更新cesium版本後未發現有閃爍現象,所以推測可能更新cesium版本可以解決。

// 核心方法

function renderthreeobj() ;

// 物體位置調整

for (var id in _3dobjects)

//關閉相機自動更新

three.camera.matrixautoupdate = false;

// cesium相機位置

var cvm = cesium.viewer.camera.viewmatrix;

var civm = cesium.viewer.camera.inverseviewmatrix;

// 同步three相機位置設定

three.camera.matrixworld.set(

civm[0], civm[4], civm[8], civm[12],

civm[1], civm[5], civm[9], civm[13],

civm[2], civm[6], civm[10], civm[14],

civm[3], civm[7], civm[11], civm[15]

);three.camera.matrixworldinverse.set(

cvm[0], cvm[4], cvm[8], cvm[12],

cvm[1], cvm[5], cvm[9], cvm[13],

cvm[2], cvm[6], cvm[10], cvm[14],

cvm[3], cvm[7], cvm[11], cvm[15]

);// 相機設定引數

var width = threecontainer.clientwidth;

var height = threecontainer.clientheight;

var aspect = width / height;

three.camera.aspect = aspect;

three.camera.updateprojectionmatrix(); // 相機引數更新

// 渲染尺寸

three.renderer.setsize(window.innerwidth, window.innerheight);

three.renderer.render(three.scene, three.camera); // 更新渲染

}

記vue中引入cesium

因為個人原因,已經很久很久沒有寫過部落格了,但是學過的東西終歸還是要記錄滴,以下是在vue中引入cesium,具體步驟如下 一 首先安裝vue cli,因為之前接觸vue的時候都是自己手動配置webpack,感覺每一步都知道所以然,但是現在直接使用vue cli後確實是方便了很多,但是裡面好多的配置...

程序同步機制的引入 隨堂筆記

1.程序之間的相互制約關係 1 同步 程序之間的一種通訊方式,有時序上的制約關係,或者說是程序之間為了協同工作而存在的一種等待關係。2 互斥 程序之間對臨界資源的一種競爭關係,排他性的對資源進行訪問。2.臨界資源 定義 在一段時間,只允許乙個程序訪問的資源,這種資源也稱為獨佔資源。3.臨界區 定義 ...

同步非同步動態引入js檔案的幾種方法總結

同步非同步動態引入js檔案的幾種方法總結 動態載入js檔案 有時候我們需要根據引數不同來引入不同的js檔案,用html直接寫標籤滿足不了我們的需求,總結幾種方法,以及同步 非同步載入的各種需求 一.直接載入 總結 1.ie動態載入js檔案時,它預設就為同步,可以不用設定同步 也可直呼叫skip.in...