2015-10-19 79 views
1

我們可以使用相同的幾何和材料創建多個網格。但是每個網格的屬性是否有重複? 我很關心內存問題。謝謝 !Three.js - 關於幾何和材料的存儲

+0

你在說什麼屬性?有一個'console.log(mesh)'來查看。 :您可能想要保留幾何和材質參數......其餘的數字和布爾值用於定義方向,位置和陰影投射...... – Atrahasis

+0

我正在談論這兩個屬性,顯然沒有參考到一個uuid,但一個實例。我的意思是,具有相同uuid的相同幾何體在網格中重複。這是正確的 ? – Tiramitsu

回答

1

正如你可以THREE.Mesh代碼中看到:

THREE.Mesh = function (geometry, material) { 

    THREE.Object3D.call(this); 

    this.type = 'Mesh'; 

    this.geometry = geometry !== undefined ? geometry : new THREE.Geometry(); 
    this.material = material !== undefined ? material : new THREE.MeshBasicMaterial({ color: Math.random() * 0xffffff }); 

    this.updateMorphTargets(); 

}; 

而在clone方法:

THREE.Mesh.prototype.clone = function() { 

    return new this.constructor(this.geometry, this.material).copy(this); 

}; 

那就是從幾何創建網格時說/材質或克隆網格,其幾何和材質屬性是對相同對象的引用。如果修改材質的顏色或幾何的頂點,則原始和副本都將具有新的顏色/幾何。

+0

另請參閱http://stackoverflow.com/questions/14145275 /許多網格具有相同的幾何和材料我可以改變他們的顏色?rq = 1 – Atrahasis

+0

完美!那是我想知道的!來源真的很有用,謝謝! – Tiramitsu

+0

@Tiramitsu那麼你可以驗證並upvote – Atrahasis

0

我認爲最好的辦法是克隆

var Box_geometry = Box_geometry.clone(); 
var Box_material = Box_material.clone(); 

I've prepared a simple example in JSFIDDLE

r.73

+0

克隆方法爲每個網格創建一個新的獨立幾何,這不是我的目標。我想知道它是否存在將所有網格物體鏈接到相同幾何體(引用幾何體對象)的方式。否則,場景中的一百個網格可能會花費很多內存!每個object3D都有一個uuid,它可以是有用的,或者不是?謝謝 ! – Tiramitsu

+0

我不這麼認爲,[請看看mrdoob頁面](https://github.com/mrdoob/three.js/issues/4796) – MrFreeman555