MultiMaterial
Beépített Three.js objektumok használatakor hátránynak tűnhet, hogy a test minden lapja egyforma anyagjellemzővel jelenik meg. Ha például egy kockát textúrázott anyaggal látunk el, minden lapjára rákerül a mintázat. Ha más mintázatot, színt, átlátszóságot szeretnénk a lapoknak adni, használjuk a MultiMaterial objektumot. Ez tulajdonképpen egy listát képez önálló anyag objektumokból, a tárgyaink lapjai pedig egy indexet kaphatnak, hogy közülük melyiket használják fel. A beépített téglatest objektum is fel van készítve a többszörös anyag kezelésére, ebben az esetben 6 darab anyag objektumot kell a listához adni.
Használati példánk a ThreeJsTextureTrapeziumMultiMaterial példaprogram alapján készül. A példaprogramot használtuk korábban saját geometria létrehozásának bemutatására, valamint saját objektum textúrázásának bemutatására is. Ezen a részek ismertetésére így itt most nem térünk ki.
Első lépésként létrehozunk egy matArray nevű üres tömböt és hozzáadunk annyi anyagot, amennyire szükségünk lesz. Jelen esetben kettő ilyen van, egy sima kék színű, valamint egy textúrázott.
var matArray = [];
matArray.push( new THREE.MeshPhongMaterial( {
color: 0x000090,
side: THREE.DoubleSide
} ) );
matArray.push( new THREE.MeshPhongMaterial( {
map: texture,
color: 0xffffff,
side: THREE.DoubleSide
} ) );
A lapok tömbjének létrehozásakor minden laphoz megadjuk a materialIndex attribútumot is, amely majd a matArray tömb elemeit címzi. Az első elem indexe 0!
var f1 = new THREE.Face3( 0, 1, 2 );
f1.materialIndex = 0;
geometry.faces.push( f1 );
var f2 = new THREE.Face3( 1, 3, 2 );
f2.materialIndex = 1;
geometry.faces.push( f2 );
var f3 = new THREE.Face3( 2, 3, 4 );
geometry.faces.push( f3 );
f3.materialIndex = 0;
geometry.computeFaceNormals();
A síkidom modellhez létrehozzuk az anyag objektumot az előzőleg definiált tömb alapján és ezt használjuk a Mesh definiálásához.
var faceMaterial = new THREE.MultiMaterial( matArray );
var poly = new THREE.Mesh( geometry, faceMaterial );
scene.add( poly );
További példát fogunk látni a többszörös anyag használatra az átlátszó textúrázás témakörnél.