cesium 動畫添加

這里所說的動畫不是cesium的Animation或者是czml,是瀏覽器上的動畫requestAnimationFrame。之前我在threejs中使用過該動畫,當時以為是threejs所特有的,在其中充當將靜態網頁動起來的重要對象。最近在cesium效果編寫中覺得根據Animation或者是czml去繪制動畫非常麻煩。得與cesium的時間軸相結合,我只需要點擊后發生動畫就行了。當然各有各的優勢,對于簡單的動畫來說js的動畫無非更加簡單以及移植性更加好。

廢話不多說,來先看下requestAnimationFrame的特性吧。
requestAnimationFrame

其實就是說遞歸,自己不斷根據某個屬性的變化來不斷調用自身,使某個屬性不斷發生變化。比如說我想讓3dtiles不斷上升,可以解析為某個時間段讓該3dtiles發生平移變換。想讓3dtiles平移可以修改他的變換矩陣來實現。
API接口

傳入一個變換矩陣來達到變換的效果。

var distance =0;
                    function animation(){
                        requestAnimationFrame(function(){
                            var translation=Cesium.Cartesian3.fromArray([-distance, distance, distance]);
                            var m= Cesium.Matrix4.fromTranslation(translation);
                            distance = distance+0.2;
                            self.map.tilesets["parkinglot1"]._modelMatrix = m;
                            self.map.tilesets["parkinglot"]._modelMatrix = m;

                            if(distance<15){
                                animation();//不斷調用自身
                            }else{
                                addEntrance(self);
                                queryParkingNumber();
                            };
                        })
                    }

這樣就會有動畫效果了,是不是非常簡單,同時如果你想讓該動畫發生在cesium的flyto函數執行之后,可以調用其完成后的回調函數。我用的是camera的flyto,viewer的flyto我沒發現其回調接口。只要將其放入complete后就行了,代碼中我做過封裝,原理是一樣的。

self.map.flyTo({
                        destination: new Cesium.Cartesian3(-2506686.9441362103, 4658206.935923001, 3552200.4119844055),
                        orientation: {
                            heading: 3.8527405078650916,
                            pitch: -0.531606095336215,
                            roll: 6.280831687840141
                        },
                        duration: 3,
                    },function (){
                        animation();

                    });

寫的不好之處,還請大家指出來。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容