cesium 動(dòng)畫添加

這里所說的動(dòng)畫不是cesium的Animation或者是czml,是瀏覽器上的動(dòng)畫requestAnimationFrame。之前我在threejs中使用過該動(dòng)畫,當(dāng)時(shí)以為是threejs所特有的,在其中充當(dāng)將靜態(tài)網(wǎng)頁(yè)動(dòng)起來(lái)的重要對(duì)象。最近在cesium效果編寫中覺得根據(jù)Animation或者是czml去繪制動(dòng)畫非常麻煩。得與cesium的時(shí)間軸相結(jié)合,我只需要點(diǎn)擊后發(fā)生動(dòng)畫就行了。當(dāng)然各有各的優(yōu)勢(shì),對(duì)于簡(jiǎn)單的動(dòng)畫來(lái)說js的動(dòng)畫無(wú)非更加簡(jiǎn)單以及移植性更加好。

廢話不多說,來(lái)先看下requestAnimationFrame的特性吧。
requestAnimationFrame

其實(shí)就是說遞歸,自己不斷根據(jù)某個(gè)屬性的變化來(lái)不斷調(diào)用自身,使某個(gè)屬性不斷發(fā)生變化。比如說我想讓3dtiles不斷上升,可以解析為某個(gè)時(shí)間段讓該3dtiles發(fā)生平移變換。想讓3dtiles平移可以修改他的變換矩陣來(lái)實(shí)現(xiàn)。
API接口

傳入一個(gè)變換矩陣來(lái)達(dá)到變換的效果。

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();//不斷調(diào)用自身
                            }else{
                                addEntrance(self);
                                queryParkingNumber();
                            };
                        })
                    }

這樣就會(huì)有動(dòng)畫效果了,是不是非常簡(jiǎn)單,同時(shí)如果你想讓該動(dòng)畫發(fā)生在cesium的flyto函數(shù)執(zhí)行之后,可以調(diào)用其完成后的回調(diào)函數(shù)。我用的是camera的flyto,viewer的flyto我沒發(fā)現(xiàn)其回調(diào)接口。只要將其放入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();

                    });

寫的不好之處,還請(qǐng)大家指出來(lái)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容