教你如何利用threejs對3D模型面板進行DIY
阿新 • • 發佈:2020-03-30
一步一步教你如何利用threejs載入gltf模型來實現DIY換膚功能。
### 模型準備
- ***模型製作***
模型可以通過網上下載,也可以自己通過c4d、maya、blender等模型製作軟體得到。這裡就不敘述有關模型製作的問題,本文中會在blender進行模型的有關設定。
- ***模型匯出***
1、匯出前設定
為了在頁面中方便後續的操作,在匯出模型前,將模型的各個部件拆分好進行命名約定(本文以小車模型為例)具體如下圖所示:
圖1
2、匯出模型格式選取
threejs可以載入的模型有很多中,之前.ojb、.json、.FBX等格式都有講過參我之前的文章[從Maya中把模型搬運至網頁的過程](http://www.flowers1225.com/lessons/2018/03/07/1)、[首個threejs-3D專案](https://flowers1225.com/lessons/2016/02/29/1),所以我這裡選取官方推薦現在使用的格式.gltf、.glb。
> gltf與glb的區別: gltf檔案類似與json格式而glb是以二進位制流進行儲存。
3、模型匯出
在blender中直接有gltf格式匯出的選項,如果沒有特別的要求,按照預設配置匯出就可以了。匯出介面如下圖所示:
圖2
### 場景建立
- ***使用threejs建立一個場景***
首先將需要的東西從threejs (r110) 中引入,然後進行建立場景四部曲:
```javascript
import {Scene, WebGLRenderer, PerspectiveCamera, Color} from 'three';
```
1、Scene
```javascript
let scene = new Scene();
scene.background = new Color(0xB3CEFB);
scene.fog = new Fog(scene.background, 1, 100);
```
2、Camera
```javascript
let camera = new PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 15;
```
3、Render
```javascript
let renderer = new WebGLRenderer({
alpha: true,
antialias: true
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
```
4、Animate
```javascript
const render = function () {
requestAnimationFrame(render);
renderer.render(scene, camera);
}
```
然後就會看到一個藍藍的場景(因為設定了背景顏色)
### 載入模型
- ***GLTFLoader載入模型至場景***
```javascript
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
const loader = function () {
let gltfLoader = new GLTFLoader();
gltfLoader.load(
'toycar.glb', // your .glb & .gltf
gltf => {
scene.add(gltf.scene); // 新增至建立好的場景中
// gltf.animations; // Array