CESIUM例子學習(一) 動態模型載入

2021-10-07 18:00:18 字數 1427 閱讀 7126

一直在學習cesium,時斷時續地用它,但感覺**不對,什麼都了解一點,但什麼沒有深入地去研究,都是浮於表面。於是下定決心:從頭開始,從cesium的sandcastle例子開始,系統地學一下cesium。並把它記錄下來,以便後面用時能很快找到。

把基本框架搭起來之後,就開始第乙個例子。如下圖(發動機葉片是轉動的):

viewer配置如下圖:

因為模型的發動機葉片是轉動的,為了使葉片轉動起來,shouldanimate: true。

這裡的模型調整不是指模型本身的動畫。模型在三維場景中除了有位置之外,還有模型的姿態。比如頭朝哪邊,左右傾斜多少度,模型縮放等等,**如下:

function createmodel (url, x, y, height) ,

});viewer.trackedentity = entity;

}

上面**中,

position設定entity的位置;

orientation: 設定entity的姿態;

需要注意這一行: var hpr = new cesium.headingpitchroll(heading, pitch, roll);

cesium api中是這樣說的:a rotation expressed as a heading, pitch, and roll. heading is the rotation about the negative z axis. pitch is the rotation about the negative y axis. roll is the rotation about the positive x axis.

其中說到heading是繞z軸,pitch是繞y軸,而roll是繞x軸。這裡的x,y,z軸指的是模型座標系中的x,y,z軸。而不是cesium中笛卡兒座標系的x,y,z。旋轉中心是建模時的模型中心。

模型縮放很簡單,只要找到模型,設定模型scale屬性即可,但要注意,netity並不乙個只為模型服務的單一類,可以把它理解成容器,大多數的視覺化要素都可以放裡面,所以要找到模型,就需要找到它的模型屬性,即entity.model,這就是模型。**如下:

entity.model.scale = 10 //模型放大10倍
在學習載入模型過程中,經常會碰到乙個問題,就是執行沒有報錯,模型已經載入,但是就是看不到模型在**!cesium提供了乙個模型鎖定的方法。即:

viewer.trackedentity = entity;

這樣就可以,這時視角不支援平移,只能放大和縮小。視點始終鎖定在模型上,不用滿世界去找模型。

canvas學習 一 動態擴散圓

之前看到乙個用純canvas製作漸變色擴散圓的部落格,感覺效果挺好的,應該能用在地圖上用作效果展示,就拿過來重新寫了一下。主要將原帖中建構函式的方法改為了類,以及去掉了隨機生成圓心位置的陣列。原帖為 下面是我自己的 doctype html en utf 8 viewport content wid...

演算法之一動態規劃

問題描述 給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1.我們設物品i的裝入狀態為xi,xi 0,1 此問題稱為0 11揹包問題。資料 物...

跳躍遊戲一(動態規劃)

給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到陣列的最後乙個下標。例如 a 2,3,1,1,4 a 2,3 1,1 4 能夠跳躍到最後乙個下標,輸出true a 3,2,1,0,4 a 3,2 1,0 4 不能跳躍到...