three.js DRACOLoader

2023-02-16 17:50 更新

用 Draco 库压缩的几何加载器。

Draco 是一个用于压缩和解压缩 3D 网格和点云的开源库。压缩后的几何体可以显着变小,但代价是客户端设备上的解码时间会增加。

独立的 Draco 文件具有 .drc 扩展名,并包含顶点位置、法线、颜色和其他属性。 Draco 文件不包含材质、纹理、动画或节点层次结构——要使用这些功能,请将 Draco 几何体嵌入到 glTF 文件中。可以使用 glTF-Pipeline 将普通的 glTF 文件转换为 Draco 压缩的 glTF 文件。将 Draco 与 glTF 一起使用时,GLTFLoader 将在内部使用 DRACOLoader 实例。

代码示例

// 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 中使用加载程序,您必须包含一个提供 Promise 替换的 polyfill。 DRACOLoader 将根据浏览器功能自动使用 JS 或 WASM 解码库。

构造函数

DRACOLoader( manager : LoadingManager )

manager — 供加载器使用的 loadingManager。默认值为 THREE.DefaultLoadingManager。

创建一个新的 DRACOLoader。

属性

请参阅基本 Loader 类以了解公共属性。

方法

常用方法见 Loader 基类。

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

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

onLoad — 加载成功完成后要调用的函数。

onProgress — (可选)在加载过程中调用的函数。参数将是 XMLHttpRequest 实例,它包含 .total 和 .loaded 字节。

onError — (可选)加载期间发生错误时调用的函数。该函数接收错误作为参数。

从 url 开始加载并使用解压缩的几何体调用 onLoad 函数。

.setDecoderPath ( value : String ) : this

value — 包含 JS 和 WASM 解码器库的文件夹路径。

.setDecoderConfig ( config : Object ) : this

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

为解码器库提供配置。解码开始后无法更改配置。

.setWorkerLimit ( workerLimit : Number ) : this

workerLimit - 要分配的最大工人数。默认值为 4。

设置解码期间要使用的 Web Worker 的最大数量。如果工作人员还负责应用程序中的其他任务,则下限可能更可取。

.preload () : this

请求解码器库(如果尚未加载)。

.dispose () : this

处理解码器资源并释放内存。之后无法重新加载解码器。

源码

examples/jsm/loaders/DRACOLoader.js


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号