2012-07-29 15 views
8

प्रोबलेम: मैं एक साधारण पोकर कार्ड (कार्ड के पीछे और कार्ड फ्रंट के साथ) बनाने के लिए (बस मस्ती के लिए) बनाने की कोशिश कर रहा हूं। मेरे पास पीछे और आगे के लिए दो अलग-अलग छवियां हैं। मैंने आसानी से दोनों पक्षों के लिए एक बनावट के साथ एक प्लेन ज्यामिति बनाई है, लेकिन मुझे वास्तव में नहीं पता कि दूसरी तरफ एक बनावट और अन्य बनावट के लिए एक बनावट कैसे असाइन करें ... मैंने कोशिश की (बिना सफलता के :():मैं विमान के आगे और पीछे दो अलग-अलग बनावट कैसे रख सकता हूं?

var textureBack = new THREE.ImageUtils.loadTexture('images/cardBack.png'); 
var textureFront = new THREE.ImageUtils.loadTexture('images/cardFront.png');  

var material1 = new THREE.MeshBasicMaterial({ map: textureBack }); 
var material2 = new THREE.MeshBasicMaterial({ map: textureFront }); 

var geometry = new THREE.PlaneGeometry(90, 110, 1, 1);    
geometry.faces[ 0 ].materials.push(material1); 
geometry.faces[ 1 ].materials.push(material2); 

var card = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial()); 

किसी भी मदद के लिए, कृपया :)

+0

नीचे कुछ हद तक दुबला समाधान, काफी समय लगा, इसलिए मैंने सोचा कि मैं साझा करूंगा! – mattdlockyer

उत्तर

5

आप दो विमान ज्यामिति बैक-टू-बैक जगह की जरूरत है?।

सबसे पहले, सामने के लिए ज्यामिति बनाएं।

var geometry1 = new THREE.PlaneGeometry(90, 110, 1, 1); 

अब पीछे के लिए एक और ज्यामिति बनाएं।

var geometry2 = new THREE.PlaneGeometry(90, 110, 1, 1); 

स्पिन यह 180 डिग्री।

geometry2.applyMatrix(new THREE.Matrix4().makeRotationY(Math.PI)); 

आप सामग्री लोड, meshes बनाते हैं, और उन्हें एक "कार्ड" वस्तु के बच्चों के रूप में जोड़े जाने के बाद।

// textures 
var textureFront = new THREE.ImageUtils.loadTexture('images/cardFront.png');  
var textureBack = new THREE.ImageUtils.loadTexture('images/cardBack.png'); 

// material 
var material1 = new THREE.MeshBasicMaterial({ color: 0xffffff, map: textureFront }); 
var material2 = new THREE.MeshBasicMaterial({ color: 0xffffff, map: textureBack }); 

// card 
card = new THREE.Object3D(); 
scene.add(card); 

// mesh 
mesh1 = new THREE.Mesh(geometry1, material1); 
card.add(mesh1); 
mesh2 = new THREE.Mesh(geometry2, material2); 
card.add(mesh2); 

यदि आप WebGLRenderer का उपयोग इस के साथ एक आसान समय होगा।

फिडल: http://jsfiddle.net/mdAb7/11/

Three.js को r.69

+0

ओह !!! बहुत बहुत धन्यवाद!!!! मैं कोशिश करूँगा :)) – user1561017

+0

ठीक है! मैंने पहले समाधान की कोशिश की है, और यह काम किया !!!! बहुत से धन्यवाद :) एक बिंदु (शायद किसी के लिए अपशिष्ट समय से बच सकता है ...): कोड "ज्यामिति 1.applyMatrix (नया तीन। मैट्रिक्स 4()। makeRotationX (Math.PI/2)); " कार्य नहीं करते हैं, क्योंकि विधि रोटेशन बनाने के लिए नाम है, हालांकि प्रलेखन में 'makeRotationX' है, 'setRotationX' है: डी अब मैं दूसरा समाधान भी कोशिश करूंगा;) – user1561017

+0

मैंने दूसरे की कोशिश की समाधान, और यह भी काम करता है ... लेकिन मुझे लगता है कि दूसरे समाधान के साथ सभी एनिमेशन धीमे हैं ... वैसे भी, धन्यवाद! समस्या हल हो गई: डी – user1561017

5

मेरे सभी ज्यामिति को डुप्लिकेट के बिना समाधान के लिए खोज रहा था अपडेट किया गया।

यहाँ आप देवियों और सज्जनों जाना ...

var materials = [new THREE.MeshBasicMaterial({map: texture, side: THREE.FrontSide}), 
       new THREE.MeshBasicMaterial({map: textureBack, side: THREE.BackSide})]; 

var geometry = new THREE.PlaneGeometry(width, height); 

for (var i = 0, len = geometry.faces.length; i < len; i++) { 
    var face = geometry.faces[i].clone(); 
    face.materialIndex = 1; 
    geometry.faces.push(face); 
    geometry.faceVertexUvs[0].push(geometry.faceVertexUvs[0][i].slice(0)); 
} 

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

बूम फिर के लिए एक दो सामना विमान, पाश भी अधिक चेहरे के साथ ज्यामिति के साथ, काम करेंगे प्रत्येक चेहरे नकल और यह करने के पीछे बनावट लागू करने।

का आनंद लें!

+0

क्या आप कृपया बनावट को फ़्लिप करने में मेरी मदद कर सकते हैं? एक दर्पण प्रभाव –

+0

है आपको यूवी के माध्यम से जाना है और उन्हें फ़्लिप करना है। अपनी ज्यामिति वस्तु को वैश्विक चर अस्थायी रूप से बनाएं और फिर अपना ऐप चलाएं। क्रोम में जावास्क्रिप्ट कंसोल का उपयोग करें और ज्यामिति ऑब्जेक्ट (अब वैश्विक) का चर नाम टाइप करें और इसकी सामग्री को पार करें। आपको वहां संग्रहीत बनावट यूवी निर्देशांक देखना चाहिए, जिस तरह से आप अपना बनावट दिखाना चाहते हैं, उस क्रम में अपना ऑर्डर फ़्लिप करें। – mattdlockyer

+0

यह गतिशील ज्यामिति ऑब्जेक्ट (उदा। फ़्लैपिंग प्लेन) के लिए अच्छा है क्योंकि आपको केवल 1 ज्यामिति अपडेट करना है। इस समाधान का उपयोग प्रतिबिंबित छवि फ़ाइल के साथ विमान के पीछे की ओर इनपुट के रूप में मिररिंग समस्या से बचा जा सकता है। लेकिन एक साधारण ध्वज के लिए उदा। "डबलसाइड" का उपयोग कर सितारे और पट्टियाँ ठीक काम करती हैं। – steveOw

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

  • कोई संबंधित समस्या नहीं^_^