ThingJS之動態(tài)天氣效果

使用ThingJS快速編寫天氣效果弓柱,比如:晴天沟堡、動態(tài)時間天空侧但、下雨、下雪(可以控制雨雪大泻铰蕖)禀横、霧效果、白天黑夜效果等伤哺,可以通過對接第三方的數(shù)據(jù)燕侠,實時控制三維場景的效果(比如:對接天氣接口)

動態(tài)時間天空

天空的狀態(tài)會跟隨當(dāng)前時間點(diǎn)進(jìn)行變化,每個小時立莉,太陽所在的位置都會不同绢彤,照射在場景上的影子方向也不同,通過動態(tài)時間天空蜓耻,我們就可以模擬現(xiàn)實生活中的一天24小時天空的變化

效果圖.png

下面我們來看一下實現(xiàn)代碼

/**
 * 晴天——動態(tài)天空茫舶,跟隨小時變化
 * @param {Number} hour 小時
 */
sunny(hour) {
  const effect = {
    turbidity: 5, // 光源擴(kuò)散大小
    rayleigh: 2, // 大氣散射
    time: hour, // 時間 [0~24]
    beta: 30, // 水平角度
  };
  // 如果時間為下午19點(diǎn),則變成黑夜效果刹淌;如果時間小于19點(diǎn)饶氏,則為動態(tài)天空效果
  if (hour > 19) {
    this.app.skyEffect = null;
    this.app.skyBox = 'Night';
  } else {
    this.app.skyEffect = effect;
  }
}

上面的方法,我們只需要從外部傳入一個當(dāng)前時間即可有勾,time的屬性值為Number類型疹启,0-24的數(shù)值;下方做了一個判斷蔼卡,如果是19點(diǎn)以后喊崖,就切換成黑夜的天空盒(這個可以根據(jù)自己的需求進(jìn)行邏輯更改)。

注意:skyEffect與skyBox不能同時使用雇逞,原因:它們都是針對天空效果進(jìn)行設(shè)置荤懂,只能選擇其一展現(xiàn)

動態(tài)雨雪天氣

雨雪天氣,是通過粒子圖片渲染來實現(xiàn)的塘砸,我們可以通過控制粒子數(shù)量的多少來實現(xiàn)降雨降雪量

雨效果.png
下雨下雪.gif

下面我們來看一下實現(xiàn)代碼

/**
 * 下雨或者下雪效果
 */
rainOrSnow(type, particleCount) {
  this.app.skyBox = 'Night'; // 黑夜天空盒
  const particleUrl = {
    '雨': 'https://model.3dmomoda.com/models/18112113d4jcj4xcoyxecxehf3zodmvp/0/particles',
    '雪': 'https://model.3dmomoda.com/models/18112014q3t8aunaabahzxbxcochavap/0/particles',
  };
  // 創(chuàng)建粒子
  this.particle = this.app.create({
    type: 'ParticleSystem', // 粒子類型
    name: type, // 粒子名稱(可通過名稱進(jìn)行query查詢)
    url: particleUrl[type], // 粒子圖片
    position: [0, 50, 0], // 粒子世界坐標(biāo)
  });
  // 設(shè)置粒子最大密度
  this.particle.setGroupAttribute('maxParticleCount', 1000);
  this.particle.setParticleAttribute('particleCount', particleCount);
}

/**
 * 改變雨雪粒子大小
 */
changeParticle(particleCount) {
  // 設(shè)置粒子密度
  this.particle.setParticleAttribute('particleCount', particleCount);
}

/**
 * 取消雨雪效果
 */
 offRainOrSnow(type) {
     this.app.query(type)[0].destroy();
 }

動態(tài)霧效果

可以通過攝影機(jī)視角的遠(yuǎn)近节仿,控制霧濃度,也可以更改霧顏色


霧效果.gif

下面我們來看一下實現(xiàn)代碼

/**
 * 動態(tài)霧效果
 */
  fog(color) {
      this.app.fog = {
          color, // 顏色
          near: 10, // 近距離的霧效濃度
          far: 200 // 遠(yuǎn)距離的霧效濃度
      };
  }

  /**
   * 取消霧效果
   */
  offFog() {
      this.app.fog = null;
  }

API使用總結(jié)

// 設(shè)置動態(tài)天空效果
const effect = {
    turbidity: 5, // 光源擴(kuò)散大小
    rayleigh: 2, // 大氣散射
    time: hour, // 時間 [0~24]
    beta: 30, // 水平角度
};
app.skyEffect = effect ;
// 取消動態(tài)天空效果
app.skyEffect  = null;
// 設(shè)置天空盒
app.skyBox = 'Night'; // 天空盒資源可以使用線上資源掉蔬,也可下載到本地廊宪,引入本地資源路徑
// 內(nèi)置天空盒值:BlueSky(藍(lán)天)、MilkyWay(銀河)女轿、CloudySky(多云)箭启、White(灰白)、Dark(暗黑)
// 自定義天空盒貼圖(要注意圖片寬高比例1:1谈喳,每張大小必須一致)
// 設(shè)置自定義天空盒方式1
app.skyBox = {
  up: './images/Night/posx.jpg',
  rt: './images/Night/negx.jpg',
  lf: './images/Night/posy.jpg',
  fr: './images/Night/negy.jpg',
  dn: './images/Night/posz.jpg',
  bk: './images/Night/negz.jpg'
};
// 設(shè)置自定義天空盒方式2
app.skyBox = {
  negx: './images/Night/negx.jpg',
  negy: './images/Night/negy.jpg',
  negz: './images/Night/negz.jpg',
  posx: './images/Night/posx.jpg',
  posy: './images/Night/posy.jpg',
  posz: './images/Night/posz.jpg'
};
// 設(shè)置自定義天空盒方式3(順序要求[posx, negx, posy, negy, posz, negz])
app.skyBox = [
  './images/Night/posx.jpg',
  './images/Night/negx.jpg',
  './images/Night/posy.jpg',
  './images/Night/negy.jpg',
  './images/Night/posz.jpg',
  './images/Night/negz.jpg'
];
// 創(chuàng)建雨雪粒子,使用app.create()接口戈泼,創(chuàng)建類型為‘ParticleSystem’
// 設(shè)置粒子的最大密度婿禽,上限值(注意:當(dāng)數(shù)值達(dá)到10000時赏僧,場景會卡頓)
particle.setGroupAttribute('maxParticleCount', 1000);
// 設(shè)置粒子的密度,當(dāng)設(shè)置了上限密度值時扭倾,粒子數(shù)超過上限值淀零,展現(xiàn)出來的效果為上限密度的效果
particle.setParticleAttribute('particleCount', 100);
// 銷毀粒子對象
app.query('粒子name')[0].destroy();
// 霧效果
app.fog = {
    color, // 顏色
    near: 10, // 近距離的霧效濃度
    far: 200 // 遠(yuǎn)距離的霧效濃度
 };
// 取消霧效果
app.fog = null;

想要探討問題或者Demo示例代碼,請戳郵箱:1806798698@qq.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膛壹,一起剝皮案震驚了整個濱河市驾中,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌模聋,老刑警劉巖肩民,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異链方,居然都是意外死亡持痰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門祟蚀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來工窍,“玉大人,你說我怎么就攤上這事前酿』汲” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵罢维,是天一觀的道長淹仑。 經(jīng)常有香客問我,道長言津,這世上最難降的妖魔是什么攻人? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮悬槽,結(jié)果婚禮上怀吻,老公的妹妹穿的比我還像新娘。我一直安慰自己初婆,他們只是感情好蓬坡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磅叛,像睡著了一般屑咳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弊琴,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天兆龙,我揣著相機(jī)與錄音,去河邊找鬼敲董。 笑死紫皇,一個胖子當(dāng)著我的面吹牛慰安,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聪铺,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼化焕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铃剔?” 一聲冷哼從身側(cè)響起撒桨,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎键兜,沒想到半個月后凤类,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝶押,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年踱蠢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棋电。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茎截,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赶盔,到底是詐尸還是另有隱情企锌,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布于未,位于F島的核電站撕攒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烘浦。R本人自食惡果不足惜抖坪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闷叉。 院中可真熱鬧擦俐,春花似錦、人聲如沸握侧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽品擎。三九已至埋合,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萄传,已是汗流浹背甚颂。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人振诬。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓瓣铣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贷揽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容