three.js DRACOLoader

2023-02-16 17:50 更新

用 Draco 庫壓縮的幾何加載器。

Draco 是一個(gè)用于壓縮和解壓縮 3D 網(wǎng)格和點(diǎn)云的開源庫。壓縮后的幾何體可以顯著變小,但代價(jià)是客戶端設(shè)備上的解碼時(shí)間會(huì)增加。

獨(dú)立的 Draco 文件具有 .drc 擴(kuò)展名,并包含頂點(diǎn)位置、法線、顏色和其他屬性。 Draco 文件不包含材質(zhì)、紋理、動(dòng)畫或節(jié)點(diǎn)層次結(jié)構(gòu)——要使用這些功能,請(qǐng)將 Draco 幾何體嵌入到 glTF 文件中。可以使用 glTF-Pipeline 將普通的 glTF 文件轉(zhuǎn)換為 Draco 壓縮的 glTF 文件。將 Draco 與 glTF 一起使用時(shí),GLTFLoader 將在內(nèi)部使用 DRACOLoader 實(shí)例。

代碼示例

// Instantiate a loader
const loader = new DRACOLoader();

// Specify path to a folder containing WASM/JS decoding libraries.
loader.setDecoderPath( '/examples/jsm/libs/draco/' );

// Optional: Pre-fetch Draco WASM/JS module.
loader.preload();

// Load a Draco geometry
loader.load(
	// resource URL
	'model.drc',
	// called when the resource is loaded
	function ( geometry ) {

		const material = new THREE.MeshStandardMaterial( { color: 0x606060 } );
		const mesh = new THREE.Mesh( geometry, material );
		scene.add( mesh );

	},
	// called as loading progresses
	function ( xhr ) {

		console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );

	},
	// called when loading has errors
	function ( error ) {

		console.log( 'An error happened' );

	}
);

例子

webgl_loader_draco

瀏覽器兼容性

DRACOLoader 依賴 ES6 Promises,IE11 不支持。要在 IE11 中使用加載程序,您必須包含一個(gè)提供 Promise 替換的 polyfill。 DRACOLoader 將根據(jù)瀏覽器功能自動(dòng)使用 JS 或 WASM 解碼庫。

構(gòu)造函數(shù)

DRACOLoader( manager : LoadingManager )

manager — 供加載器使用的 loadingManager。默認(rèn)值為 THREE.DefaultLoadingManager。

創(chuàng)建一個(gè)新的 DRACOLoader。

屬性

請(qǐng)參閱基本 Loader 類以了解公共屬性。

方法

常用方法見 Loader 基類。

.load ( url : String, onLoad : Function, onProgress : Function, onError : Function ) : undefined

url — 包含 .drc 文件的路徑/URL 的字符串。

onLoad — 加載成功完成后要調(diào)用的函數(shù)。

onProgress — (可選)在加載過程中調(diào)用的函數(shù)。參數(shù)將是 XMLHttpRequest 實(shí)例,它包含 .total 和 .loaded 字節(jié)。

onError — (可選)加載期間發(fā)生錯(cuò)誤時(shí)調(diào)用的函數(shù)。該函數(shù)接收錯(cuò)誤作為參數(shù)。

從 url 開始加載并使用解壓縮的幾何體調(diào)用 onLoad 函數(shù)。

.setDecoderPath ( value : String ) : this

value — 包含 JS 和 WASM 解碼器庫的文件夾路徑。

.setDecoderConfig ( config : Object ) : this

config.type - (可選)“js”或“wasm”。

為解碼器庫提供配置。解碼開始后無法更改配置。

.setWorkerLimit ( workerLimit : Number ) : this

workerLimit - 要分配的最大工人數(shù)。默認(rèn)值為 4。

設(shè)置解碼期間要使用的 Web Worker 的最大數(shù)量。如果工作人員還負(fù)責(zé)應(yīng)用程序中的其他任務(wù),則下限可能更可取。

.preload () : this

請(qǐng)求解碼器庫(如果尚未加載)。

.dispose () : this

處理解碼器資源并釋放內(nèi)存。之后無法重新加載解碼器。

源碼

examples/jsm/loaders/DRACOLoader.js


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)