标签:item 删除 判断 分析 remove foreach 释放 遇到 多个
// 调用添加模型代码
myObjects.push(mesh)
// 调用删除模型代码
clearScene(myObjects)
/**
* 清除模型,模型中有 group 和 scene,需要进行判断
* @param scene
* @returns
*/
function clearScene(myObjects) {
// 从scene中删除模型并释放内存
if (myObjects.length > 0) {
for (var i = 0; i < myObjects.length; i++) {
var currObj = myObjects[i]
// 判断类型
if (currObj instanceof THREE.Scene) {
var children = currObj.children
for (var i = 0; i < children.length; i++) {
deleteGroup(children[i])
}
} else {
deleteGroup(currObj)
}
scene.remove(currObj)
}
}
console.log(‘myObjects解决后‘)
console.log(myObjects)
}
// 删除group,释放内存
function deleteGroup(group) {
//console.log(group);
if (!group) return
// 删除掉所有的模型组内的mesh
group.traverse(function (item) {
if (item instanceof THREE.Mesh) {
item.geometry.dispose() // 删除几何体
item.material.dispose() // 删除材质
}
})
}
// 删除group,释放内存
function deleteGroup(group) {
if (!group) return
// 删除掉所有的模型组内的mesh
group.traverse(function (item) {
if (item instanceof THREE.Mesh) {
if(Array.isArray(item.material)) {
item.material.forEach(a => {
a.dispose()
})
}else{
item.material.dispose() // 删除材质
}
item.geometry.dispose() // 删除几何体
}
})
}
three.js删除已经添加到场景上的模型、贴图等遇到的坑、 scene.remove()没有把模型给删除,页面还存在这个元素,还可以看到
标签:item 删除 判断 分析 remove foreach 释放 遇到 多个
原文地址:https://www.cnblogs.com/sugartang/p/14538979.html