मैं हजारों क्यूब्स खींचने के लिए एक बफर जीमेट्री का उपयोग कर रहा हूं जो इलाके को बनाता है, लेकिन अगर मुझे क्यूबों में से किसी एक की स्थिति बदलने की ज़रूरत है तो ज्यामिति को कैसे अपडेट किया जाए, यह जानने में कठिनाई हो रही है। उदाहरण के लिए, मैं अपने ज्यामिति को प्रारंभ करने के लिए इस कोड है: (मैं this example के एक अद्यतन संस्करण पर अपना परीक्षण कर रहा हूँ)एक बड़े बफर जीमेट्री को तुरंत कैसे अपडेट करें?
// 12 triangles per cube (6 quads)
var triangles = 12 * 150000;
var geometry = new THREE.BufferGeometry();
geometry.attributes = {
position: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
},
normal: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
},
color: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
}
}
positions = geometry.attributes.position.array;
normals = geometry.attributes.normal.array;
colors = geometry.attributes.color.array;
अगर मैं एक घन ले जाते हैं, जब तक मैं ऐसा करने के लिए ले जाया जा दिखाई नहीं देगा :
geometry.attributes.position.needsUpdate = true;
यह अपडेट होने के दौरान एफपीएस को छोड़ने का कारण बनता है। क्या मैं ऐसा कर सकता हूं? जब मैं केवल एक घन (12 त्रिकोण/36 शिखर) बदल रहा हूं तो थोड़ा अनावश्यक लगता है। हालांकि यह हो सकता है - मैंने जांच नहीं की है कि needsUpdate
वास्तव में क्या करता है। अनुमान लगाया कि यह सरणी को फिर से सरणी भेजता है।
मैं सोच रहा था कि मैं ज्यामिति को अलग छोटे बफर जीमेट्रीज़ में विभाजित कर सकता हूं लेकिन मुझे यकीन नहीं है कि इससे समग्र प्रदर्शन में मदद मिलेगी। जो मैं समझता हूं, उससे अधिक ज्यामिति = कम एफपीएस।
अगर किसी के पास कोई विचार है कि मैं यह कैसे करूं, तो इसकी सराहना की जाएगी! :) अद्यतन करने के मुद्दे के अलावा, बफर जीमेट्री मुझे बिल्कुल वही लगता है जो मुझे चाहिए। धन्यवाद!
यकीन है कि कौन-सा संस्करण यह बदल गया था, लेकिन 'की r81' इस [' BufferAttribute'] (https में विलय कर दिया गया है के रूप में: // github.com/mrdoob/three.js/blob/r81/src/core/BufferAttribute.js#L27)। – Jay