Vue Three.js 安裝使用及處理examples中的包引用

在做一次項(xiàng)目過程中,我先根據(jù)需求寫了一個(gè)demo绷耍,很快的就能跑起來展示出預(yù)期的效果。但是鲜侥,當(dāng)完成后遷移到Vue中時(shí)才發(fā)現(xiàn)有一些插件無法正常的使用褂始。如:MapControlsEarcut等描函,因?yàn)樗鼈兡J(rèn)并沒有添加到Three包中崎苗。糾結(jié)了一段時(shí)間,接下來展示如何使用:

一舀寓、安裝相關(guān)的依賴

1胆数、three.js安裝

> npm i three --save

2、導(dǎo)入/導(dǎo)出變量插件

> npm i imports-loader exports-loader --save-dev

3互墓、導(dǎo)入examples的包

cnpm i import-three-examples --save-dev

二必尼、webpack的配置

1、 webpack config

const ThreeExamples = require('import-three-examples')

module.exports = {
  ......
  ......
  module: {
    rules: [
      ......
      ......
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
      ...ThreeExamples
    ]
  }
}

2轰豆、 render page/js

import OrbitControls from "three/examples/js/controls/OrbitControls"
import FBXLoader from "three/examples/js/loaders/FBXLoader"

......
......

let controls = new OrbitControls(camera, el)

let fbx = new FBXLoader()

fbx.load(url, function (_obj) {
  console.log(_obj)
})

......
......

3胰伍、 2019/01/11 vue-cli 3.0+ 的webpack配置:

vue.config.js

const ThreeExamples = require('import-three-examples')

module.exports = {
    chainWebpack: config => {
        ThreeExamples.forEach((v) => {
            if (~v.use.indexOf('imports')) {
                config.module
                    .rule(`${v.test}_i`)
                    .test(require.resolve(v.test))
                    .use(v.use)
                    .loader(v.use)
            } else {
                config.module
                    .rule(`${v.test}_e`)
                    .test(require.resolve(v.test))
                    .use(v.use)
                    .loader(v.use)
            }
        })
    }
}

4、 2019/01/17 nuxt 中的配置

nuxt.config.js

const ThreeExamples = require('import-three-examples')

module.exports = {
  build: {
    extend(config, ctx) {
      ThreeExamples.forEach((v, i) => {
        config.module.rules.push({
          test: require.resolve(v.test.split('/node_modules/')[1]),
          use: v.use
        })
      })
    }
  }
}

8酸休、 2019/03/08 說明一下(僅針對webpack不太熟的童靴)

最近很多人反饋這個(gè)插件怎么不起作用啊
結(jié)果都是因?yàn)橐肓吮镜啬P吐钭猓俏磳δP驮O(shè)置webpack加載器
下面用fbx和obj模型作為例子,教大家怎么對模型設(shè)置webpack加載器。其他格式的模型/.(fbx|obj)$/中的fbx和obj替換成你們需要的模型斑司,多種格式間用 | 銜接
首先一定要cnpm i url-loader --save-dev (如果模型太大可以使用file-loader)!!!!!!!!!!
本地的靜態(tài)資源我建議是最好用import引入渗饮,再不濟(jì)也需要用require(),直接寫相對路徑如果不熟悉webpack配置很容易造成dev靜態(tài)資源引入正常但build資源卻404

  • webpack

同樣是在module.rules 中添加

{
  test: /\.(fbx|obj)$/,
  loader: 'url-loader'
},
(下面就是最上面對應(yīng)的引入插件的方法)

  • vue-cli 3.0

vue.config.js

const ThreeExamples = require('import-three-examples')

module.exports = {
    chainWebpack: config => {
        config.module
            .rule('obj')
            .test(/\.(fbx|obj)$/)
            .use('file-loader')
            .loader('file-loader')
            (下面就是最上面對應(yīng)的引入插件的方法)
    }
}

  • nuxt
extend(config, ctx) {
  config.module.rules.push( {
    test: /\.(fbx|obj)(\?.*)?$/,
    loader: 'url-loader',
  })
   (下面就是最上面對應(yīng)的引入插件的方法)
}

9、 2019/03/13 關(guān)于引入LegacyJSONLoader的問題

直接引入LegacyJSONLoader加載json格式的模型,會(huì)報(bào)錯(cuò)讓THREE.ObjectLoader
直接使用THREE.ObjectLoader宿刮,又會(huì)報(bào)錯(cuò)需要LegacyJSONLoader來幫加載某個(gè)對象
結(jié)果看了源碼互站,需要'THREE' in window && 'LegacyJSONLoader' in THREE 才行
解決辦法如下

window.THREE = {}
import * as THREE from 'imports-loader?THREE\.LegacyJSONLoader=three/examples/js/loaders/deprecated/LegacyJSONLoader!three'

var loader = new THREE.ObjectLoader();
loader.load(url, (o) => {
  console.log(o)
});

10、 2019/05/27 關(guān)于引入DRACOLoader的問題

關(guān)于設(shè)置DRACOLoader.setDecoderPath路徑的問題

import DRACOLoader from 'imports-loader?DracoDecoderModule=three/examples/js/libs/draco/draco_decoder.js!three/examples/js/loaders/DRACOLoader'
DRACOLoader.setDecoderPath("../libs/draco")
drcLoader.load(url, function (geometry) {
    var material = new THREE.MeshStandardMaterial( { color: 0x606060 } );
    var mesh = new THREE.Mesh( geometry, material );
    mesh.castShadow = true;
    mesh.receiveShadow = true;
    scene.add( mesh );
})

三僵缺、使用示例

  • 包引用


    image.png
  • vue.config.js 配置


    image.png

    image.png
  • page.vue 使用


    image.png

    image.png
  • 效果


    image.png

    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胡桃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子磕潮,更是在濱河造成了極大的恐慌翠胰,老刑警劉巖容贝,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異之景,居然都是意外死亡斤富,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門锻狗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來满力,“玉大人,你說我怎么就攤上這事轻纪∮投睿” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵桐磁,是天一觀的道長悔耘。 經(jīng)常有香客問我,道長我擂,這世上最難降的妖魔是什么衬以? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮校摩,結(jié)果婚禮上看峻,老公的妹妹穿的比我還像新娘。我一直安慰自己衙吩,他們只是感情好互妓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坤塞,像睡著了一般冯勉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摹芙,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天灼狰,我揣著相機(jī)與錄音,去河邊找鬼浮禾。 笑死交胚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盈电。 我是一名探鬼主播蝴簇,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匆帚!你這毒婦竟也來了熬词?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤吸重,失蹤者是張志新(化名)和其女友劉穎荡澎,沒想到半個(gè)月后均践,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摩幔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鞭铆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片或衡。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖车遂,靈堂內(nèi)的尸體忽然破棺而出封断,到底是詐尸還是另有隱情,我是刑警寧澤舶担,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布坡疼,位于F島的核電站,受9級特大地震影響衣陶,放射性物質(zhì)發(fā)生泄漏柄瑰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一剪况、第九天 我趴在偏房一處隱蔽的房頂上張望教沾。 院中可真熱鬧,春花似錦译断、人聲如沸授翻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堪唐。三九已至,卻和暖如春翎蹈,著一層夾襖步出監(jiān)牢的瞬間淮菠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工杨蛋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兜材,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓逞力,卻偏偏與公主長得像曙寡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子寇荧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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