Threejs:根据BufferrGeometry上的属性应用材质

时间:2017-05-15 08:42:47

标签: three.js

我知道可以根据Face3对象上的某些值分配多种材质,例如:



var materialA = new THREE.MeshLambertMaterial({color: 0x00ccee});
var materialB = new THREE.MeshLambertMaterial({color: 0xFF0000, map: buildingTexture});
var materials = [materialA, materialB];
geometry.materials = [materialA, materialB];
assignUVs(geometry);

for(var i = 0; i< geometry.faces.length; i++){
    if(geometry.faces[i].normal.y >= 0.99){
        geometry.faces[i].materialIndex = 0;
    }else{
        geometry.faces[i].materialIndex = 1;
    }

}
var object = new THREE.Mesh( geometry, materials );
&#13;
&#13;
&#13;

但是,让我们说BufferGeometry个实例上我的每个顶点的属性(在我创建几何图形时使用了正确的值),例如:

geometry.addAttribute(&#39; isLeaf&#39;,new THREE.BufferAttribute(palmBuffers.isLeaf,1));

是否可以根据该属性应用材料?

我知道更简单的方法是创建一个包含每个面值的缓冲区,而不是每个顶点,我只是想知道是否有办法从每个顶点属性开始。

1 个答案:

答案 0 :(得分:0)

我实现的解决方案是创建一个缓冲区,其具有与该几何体的面数相同的维度。然后我用我需要的值填充缓冲区,然后我使用缓冲区中的值来决定应用于每个面的whic材料。