選択した個々のメッシュの色を変更するために複数のメッシュをマージするときに使用されるバッファと対話することは可能ですか?
メッシュのコレクションでこのようなことを行うのは簡単ですが、複数の異なるマテリアルを持つマージされたメッシュはどうですか?
選択した個々のメッシュの色を変更するために複数のメッシュをマージするときに使用されるバッファと対話することは可能ですか?
メッシュのコレクションでこのようなことを行うのは簡単ですが、複数の異なるマテリアルを持つマージされたメッシュはどうですか?
@hgates、あなたの最後のコメントは私にとって非常に役に立ちました。私は何日も同じものを探していました!
各面に色を設定し、マテリアルに真の vertexColor を設定すると、問題が解決します! :)
同じ状況にある人に適切な答えを追加するために使用した概念全体をここに書きます。
// Define a main Geometry used for the final mesh
var mainGeometry = new THREE.Geometry();
// Create a Geometry, a Material and a Mesh shared by all the shapes you want to merge together (here I did 1000 cubes)
var cubeGeometry = new THREE.CubeGeometry( 1, 1, 1 );
var cubeMaterial = new THREE.MeshBasicMaterial({vertexColors: true});
var cubeMesh = new THREE.Mesh( cubeGeometry );
var i = 0;
for ( i; i<1000; i++ ) {
// I set the color to the material for each of my cubes individually, which is just random here
cubeMaterial.color.setHex(Math.random() * 0xffffff);
// For each face of the cube, I assign the color
for ( var j = 0; j < cubeGeometry.faces.length; j ++ ) {
cubeGeometry.faces[ j ].color = cubeMaterial.color;
}
// Each cube is merged to the mainGeometry
THREE.GeometryUtils.merge(mainGeometry, cubeMesh);
}
// Then I create my final mesh, composed of the mainGeometry and the cubeMaterial
var finalMesh = new THREE.Mesh( mainGeometry, cubeMaterial );
scene.add( finalMesh );
それが私を助けたので、それが役立つことを願っています! :)
「色を変える」の意味によって異なります。マージ後、メッシュは他のマージされていないメッシュと同様であることに注意してください。
頂点の色を意味する場合は、面を反復処理して、マテリアル インデックスに基づいて変更する頂点の色を決定する可能性があります。
マテリアル自体に色を設定する場合は、可能です。マージされたメッシュは、通常のメッシュと同じように複数のマテリアルを持つことができMeshFaceMaterial
ますが、自分でマージする場合は、ジオメトリごとにマテリアル インデックス オフセット パラメータを渡す必要があります。