2012-01-11 14 views
11

मैं चेहरों पर 6 अलग-अलग छवियों के साथ घन प्रस्तुत करने के लिए थ्री.जेएस का उपयोग करने की कोशिश कर रहा हूं।एक थ्री.जेएस घन में एकाधिक सामग्रियों का उपयोग कैसे करें?

THREE.CubeGeometry के निर्माता इस तरह दिखता है:

THREE.CubeGeometry = function (width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides) 

मैं कोड है कि "सामग्री" या तो एक सामग्री, या 6 विभिन्न सामग्रियों की एक सरणी होने की उम्मीद है से देख सकते हैं, लेकिन सामग्री यहां प्रस्तुत होने पर प्रतीत होने पर कभी भी उपयोग नहीं किया जाता है।

इसके बजाए, मेष कन्स्ट्रक्टर को दी गई एकल सामग्री का उपयोग सभी 6 चेहरों के लिए किया जाता है।

var face_materials = ... <load 6 textures here>... 
var cube_g = new THREE.CubeGeometry(400,400,400,1,1,1, face_materials); // <= ignored? 
var cube = new THREE.Mesh(cube_g, some_material); // <= this is used instead 

यहां तक ​​कि अगर मैं अशक्त या "some_material" के रूप में अपरिभाषित गुजरती हैं, यह face_materials ओवरराइड और कुछ भी नहीं प्रस्तुत करने के लिए लगता है।

क्या इस काम को क्यूबजीमेट्री का उपयोग करने का कोई तरीका है? या क्या मुझे 6 चेहरे अलग से बनाना है और उन्हें दृश्य में जोड़ना है?

उत्तर

19

आपको जाल के लिए THREE.MeshFaceMaterial का उपयोग करने की आवश्यकता है। यहाँ उदाहरण कोड है:

var materials = []; 
for (var i=0; i<6; i++) { 
    var img = new Image(); 
    img.src = i + '.png'; 
    var tex = new THREE.Texture(img); 
    img.tex = tex; 
    img.onload = function() { 
    this.tex.needsUpdate = true; 
    }; 
    var mat = new THREE.MeshBasicMaterial({color: 0xffffff, map: tex}); 
    materials.push(mat); 
} 
var cubeGeo = new THREE.CubeGeometry(400,400,400,1,1,1, materials); 
var cube = new THREE.Mesh(cubeGeo, new THREE.MeshFaceMaterial()); 
+1

वाह, यह काम करता है! धन्यवाद। मेषफ़ेसमटेरियल गायब घटक था - बल्कि अनजाने में, क्योंकि इसकी परिभाषा है: THREE.MeshFaceMaterial() = function() {}; शायद कुछ दिन मुझे पता चल जाएगा कि यह क्यों काम करता है ... –

+2

आर 53 में मेरे लिए काम नहीं करता है। – mpso

+2

अधिक हालिया तीन.जेएस संस्करणों में ऐसा करने के बारे में जानकारी के लिए http://stackoverflow.com/questions/13795354/verification-of-using-multiple-textures-with-three-js-cubes देखें। – mpso

3

एक घन में एक से अधिक सामग्री का उपयोग कर, Three.js संस्करण 56 (मार्च 2013), http://stemkoski.github.com/Three.js/Textures.html पर उदाहरण के स्रोत कोड की जाँच के नवीनतम संस्करण के लिए का एक उदाहरण के लिए - सबसे हालिया परिवर्तन यह है कि THREE.MeshFaceMaterial को CubeGeometry में उपयोग की जाने वाली सामग्रियों की एक सरणी पारित करने की आवश्यकता है।

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