我想在運行時使部分網格不可見。我可以將這些部分設置爲不可見/透明,例如通過改變單個面的屬性?網格本身只使用一種材料。我可以在three.js中隱藏網格的面嗎?
作爲編輯示例性圖示理解這個問題:設想一個目(這裏爲20個頂點的幾何形狀),其中的四個頂點每個四邊形建立起一個Face4
。現在,網格的某些部分應該變得不可見(這裏兩個面是不可見的)。
我想在運行時使部分網格不可見。我可以將這些部分設置爲不可見/透明,例如通過改變單個面的屬性?網格本身只使用一種材料。我可以在three.js中隱藏網格的面嗎?
作爲編輯示例性圖示理解這個問題:設想一個目(這裏爲20個頂點的幾何形狀),其中的四個頂點每個四邊形建立起一個Face4
。現在,網格的某些部分應該變得不可見(這裏兩個面是不可見的)。
可以不同的材質指定給每個面。這裏就是面共享的材料的例子,但是一些面是透明的:
// 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
但是,如何在* runtime *處更改這些面材?我在[Fiddle](http://jsfiddle.net/2FZU7/2/)中添加了一個點擊偵聽器,它應該使所有的面都變成黃色,但它*不起作用*。我發現了一個[相關討論](https://github.com/mrdoob/three.js/issues/1303)。 – Matthias
**備註:**再次使所有面部變黃都違反了該問題的用例。我[更改了代碼](http://jsfiddle.net/2FZU7/3/)將透明材質應用於每一個無法點擊的面部,當然。 – Matthias
這個小提琴允許_runtime_變化。 http://jsfiddle.net/2FZU7/4/。它基於你引用的「相關討論」。另外,因爲緩衝區需要預先分配,所以不能更改爲更復雜的材料,因此在新的小提琴中,這兩種材料都是「Lambert」。 – WestLangley
你的問題不是很清楚。你是否試圖將面部的可視性設置爲假(使它們不可見)? – frank
我用一種我理解它的方式編輯了這個問題。特別是,因爲我也有這個問題,並不想創建一個副本。 – Matthias