2012-09-15 9 views
5

मैं एक साधारण इलाके संपादक बनाने के लिए एक ही विमान पर एकाधिक सामग्री रखने की कोशिश कर रहा हूं। इसलिए मैं सामग्री की एक जोड़ी बनाने के लिए, और मेरे विमान में प्रत्येक शीर्ष करने के लिए एक matetrial सूचकांक आवंटित करने के लिए प्रयास करें:थ्री.जेएस - एकाधिक सामग्री विमान

var materials = []; 
materials.push(new THREE.MeshFaceMaterial({ color: 0xff0000 })); 
materials.push(new THREE.MeshFaceMaterial({ color: 0x00ff00 })); 
materials.push(new THREE.MeshFaceMaterial({ color: 0x0000ff })); 
// Plane 
var planegeo = new THREE.PlaneGeometry(500, 500, 10, 10); 
planegeo.materials = materials; 
for(var i = 0; i < planegeo.faces.length; i++) 
{ 
    planegeo.faces[i].materialIndex = (i%3); 
} 

planegeo.dynamic = true; 
this.plane = THREE.SceneUtils.createMultiMaterialObject(planegeo, materials); 

लेकिन मैं हमेशा शेडर में या तो त्रुटियों की एक पूरी गुच्छा मिलता है, या केवल एक ही सभी लाल विमान अगर मैं FaceMaterial के बजाय मेषबासिक सामग्री का उपयोग करता हूं। कोई मदद महान thx है!

+0

के लिए अपडेट किया गया http://stackoverflow.com/questions/8820591/how-to -यूज-बहु-सामग्री-इन-ए-थ्री-जेएस-क्यूब एक ही प्रश्न के बारे में है – Gero3

+0

हां, मैंने इसे देखा, लेकिन यह तीन.जेएस का पुराना संस्करण है और यह काम नहीं कर रहा है :( –

उत्तर

11

तीन रंग के साथ एक बिसात पैटर्न प्राप्त करने के लिए ऐसा करते हैं:

// geometry 
var geometry = new THREE.PlaneGeometry(500, 500, 10, 10); 

// materials 
var materials = []; 
materials.push(new THREE.MeshBasicMaterial({ color: 0xff0000 })); 
materials.push(new THREE.MeshBasicMaterial({ color: 0x00ff00 })); 
materials.push(new THREE.MeshBasicMaterial({ color: 0x0000ff })); 

// assign a material to each face (each face is 2 triangles) 
var l = geometry.faces.length/2; 
for(var i = 0; i < l; i ++) { 
    var j = 2 * i; 
    geometry.faces[ j ].materialIndex = i % 3; 
    geometry.faces[ j + 1 ].materialIndex = i % 3; 
} 

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

संपादित करें: Three.js r.60

संबंधित मुद्दे