我使用另外的mtl文件从obj文件加载模型。如何在r55中正确处理或取消分配返回的Object3D中的所有几何/材质/纹理?
答案 0 :(得分:3)
试试这个:
object.traverse( function ( child ) {
if ( child.geometry !== undefined ) {
child.geometry.dispose();
child.material.dispose();
}
} );
答案 1 :(得分:1)
感谢mrdoob's example,我创建了一个递归处理three.js对象的函数。我将它添加到我的个人three.js util库中:https://github.com/MarcoSulla/my3
function dispose3(obj) {
/**
* @author Marco Sulla (marcosullaroma@gmail.com)
* @date Mar 12, 2016
*/
"use strict";
var children = obj.children;
var child;
if (children) {
for (var i=0; i<children.length; i+=1) {
child = children[i];
dispose3(child);
}
}
var geometry = obj.geometry;
var material = obj.material;
if (geometry) {
geometry.dispose();
}
if (material) {
var texture = material.map;
if (texture) {
texture.dispose();
}
material.dispose();
}
},
我希望这个函数将以Scene.remove
方法添加到three.js代码中(只有在设置了可选标志时才可以调用)。
答案 2 :(得分:0)
我用这个:
function removeReferences(removeme){
try{
removeme.traverse(function(ob){
try{
renderer.deallocateObject(ob);
}catch(e){}
try{
ob.geometry.deallocate();
}catch(e){}
try{
ob.material.deallocate();
}catch(e){}
try{
ob.deallocate()
}catch(e){}
});
}catch(e){}
}