2015-09-07 8 views
6

मेरे पास इस दृश्य में 27 मेष हैं, जिनमें से प्रत्येक में एक संबंधित संख्या है। उच्चतम संख्या वाले व्यक्ति के पास स्केल 1 होगा। बाकी के पास 1 से कम मूल्य होगा।स्थिति बदलने के बिना जाल को कैसे स्केल करें?

अगला मैं तदनुसार प्रत्येक लूप पर चढ़ना चाहता हूं। मेरी समस्या तब होती है जब प्रत्येक जाल की स्थिति बदल जाती है।

वास्तव में यह आकार के आकार के लिए बढ़ाया गया है, लेकिन यह स्थिति बदलता है। मैं संघर्ष कर रहा हूं क्योंकि कई स्क्रीन ढेर हैं।

मैं सिर्फ इस उदाहरण में चढ़ाई और एक ही स्थिति में रहने के लिए आप की जरूरत:

अमेरिकी राज्यों कर दिया जाता है, लेकिन अभी भी उनकी स्थिति रखे हुए हैं। मुझे लगता है कि वे आंकड़े के केंद्र में स्केल करते हैं।

मैं meshes (प्रत्येक बुलाया "municipios")

for(var s=0; s< features.features[x].geometry.coordinates[0].length; s=s+1){      
    geometria[x].vertices.push(new THREE.Vector3((((features.features[x].geometry.coordinates[0][s][0])+75.5)*10),(((features.features[x].geometry.coordinates[0][s][1])-5.5)*10),0));         
} 
forma_figura[x]=new THREE.Shape(geometria[x].vertices); 
extrude_geometria[x]=new THREE.ExtrudeGeometry(forma_figura[x],datos_extrusion); 
municipios[x] = new THREE.Mesh(extrude_geometria[x], materialExtrude[x]); 
scene.add(municipios[x]); 

// so I change the scale: 
//formula is the value of scale. The biggest number has escale 1. 
new TWEEN.Tween(municipios[x].scale).to({ x: formula, y: formula }, 1000).start(); 
//this ultimate line is the same: municipios[x].scale.set(formula,formula,formula); 
+0

इसलिए वे आम तौर पर पैमाने को बदलने से पहले होते हैं। http://i.imgur.com/okQQ5Ue.png?1 – velez11

उत्तर

6

बनाया क्योंकि जाल स्थिति इसके केंद्र में नहीं है, या जो कुछ भी संदर्भ में आप इसे होना चाहते हैं: यदि आप औसत कोने x के साथ एक ज्यामिति बनाने 100 से अधिक घटक, इसकी दृश्य स्थिति इसकी असली स्थिति प्लस (100,0,0) होगी। यदि आपने डिफ़ॉल्ट रूप से जाल ((0,0,0) के लिए स्थिति निर्दिष्ट नहीं की है), तो यह ठीक से (100,0,0) पर दिखाई देगा। उदाहरण के लिए .5 द्वारा स्केलिंग के परिणामस्वरूप औसत स्थिति (100,0,0) * 5 = (50,0,0) होगी, जिससे जाल स्पष्ट रूप से अपनी स्थिति बदल दे।

क्या किया जाना चाहिए है:

  • सभी कोने से केंद्र के निर्देशांक घटाना करने के लिए। वर्टिस ज्यामिति के अंदर हैं, इसलिए एक बार यह हो जाने पर, geometry.verticesNeedUpdate = true सेट करने की आवश्यकता है।

  • तो जाल को क्षतिपूर्ति करने के लिए केंद्र के निर्देशांक जोड़ने के लिए।

तो परिणामस्वरूप जाल को बिना किसी स्थानांतरित किए अपने केंद्र में रखा जाएगा।

  • Three.js आपके जाल केंद्रित कर सकता है स्वचालित रूप से geometry.center() और THREE.GeometryUtils.center(geometry) साथ सीमांकन बॉक्स की केंद्र के आधार पर:

    केंद्र परिभाषित करने के लिए तीन अलग अलग संभावनाएं हैं।

  • आप केंद्र पर अपने औसत निर्देशांक प्राप्त करने के लिए पहली बार शीर्षकों के माध्यम से लूपिंग करके गणना कर सकते हैं।
  • आप न तो बॉडिंग बॉक्स का केंद्र चाहते हैं, न ही सेंट्रॉइड, लेकिन कस्टम सेंटर। उदाहरण के लिए यदि आप 'लोगों' मेस को स्केल कर रहे हैं और चाहते हैं कि उनके पैर किसी भी पैमाने पर जमीन को छूएं: क्षैतिज विमान पर जो केंद्र आप चाहते हैं वह पहले दो में से एक हो सकता है, लेकिन इसका लंबवत समन्वय निम्नतम लंबवत समन्वय होना चाहिए (पैर के बहुत नीचे)।

बेशक यदि आपके मेष को 3 डी एडिटर सॉफ़्टवेयर से आयात किया जाता है तो आप इसके अंदर भी ऐसा कर सकते हैं।

+0

मैं अपनी अज्ञानता से बहाना करता हूं लेकिन मुझे समझ में नहीं आता है। मुझे समझ में आया कि मुझे स्थानीय निर्देशांक 0,0,0 के सभी जाल बिंदु को स्थानांतरित करना होगा। http://i.imgur.com/jXM7t63.png। मैंने यह किया: – velez11

+0

नगर पालिका [i] .position.x = ऑफसेटअरे [i] .x; नगर पालिका [i] .position.y = offsetArray [i] .y नगर पालिका [i] .position.z = ऑफसेटअरे [i] .z; // ऑफसेटअरे [i] 0,0,0 प्रत्येक जाल के लिए स्थानीय है। – velez11

+0

जो मुझे प्रत्येक जाल के लिए पैमाने लागू करने के बाद 0,0,0 में डाल दिया गया है और आखिरकार मैंने किया: नगर पालिका [i] .translate.x = 0; नगर पालिका [i] .translate.y = 0; नगर पालिका [i] .translate.z = 0; – velez11

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