1

多くの頂点と面 (グリッド) で構成される Three.Geometry オブジェクトがあります。選択した面の色や素材を動的に変更したい。

geometry.colorsNeedUpdate = true; 
geometry.faces[1].color.setHex(0xcccccc);   //this doesn't work

上記のコードは、新しい色の不透明度を奇妙にします。色を置き換えるのではなく、新しい色と古い色をブレンドするように動作します。したがって、暗い色をライガーで上書きすることはできません。これを修正するには?私の資料は適用されます:

mat = new THREE.MeshBasicMaterial({color:"white",shading: THREE.FlatShading,side: THREE.DoubleSide,vertexColors: THREE.FaceColors, needsUpdate : true});

私がやりたかった別のアプローチは、他の資料への参照を変更することでもあります。

geometry.faces[0].materialIndex = 1; // works only when disabled OpenGL in browser

すでに set material.needsUpdate flag to true チェック 済み https://github.com/mrdoob/three.js/wiki/Updates

まだ変化なし。

4

1 に答える 1

1

リンゴとオレンジを混ぜています。MeshFaceMaterialフェイスカラー と を同時に使用しないでください。

まず、WebGLRenderer では、materialIndex一度メッシュをレンダリングした後は面を変更することはできません。ただし、マテリアル アレイ内のマテリアルの 1 つを変更することはできます。

MeshBasicMaterialメッシュ マテリアルにを使用し、 を指定する必要がありますvertexColors: THREE.FaceColors。そうすれば、それぞれの顔の色を制御できます。チェッカーボードのパターンが得られるように、必ず各面の色にイニシャルを付けてください。また、マテリアルの色を に設定し0xffffffます。そうしないと、回避しようとしている乗算効果が表示されます。

three.js r.58

于 2013-07-07T18:11:03.230 に答える