2012-06-14 30 views
14

我想在運行時使部分網格不可見。我可以將這些部分設置爲不可見/透明,例如通過改變單個面的屬性?網格本身只使用一種材料。我可以在three.js中隱藏網格的面嗎?


作爲編輯示例性圖示理解這個問題:設想一個目(這裏爲20個頂點的幾何形狀),其中的四個頂點每個四邊形建立起一個Face4。現在,網格的某些部分應該變得不可見(這裏兩個面是不可見的)。

example

+0

你的問題不是很清楚。你是否試圖將面部的可視性設置爲假(使它們不可見)? – frank

+0

我用一種我理解它的方式編輯了這個問題。特別是,因爲我也有這個問題,並不想創建一個副本。 – Matthias

回答

23

可以不同的材質指定給每個面。這裏就是面共享的材料的例子,但是一些面是透明的:

// geometry 
var geometry = new THREE.BoxGeometry(100, 100, 100, 4, 4, 4); 

// materials 
materials = [ 
    new THREE.MeshLambertMaterial({ color: 0xffff00, side: THREE.DoubleSide }), 
    new THREE.MeshBasicMaterial({ transparent: true, opacity: 0 }) 
]; 

// assign material to each face 
for(var i = 0; i < geometry.faces.length; i++) { 
    geometry.faces[ i ].materialIndex = THREE.Math.randInt(0, 1); 
} 
geometry.sortFacesByMaterialIndex(); // optional, to reduce draw calls 

// mesh 
mesh = new THREE.Mesh(geometry, materials); 
scene.add(mesh); 

更新小提琴示出在運行時改變的材料的一種方法:http://jsfiddle.net/e0x88z7w/

編輯:MeshFaceMaterial已被棄用。發佈和小提琴更新。

three.js r.87

+0

但是,如何在* runtime *處更改這些面材?我在[Fiddle](http://jsfiddle.net/2FZU7/2/)中添加了一個點擊偵聽器,它應該使所有的面都變成黃色,但它*不起作用*。我發現了一個[相關討論](https://github.com/mrdoob/three.js/issues/1303)。 – Matthias

+0

**備註:**再次使所有面部變黃都違反了該問題的用例。我[更改了代碼](http://jsfiddle.net/2FZU7/3/)將透明材質應用於每一個無法點擊的面部,當然。 – Matthias

+1

這個小提琴允許_runtime_變化。 http://jsfiddle.net/2FZU7/4/。它基於你引用的「相關討論」。另外,因爲緩衝區需要預先分配,所以不能更改爲更復雜的材料,因此在新的小提琴中,這兩種材料都是「Lambert」。 – WestLangley

相關問題