2012-09-18 21 views
7

既存のMeshの面でmaterialIndexを変更する方法はありますか?これはHow to Update Thingsのドキュメントでは説明されていないため、可能かどうかはわかりません。私はこれのためにWebGLRendererコンテキストを使用しています。three.js更新ジオメトリface materialindex

これは私が何をしようとしている基本的には次のとおりです。

// Make a mesh with two materials 
var texture = THREE.ImageUtils.loadTexture(IMAGE_URL); 
var geometry = new THREE.Geometry(); 
geometry.materials.push(new THREE.MeshBasicMaterial({ wireframe: true, vertexColors: THREE.FaceColors})); 
geometry.materials.push(new THREE.MeshBasicMaterial({ map: texture, overdraw: true})); 

whatever.forEach(function(w, i) { 
    geometry.vertices.push(makeVerts(w)); 

    var materialIndex = 0; 
    var color = new THREE.Color(i); 
    geometry.faces.push(new THREE.Face4(i*4+0, i*4+1, i*4+2, i*4+3, 
        null, color, materialIndex)); 
}); 

var mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial()); 
scene.add(mesh) 


// Later on, change some faces to a different material 

geometry.faces.filter(someFilter).forEach(function(face) { 
    face.color = someOtherColor; 
    face.materialIndex = 1; 
} 

geometry.colorsNeedUpdate = true; // This is how to update the color, and it works. 
//geometry.materialsNeedUpdate = true; // This isn't a thing, is it? 

答えて

13

この動作は変更されました。

あなたがTHREE.Geometryを使用している場合は、面材指数変更するには、次のパターンを使用することができます。ジオメトリは以前にレンダリングされた場合

mesh.geometry.faces[ 0 ].materialIndex = 1; 

を、あなたも

mesh.geometry.groupsNeedUpdate = true; 

を設定する必要がありますthree.js r.88

+0

ああ、意味があります。行動の背後にある理由を説明してくれてありがとう。 – JDS

関連する問題