我还使用 mtl 文件从 obj 文件加载模型。如何从 r55 中返回的 Object3D 中正确处理或取消分配所有几何体/材质/纹理?
问问题
2090 次
3 回答
5
尝试这个:
object.traverse( function ( child ) {
if ( child.geometry !== undefined ) {
child.geometry.dispose();
child.material.dispose();
}
} );
于 2013-02-01T17:47:53.500 回答
1
感谢mrdoob 的示例,我创建了一个递归处理 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();
}
},
我希望这个函数将被添加到三个.js 代码中,在Scene.remove
方法中(可能只有当你设置一个可选标志时才调用)。
于 2016-03-12T08:07:40.193 回答
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){}
}
于 2013-02-02T14:18:52.123 回答