cesium模擬火箭發射

2021-10-08 22:34:50 字數 3596 閱讀 2559

倒計時

點火

騰空而起

變換視角

變換視角 + 旋轉

我們的目標是星辰大海

1、載入模型

2、控制視角

3、煙霧效果

4、路徑

1、總體結構

2、呼叫

require([

'rocket'],

function

(rocket);

rocket.

emit()

;//開啟發射})

;

3、要點**太長了,只說一些要點。

1)飛行路徑

定義飛行路徑,裡面包含起始、結束高度,以及中間的各種臨界點。飛行過程中,突破臨界點後,速度有所提公升,視角也可能會變換。這個資料結構是自定義的。

//飛行路徑

var path =

,//點火瞬間引數,,

//h,高度;s,速度,公尺/秒; v:視角;,,

,,,,

,,,,

//r,roll,轉屏角度

//突破第一宇宙速度7.9km/秒]}

;

2)裝配好引數:裝配好路徑,賦給變數position

計算出整個路程需耗費的總時間

設定好viewer.clock

//裝配路徑引數

var ps =

(function

setup()

time += math.

round

((path.stoph - ht)

/ st)

;var stop = cesium.juliandate.

addseconds

(start, time,

newcesium.juliandate()

);position.

addsample

(stop, cesium.cartesian3.

fromdegrees

(path.lng, path.lat, path.stoph));

//make sure viewer is at the desired time.

clock = viewer.clock;

//儲存下當前的viewer.clock,

viewer.clock.starttime = start.

clone()

; viewer.clock.stoptime = stop.

clone()

; viewer.clock.currenttime = start.

clone()

; viewer.clock.clockrange = cesium.clockrange.

loop_stop

;//loop at the end

viewer.clock.multiplier =1;

viewer.clock.shouldanimate =

true

;return;}

)();

飛行過程中根據設定作出視角變換等反應。

var ellipsoid = viewer.scene.globe.ellipsoid;

var turnh = path.starth;

flylistener

=function

(scene, time)

else

if(turnh < p.h)

break;}

}}if(smoke) smoke.

fly(entity, time);}

;

變換視角主要由方法viewer.camera.lookat()來完成。但旋轉要靠viewer.camera.rotate();。剛開始我們設定的視角,是飛船機頭垂直向上的,無論怎麼lookat,這個機頭垂直向上的方向都不會改變,只能旋轉。但是這個旋轉函式的引數也是乙個世界座標(cesium.cartesian3),按照說明,應該是某乙個軸才對,座標怎麼跟軸對應起來?其實是類似這樣:

viewer.camera.

rotate

(viewer.camera.direction, 角度)

;

3)火箭模型乙個entity

//火箭實體

var entity =

(function

init()

),])

, model:

, position: poss,

orientation:

newcesium.velocityorientationproperty

(position)

,//朝向前進方向})

; viewer.camera.

lookat

( poss,

//target

path.points[0]

.v);

return entity;})();

4)發射到目前為止,飛船還是不能動的。要怎麼才可以動呢?這樣:

entity.position = ps.position;

//ps就是上面那個裝配好的引數

viewer.trackedentity = entity;

配合倒計時,煙霧效果。

5)煙霧

煙霧是cesium提供的粒子系統(cesium.particlesystem)。用了一張煙霧。cesium提供的例子中,也有自己畫粒子的,但每個粒子都需要計算,消耗很大,直接用煙霧**不亦快哉。

由於飛船有加速度,越飛越快,導致煙霧會被拋在身後,且距離越拉越遠。應對之策是縮短粒子的生命週期,並加大粒子發射器的噴發速度。注意,粒子噴發速度跟顯示卡效能有關,設得過高,會引起機器卡頓,甚至崩潰。

this

.speedup

=function()

;

參考效果,路徑及煙霧效果均**於此

火箭的發射視窗

在火箭發射活動中,我們經常可以看到某某火箭發射xx衛星的視窗是10 30 此處隨便寫個時間 視窗寬度是5min諸如此類的。那麼火箭的發射視窗究竟是怎麼計算出來的?視窗寬度又是怎麼定義的?本文初步 火箭的發射視窗,給出發射太陽同步軌道 sso 和近地軌道時的發射視窗原理。深空探測的發射視窗較為複雜,本...

cesium衛星軌道模擬

var viewer new cesium.viewer cesiumcontainer 去掉版權資訊 viewer.cesiumwidget.creditcontainer.style.display none 設定了模擬時間的邊界 var start cesium.juliandate.from...

hackrf hacktv 發射PAL模擬電視訊號

hackrf one 老式crt電視 ubuntu 14.04.1 desktop amd64 hackrf.iso 配置好hackrf環境的ubuntu系統ffmpeg.org releases ffmpeg 4.2.2.tar.bz2 解壓檔案 tar jxf ffmpeg 4.2.2.tar....