2013-05-10 9 views
8

押し出し形状の表側と裏側に異なる材料を適用しようとしていますが、side: THREE.FrontSideside: THREE.BackSideをどこに入れるのか分かりません。彼らはどこに置くべきですか?押し出し形状の裏側と裏側に異なる材料

私の関連するコードの一部は次のとおりです。

 
var materialFront = new THREE.MeshPhongMaterial({ ambient: 0xffffff, map: frontTexture }); 

var materialSide = new THREE.MeshPhongMaterial({color: 0xE68A00, ambient: 0xffffff}); 

var extrusionSettings = { 
      amount: 10, 
      bevelEnabled: false, 
      bevelThickness: 0.2, 
      bevelSize: 0.2, 
      bevelSegments: 8, 
      material: 0, 
      extrudeMaterial: 1 
}; 

var geometry = new THREE.ExtrudeGeometry(shapes, extrusionSettings); 

var materials = [materialFront, materialSide]; 

var material = new THREE.MeshFaceMaterial(materials); 

mesh = new THREE.Mesh(geometry, material); 

UPDATE: WestLangleyさんのコメントによると、私はbackfacesに異なるテクスチャを追加することに成功しました:

 
// ... 
var materials = [materialFront, materialSide, materialBack]; 
// ... 
for (var face in mesh.geometry.faces) { 
if (mesh.geometry.faces[ face ].normal.z == 1) mesh.geometry.faces[ face ].materialIndex = 2; 
} 
+0

three.js

'THREE.FrontSide'は' face'なく、 '' mesh'又はshape'の正面側の正面側を指します。何が正しく機能していないのですか? – WestLangley

+0

上記のコードを使って、裏面からメッシュを見ると、 'materialFront'もそこにあります。私はhttp://stemkoski.github.io/Three.js/Textures.htmlのダイスキューブのように、メッシュの裏側に別のマテリアルを追加したいと思います。 –

+1

three.jsソースには、 "material: //表面と裏面の材料インデックス"があります。これは、表面と裏面の材質が異なるため、インデックスが1つしかないためです。これが問題の核心です。私はバックに1つのインデックスを使用し、フロントに1つのインデックスを使用できるはずです。 –

答えて

7
あなたがメッシュジオメトリを作成した後

、およびrender()への最初の呼び出しの前に、あなたは、バックフェースのためmaterialIndex 2を変更する必要があります。次に、マテリアル配列に3番目のマテリアルを追加します。

背面の顔を顔の法線で識別することができます。ジオメトリの背面にある面の法線は、すべて同じ方向を向いている必要があります。 r.58

+0

答えをありがとう!私はf3()とf4()をチェックしましたが、 "背面のMaterialIndexを2に設定する"方法には答えませんでした。これを明確にすることができますか? –

+0

OK。これで私を助けることができたら、私はとても幸せだろう。これまでの私の試みはすべて失敗しました。 –

+0

ありがとう!質問を希望のコードで更新しました:http://stackoverflow.com/q/16484835/1691517私はこの答えを受け入れるでしょう。 –

1

は、使用してみてください:

var materialFront = new THREE.MeshPhongMaterial({ ambient: 0xffffff, map: frontTexture, side: THREE.FrontSide }); 
var materialSide = new THREE.MeshPhongMaterial({ color: 0xE68A00, ambient: 0xffffff, side: THREE.BackSide }); 

を使用してください。おそらく周囲寄与度を下げて、FrontSide資料にcolorを与えるべきです。その後

var materials = [materialFront, materialSide]; 
scene.add(THREE.SceneUtils.createMultiMaterialObject(geometry, materials)); 
+0

私のコードでは、 'materialSide'がextrusionSettings.extrudeMaterialに添付されています。だから私は背中に使うことはできません。あなたの提案がどのように機能するかはわかりません。 –

関連する問題