प्रथम। आइए लिखते हैं कि हम प्रत्येक स्वर के बारे में क्या जानते हैं:
voxel = (x, y, z, color) // or some other information
सामान्य भंडारण
सामान्य तरीका यह है:
set of voxels = set of (x,y,z, color)
ध्यान दें, कि triplet (x, y, z) प्रत्येक स्वर की विशिष्ट रूप से पहचान करता है, क्योंकि voxel अंतरिक्ष में बिंदु है और एक स्थान पर दो बिंदुओं पर कब्जा करने का कोई तरीका नहीं है (मेरा मानना है कि हम स्थैतिक स्वर डेटा के बारे में बात कर रहे हैं)।
यह सरल डेटा के लिए ठीक होना चाहिए। लेकिन यह किसी भी तरह से एक तेज डेटा संरचना नहीं है।
प्रतिपादन AFAIK स्कैनलाइन एल्गोरिथ्म द्वारा किया जाता है। स्वर पर टॉम के हार्डवेयर लेख में स्कैनलाइन एल्गोरिथ्म की छवि है ।
तेजी से देखने की
यदि तेज़ लुकअप की आवश्यकता है, तो लुकअप के लिए सबसे तेज़ डेटा संरचना हैश (उर्फ़ सरणी, मैप ...) है। इसलिए आपको हैश से बाहर करना होगा। इसलिए, भोलेपन से हम मनमाना तत्व प्राप्त करने का सबसे तेज़ तरीका चाहते हैं:
array [x][y][z] of (color)
यह x, y, z निर्देशांक द्वारा स्वर को देखने के लिए O (1) है।
समस्या यह है, कि यह अंतरिक्ष की आवश्यकताएं हैं O (D ^ 3), जहां D प्रत्येक x, y और z संख्याओं की श्रेणी है (वास्तविक संख्या को भूल जाएं, क्योंकि यदि वे Chars थे, जिसमें 256 मानों की सीमा होती है, तो 256 ^ होगा 3 = 2 ^ 24 == 16 777 216 सरणी में तत्व)।
लेकिन यह इस बात पर निर्भर करता है कि आप स्वरों के साथ क्या करना चाहते हैं। यदि आप जो चाहते हैं उसका प्रतिपादन है, तो संभवतः यह वही है जो आप चाहते हैं। लेकिन भंडारण की समस्या अभी भी बनी हुई है ...
अगर भंडारण समस्या है
एक विधि सरणी में RLE संपीड़न का उपयोग करना है। वैक्सल्स के एक स्लाइस की कल्पना करें (वोक्सल्स का सेट, जहां वॉक्सल्स का एक समन्वित स्थिर मूल्य होता है .... जैसे विमान जहां उदाहरण के लिए z = 13)। वॉक्सल्स का ऐसा टुकड़ा MSPaint में कुछ साधारण ड्राइंग की तरह लग रहा होगा । Voxel मॉडल, मैं कहता हूँ, आमतौर पर सभी संभावित स्थानों के अंश (D ^ 3 स्थान सभी संभावित स्वरों) पर कब्जा कर लेते हैं। मेरा मानना है, कि "निर्देशांक के ट्रिपल से एक जोड़ी लेते हैं और शेष अक्ष को संपीड़ित करते हैं" चाल करेंगे (उदाहरण के लिए [x] [y] और प्रत्येक तत्व के लिए दिए गए x, y पर z अक्ष पर सभी स्वरों को संपीड़ित करें।) । कुछ तत्वों के लिए 0 होना चाहिए, RLE यहाँ ठीक करेगा):
array [x][y] of RLE compressed z "lines" of voxel; each uncompressed voxel has color
भंडारण की समस्या को हल करने की अन्य विधि वृक्ष डेटा संरचना का उपयोग करते हुए सरणी के बजाय होगी:
tree data structure = recursively classified voxels
for octrees: recursively classified by which octant does voxel at (x,y,z) belong to
- ऑक्ट्री, जैसा कि निक द्वारा उल्लेख किया गया है। इसे स्वरों को संपीड़ित करना चाहिए। ऑक्ट्री में देखने के लिए एक अच्छी गति है, मुझे लगता है कि यह कुछ ओ (लॉग एन) है, जहां एन वोकल्स की संख्या है।
- ऑक्ट्री को शालीनता से मनमाने ढंग से वॉक्सेल डेटा स्टोर करने में सक्षम होना चाहिए।
यदि voxels कुछ सरलीकृत ऊँचाई वाले हैं तो आप बस इसे स्टोर कर सकते हैं। या आप मापदंडों को स्टोर कर सकते हैं जो कार्यक्षेत्र को उत्पन्न करता है, उर्फ प्रक्रियात्मक रूप से इसे उत्पन्न करता है ...
और निश्चित रूप से आप सभी संभावित दृष्टिकोणों को जोड़ सकते हैं। लेकिन इसे ज़्यादा मत करो, जब तक कि आप परीक्षण न करें कि आपका कोड काम करता है और मापता है कि यह वास्तव में तेज़ है (इसलिए यह अनुकूलन के लायक है)।
टी एल; डॉ
ऑक्ट्रेसेस के अलावा Rox कंप्रेशर्स विक्स, google "voxlap", "केन सिल्वरमैन" ...
साधन
फास्ट वोकल रेंडरर बनाने के लिए संसाधनों और चर्चा की सूची है , इसमें कागजात और स्रोत कोड शामिल हैं ।