three.js释放模型内存(直接复制调用即可)

     在three.js中,我们简单调用remove函数来移除模型的时候,并不能完全清理模型,它的网格和贴图,材质依然还在内存中,如果频繁调用remove,很可能会出现内存泄漏,导致浏览器崩溃的情况,这里给出一个简单的清理模型的方法:

var disposeResource=function (obj) {
	if (!!obj) {
		if (Array.isArray(obj)) {
			const objCopy = obj.slice();
			while (objCopy.length > 0) {
				disposeResource(objCopy.pop());
			}
			return;
		}
		if (obj instanceof THREE.Object3D) {
			if (!!obj.parent) {
				obj.parent.remove(obj);
			}
			if (!!obj.geometry) {
				disposeResource(obj.geometry);
			}
			if (!!obj.material) {
				disposeResource(obj.material);
			}
			if (!!obj.children && obj.children.length > 0) {
				disposeResource(obj.children);
			}
		}
		else if (obj instanceof THREE.Material) {
			for (const val of Object.values(obj)) {
				if (val instanceof THREE.Texture) {
					disposeResource(val);
				}
			}

			if (!!obj.uniforms) {
				for (const val of Object.values(obj.uniforms)) {
					if (!!val) {
						const uniformValue = val.value;
						if (uniformValue instanceof THREE.Texture || Array.isArray(uniformValue)) {
							disposeResource(uniformValue);
						}
					}
				}
			}
		}
		if (!!obj.dispose) {
			obj.dispose();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值