自定義一個(gè)基礎(chǔ)工具類(lèi)

自定義一個(gè)基礎(chǔ)工具類(lèi),包含基礎(chǔ)場(chǎng)景和相機(jī)設(shè)置、窗口自適應(yīng)赚哗、調(diào)試工具類(lèi)(適用于同一個(gè)項(xiàng)目需要使用多個(gè)場(chǎng)景的情況)

import * as THREE from 'three'
import OrbitControls from '@/lib/tools/orbitControls'
import Stats from '@/lib/tools/stats'
import dat from 'dat.gui'

export default class Stage {
  /**
  * @param {Boolean} antialias 抗鋸齒
  * @param {Boolean} autoRender 自動(dòng)實(shí)時(shí)渲染
  * @param {Function} onRender 實(shí)時(shí)渲染回調(diào)
  */
  constructor(antialias = true, autoRender = true, onRender) {
    this.antialias = antialias
    this.scene = new THREE.Scene()

    this.camera = new THREE.PerspectiveCamera(
      75,
      window.innerWidth / window.innerHeight,
      0.1,
      1000
    )
    this.camera.position.z = 5

    this.initRender()
    // TODO 生產(chǎn)環(huán)境應(yīng)去掉helper
    this.initHelper()
    this.AddAdaption()

    if(autoRender) {
      this.render()
    }
  }

  initRender() {
    const renderer = this.renderer = new THREE.WebGLRenderer({ antialias: this.antialias })

    renderer.setSize(window.innerWidth, window.innerHeight)
    renderer.setPixelRatio(window.devicePixelRatio)
    document.body.appendChild(renderer.domElement)
    renderer.render(this.scene, this.camera)
  }

  initHelper() {
    this.orbit = new OrbitControls(this.camera, this.renderer.domElement)

    this.gui = new dat.GUI()

    const stats = this.stats = new Stats()
    // 0: fps, 1: ms, 2: mb, 3+: custom
    stats.showPanel(0)
    document.body.appendChild(stats.dom)
  }

  render() {
    requestAnimationFrame(this.render.bind(this))
    this.renderer.render(this.scene, this.camera)

    if(typeof this.onRender === 'function') {
      this.onRender()
    }

    if(this.stats) {
      this.stats.update()
    }
  }

  /**
   * 添加窗口變化自適應(yīng)監(jiān)聽(tīng)
   */
  AddAdaption() {
    window.addEventListener(
      'resize',
      function () {
        this.camera.aspect = window.innerWidth / window.innerHeight
        this.camera.updateProjectionMatrix()
        this.renderer.setSize(window.innerWidth, window.innerHeight)
      },
      false
    )
  }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蟋字,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗅钻,更是在濱河造成了極大的恐慌皂冰,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养篓,死亡現(xiàn)場(chǎng)離奇詭異灼擂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)觉至,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)剔应,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事峻贮∠郑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵纤控,是天一觀的道長(zhǎng)挂捻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)船万,這世上最難降的妖魔是什么刻撒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮耿导,結(jié)果婚禮上声怔,老公的妹妹穿的比我還像新娘。我一直安慰自己舱呻,他們只是感情好醋火,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著箱吕,像睡著了一般芥驳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茬高,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天兆旬,我揣著相機(jī)與錄音,去河邊找鬼怎栽。 笑死爵憎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的婚瓜。 我是一名探鬼主播宝鼓,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼巴刻!你這毒婦竟也來(lái)了愚铡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胡陪,失蹤者是張志新(化名)和其女友劉穎沥寥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柠座,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邑雅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妈经。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淮野。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捧书,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骤星,到底是詐尸還是另有隱情经瓷,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布洞难,位于F島的核電站舆吮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏队贱。R本人自食惡果不足惜色冀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柱嫌。 院中可真熱鬧锋恬,春花似錦、人聲如沸慎式。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瘪吏。三九已至,卻和暖如春蜗巧,著一層夾襖步出監(jiān)牢的瞬間掌眠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工幕屹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蓝丙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓望拖,卻偏偏與公主長(zhǎng)得像渺尘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子说敏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,075評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)鸥跟、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,094評(píng)論 4 62
  • 1/4 天下武功唯快不破,要想打破這種一拖再拖的循環(huán)架诞,最實(shí)用的招數(shù)還是立即就做拟淮。在做之前重要的動(dòng)作-分解,將巨大的...
    zhoujia閱讀 306評(píng)論 0 0
  • 今晚聽(tīng)了一個(gè)免費(fèi)的微課谴忧,主題是“如何通過(guò)思維導(dǎo)圖開(kāi)啟高效新生活”很泊,講師是高雁鵬角虫,是梅賽德斯奔馳(北京)項(xiàng)目管理工程...
    小潤(rùn)潤(rùn)麻麻閱讀 856評(píng)論 0 0
  • 玉是琳的本家姑姑介紹給她認(rèn)識(shí)的,高高瘦瘦的撑蚌,戴著付眼鏡文質(zhì)彬彬的上遥,不怎么愛(ài)說(shuō)話。琳從言談舉止間都能感覺(jué)到玉的很純争涌。...
    碎花紛飛閱讀 382評(píng)論 5 2