Three.js應(yīng)用場景以及開發(fā)前準備工作

應(yīng)用場景

上篇文章,我們對于three.js有了大致的了解贩耐。那么three.js的應(yīng)用場景到底有哪些弧腥?

three.js廣泛應(yīng)用,在小游戲潮太、產(chǎn)品展示管搪、物聯(lián)網(wǎng)、數(shù)字孿生铡买、智慧城市園區(qū)更鲁、機械、建筑奇钞、全景看房澡为、GIS等各個領(lǐng)域基本上都有three.js的身影。

只要你有Web3D可視化的需求景埃,基本上都可以首選學(xué)習Three.js媒至。

下面簡單介紹一下集中比較典型的應(yīng)用場景:

智慧小區(qū)

智慧小區(qū)
智慧小區(qū)

智慧工廠

智慧工廠
智慧工廠

物聯(lián)網(wǎng)--收費站

物聯(lián)網(wǎng)
物聯(lián)網(wǎng)
物聯(lián)網(wǎng)

智慧城市

智慧城市

3D可視化大屏

3D可視化大屏

在線產(chǎn)品3D展示

在線產(chǎn)品3D展示

機械/BIM在線預(yù)覽

機械/BIM在線預(yù)覽

室內(nèi)全景展示

室內(nèi)全景展示

three.js 開發(fā)前準備

github地址https://github.com/mrdoob/three.js

版本問題

three.js官網(wǎng) (opens new window)可以下載three.js文件包,不過默認是最新版本的谷徙,three.js官網(wǎng)的文檔一般也是當前最新版本拒啰。

three.js文件包下載

github鏈接查看所有版本threejs:https://github.com/mrdoob/three.js/releases

選擇你需要的版本three.js文件包下載,然后解壓完慧,就可以預(yù)覽里面的很多學(xué)習資源图呢。

threejs文件資源目錄介紹

下載three.js文件包解壓后,你可以看到如下目錄(不同版本會略有差異)骗随。

對于開發(fā)者而言蛤织,大家經(jīng)常接觸的是文檔docs案例examples兩個文件夾,平時查看文檔鸿染,可以打開文檔docs里面html文件指蚜,案例examples里面提供了海量threejs功能案例。

three.js-文件包
└───build——three.js相關(guān)庫涨椒,可以引入你的.html文件中摊鸡。
    │
└───docs——Three.js API文檔文件
    │───index.html——打開該文件,本地離線方式預(yù)覽threejs文檔
└───examples——大量的3D案例蚕冬,是你平時開發(fā)參考學(xué)習的最佳資源
    │───jsm——threejs各種功能擴展庫
└───src——Three.js引擎的源碼免猾,有興趣可以閱讀。
    │
└───editor——Three.js的可視化編輯器囤热,可以編輯3D場景
    │───index.html——打開應(yīng)用程序  

使用何種編輯器來開發(fā)和預(yù)覽猎提?

開發(fā)編輯器 -- vscode代碼編輯器

靜態(tài)服務(wù)器 -- vsocde,安裝live-server插件

開發(fā)和學(xué)習環(huán)境旁蔼,引入threejs

  • 開發(fā)環(huán)境:項目開發(fā)引入threejs锨苏,比如vue或react腳手架引入threejs。
  • 學(xué)習環(huán)境:入門threejs階段棺聊,.html文件中直接引入threejs

開發(fā)環(huán)境,使用threejs

比如你采用的是Vue + threejsReact + threejs技術(shù)棧伞租,這很簡單,threejs就是一個js庫限佩,直接通過npm命令行安裝就行葵诈。

npm安裝特定版本three.js(注意使用哪個版本,查文檔就查對應(yīng)版本)

// 比如安裝148版本
npm install three@0.148.0 --save

npm安裝后祟同,如何引入three.js

執(zhí)行import * as THREE from 'three';,ES6語法引入three.js核心作喘。

// 引入three.js
import * as THREE from 'three';

npm安裝后,如何引入three.js其他擴展庫

除了three.js核心庫以外耐亏,在threejs文件包中examples/jsm目錄下徊都,你還可以看到各種不同功能的擴展庫。

一般來說广辰,你項目用到那個擴展庫暇矫,就引入那個,用不到就不需要引入择吊。

// 引入擴展庫OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';

// 引入擴展庫GLTFLoader.js
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';

學(xué)習環(huán)境,使用threejs

.html文件中直接引入threejs

three.js庫可以在threejs官方文件包下面的build目錄獲取到李根。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./build/three.js"></script>
</head>
<body>
    <script> 
        console.log(THREE.Scene); 
    </script>
</body>
</html></h5>

ES6 import方式引入

給script標簽設(shè)置type="module",也可以在.html文件中使用import方式引入three.js

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="module">
    // 現(xiàn)在瀏覽器支持ES6語法几睛,自然包括import方式引入js文件
    import * as THREE from './build/three.module.js';

    console.log(THREE.Scene); 
    </script>
</body>

</html> 

思考:實現(xiàn)學(xué)習環(huán)境.html文件和vue或reaact腳手架開發(fā)環(huán)境一樣的寫法房轿?

import * as THREE from 'three';

可以使用 type="importmap" 配置路徑。

<!-- 具體路徑配置,你根據(jù)自己文件目錄設(shè)置 -->
<script type="importmap">
    {
        "imports": {
            "three": "../../../three.js/build/three.module.js", // 配置擴展庫
            "three/addons/": "./three.js/examples/jsm/"  // 配置擴展庫
        }
    }
</script>
<!-- 配置type="importmap",.html文件也能和項目開發(fā)環(huán)境一樣方式引入threejs -->
<script type="module">
    import * as THREE from 'three';
    // 瀏覽器控制臺測試囱持,是否引入成功
    console.log(THREE.Scene);

    // three/addons/路徑之后對應(yīng)的是three.js官方文件包`/examples/jsm/`中的js庫
    // 擴展庫OrbitControls.js
    import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
    // 擴展庫GLTFLoader.js
    import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
    console.log(OrbitControls);
    console.log(GLTFLoader);
</script>

完整代碼

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 具體路徑配置夯接,你根據(jù)自己文件目錄設(shè)置 -->
    <script type="importmap">
    {
        "imports": {
            "three": "./build/three.module.js"
        }
    }
</script> 

<script type="module">
import * as THREE from 'three';

console.log(THREE.Scene); 
</script>
</body>

</html> 

優(yōu)化:抽離js文件

在實際項目中,我們往往把js文件抽離纷妆,這樣便于操作以及可讀性盔几。

main.js

import * as THREE from 'three'; 
console.log(THREE.Scene); 

// three/addons/路徑之后對應(yīng)的是three.js官方文件包`/examples/jsm/`中的js庫
// 擴展庫OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 擴展庫GLTFLoader.js
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
console.log(OrbitControls);
console.log(GLTFLoader); 

頁面調(diào)用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 具體路徑配置,你根據(jù)自己文件目錄設(shè)置掩幢,我的是課件中源碼形式 -->
<script type="importmap">
    {
        "imports": {
            "three": "./build/three.module.js",
            "three/addons/": "./examples/jsm/"
        }
    }
</script>

    <script type="module" src="./main.js"> 
    </script>
</body>

</html> 

參考文檔:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逊拍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子际邻,更是在濱河造成了極大的恐慌芯丧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件世曾,死亡現(xiàn)場離奇詭異缨恒,居然都是意外死亡,警方通過查閱死者的電腦和手機度硝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門肿轨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕊程,你說我怎么就攤上這事椒袍。” “怎么了藻茂?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵驹暑,是天一觀的道長。 經(jīng)常有香客問我辨赐,道長优俘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任掀序,我火速辦了婚禮帆焕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘不恭。我一直安慰自己叶雹,他們只是感情好,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布换吧。 她就那樣靜靜地躺著折晦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沾瓦。 梳的紋絲不亂的頭發(fā)上满着,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天谦炒,我揣著相機與錄音,去河邊找鬼风喇。 笑死宁改,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的响驴。 我是一名探鬼主播透且,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼豁鲤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鲸沮,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤琳骡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后讼溺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楣号,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年怒坯,在試婚紗的時候發(fā)現(xiàn)自己被綠了炫狱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡剔猿,死狀恐怖视译,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情归敬,我是刑警寧澤酷含,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站汪茧,受9級特大地震影響椅亚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舱污,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一呀舔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扩灯,春花似錦媚赖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丧失,卻和暖如春豺妓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工琳拭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留训堆,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓白嘁,卻偏偏與公主長得像坑鱼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子絮缅,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

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

  • Threejs 為什么鲁沥? webGL太難用,太復(fù)雜耕魄! 但是現(xiàn)代瀏覽器都支持 WebGL 這樣我們就不必使用 Fla...
    強某某閱讀 6,069評論 1 21
  • 簡介 Three.js是基于原生WebGL封裝運行的三維引擎画恰。可與各種前端技術(shù)結(jié)合使用吸奴。 github鏈接:Git...
    田苗苗_7785閱讀 2,052評論 0 0
  • ??本篇文章主要針對小白在使用threejs中所遇到的問題允扇,因為我就是小白,接下來會和大家一起慢慢成長则奥。 ??推薦幾個...
    誰在花里胡哨閱讀 29,592評論 1 22
  • 1.重用Material和Geometry 2.不在render()中實例化或是賦值操作 3.粒子系統(tǒng)代替粒子 4...
    bbh123閱讀 4,642評論 1 3
  • Three.js 1.Three.js 介紹 OpenGL(英語:Open Graphics Library考润,譯名...
    GuitarHusky閱讀 2,497評論 0 1