2012-12-31 20 views
5

我有一個網格實例使用TubeGeometry爲它的路徑。當我對實例所基於的底層曲線進行更改時,我將從網格中移除網格,然後創建一個新的網格。動態添加網格不工作的內存釋放

場景更新正常,但內存爆炸,這告訴我,一旦離開場景,我不會正確釋放已移除的網格。

這裏是我試圖用解除分配代碼:

$.each(parent.children, function (idx, obj) { 
    parent.remove(obj); 
    renderer.deallocateObject(obj); 
    obj.deallocate(); 
}); 

其中parentObject3D我放在網格,並rendererWebGLRenderer的一個實例。

誰能告訴我我做錯了什麼,以及如何正確地做到這一點?

Here's a Plunk with my currently example.相關代碼在scene.js文件中,第76-86行。請注意,該示例使用r53

回答

4

你不取消分配使用的幾何

$.each(parent.children, function (idx, obj) { 
    parent.remove(obj); 
    renderer.deallocateGeometry(obj.geometry); 
    renderer.deallocateObject(obj); 
    obj.geometry.deallocate(); 
    obj.deallocate(); 
}); 
+0

'deallocateGeometry'是不是** ** R53(版本在我的例子)的方法,並在新發布的** ** R54全'WebGLRenderer.deallocate *'方法是私有的。儘管如此,+1指出缺乏幾何釋放,這似乎是問題。 – merv

+1

希望R54會讓事情變得更簡單。只需調用'geometry.dispose()'/'texture.dispose()'/'material.dispose()'... – mrdoob