2014-11-29 6 views

उत्तर

18

PlaneBufferGeometryPlaneGeometry के लिए कम स्मृति विकल्प है। ऑब्जेक्ट स्वयं कई तरीकों से अलग है। उदाहरण के लिए, कोने PlaneBufferGeometry में स्थित हैं में PlaneBufferGeometry.attributes.positionPlaneGeometry.vertices के बजाय

आप ब्राउज़र कंसोल में एक त्वरित नज़र रखना अधिक मतभेद यह पता लगाने की कर सकते हैं स्थित हैं, लेकिन जहाँ तक मैं समझता हूँ, जब से कोने आमतौर पर पर स्थान दिया गया है एक समान दूरी (X और Y) एक दूसरे से, केवल ऊंचाइयों (Z) को कशेरुक रखने के लिए दिया जाना चाहिए।

+0

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

0

मुख्य अंतर Geometry और BufferGeometry के बीच हैं।

ज्यामिति एक "उपयोगकर्ता के अनुकूल", ऑब्जेक्ट उन्मुख डेटा संरचना है, जबकि बफर जीमेट्री एक डेटा संरचना है जो शेडर प्रोग्राम में डेटा का उपयोग करने के तरीके के बारे में अधिक सीधे नक्शा करती है। बफर जीमेट्री तेज है और कम स्मृति की आवश्यकता है, लेकिन ज्यामिति कुछ तरीकों से अधिक लचीला है, और कुछ संचालन अधिक आसानी से किया जा सकता है।

मुझे ज्यामिति के साथ बहुत कम अनुभव है, क्योंकि मुझे पता चला है कि ज्यादातर मामलों में बफर जीमेट्री नौकरी करता है। शेडर्स द्वारा उपयोग की जाने वाली वास्तविक डेटा संरचनाओं को सीखना और काम करना उपयोगी है।

let pos = geometry.getAttribute("position"); 
let pa = pos.array; 

फिर सेट z मूल्यों इस तरह::

एक PlaneBufferGeometry के मामले में, आप शीर्ष पदों पर इस तरह का उपयोग कर सकते

for (let j = 0; j < geometry.heightSegments+1; j++) { 
    for (let i = 0; i < geometry.widthSegments+1; i++) { 
          //+0 is x, +1 is y. 
     pa[3*(j*(geometry.widthSegments+1)+i)+2] = Math.random(); 
    } 
} 
pos.needsUpdate = true; 
geometry.computeVertexNormals(); 

अनियमितता सिर्फ एक उदाहरण है। यदि आप x, y, j, geometry.widthSegments, geometry.heightSegments और geometry.width, geometry.height की गणना करते हैं, तो आप x (y) का एक फ़ंक्शन भी कर सकते हैं।

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