2012-10-10 25 views
10

से ओपनग्ल 3 डी पॉइंट क्लाउड रेंडर सी ++ (बनाम 2008) में ओपनजीएल का उपयोग करके 3 डी पॉइंट क्लाउड डिस्प्ले पर कुछ दिशा की आवश्यकता है। मैं एक बनावट के साथ एक 3 डी बिंदु बादल प्रदर्शन करने की कोशिश कर रहा हूँ। मेरे पास 3 2 डी सरणी (प्रत्येक आकार का 1024x512) प्रत्येक बिंदु के एक्स, वाई, जेड का प्रतिनिधित्व करता है। मुझे लगता है मैंएक्स, वाई, जेड 2 डी सर

glBegin(GL_POINTS); 
for(int i=0; i<1024; i++) 
{ 
    for(int j=0; j<512; j++) 
    { 
     glVertex3f(x[i][j], y[i][j], z[i][j]); 
    } 
}  
}  
glEnd(); 

साथ सही रास्ते पर हूँ अब इस बफर (मुझे लगता है कि) के सभी कोने लोड करता है, लेकिन यहाँ से मुझे यकीन है कि आगे बढ़ने के लिए कैसे नहीं हूँ। या मैं पूरी तरह से गलत हूं।

फिर मेरे पास एक और 2 डी सरणी (एक ही आकार) है जिसमें रंग डेटा (0-255 से मान) शामिल है जिसे मैं 3 डी पॉइंट क्लाउड और डिस्प्ले पर बनावट के रूप में उपयोग करना चाहता हूं।

+0

मेरे पास प्रत्येक बिंदु के लिए आरजीबी नहीं है इसलिए मैं glColor3 * (आर, जी, बी) का उपयोग नहीं कर सकता। मैं 3 डी पॉइंट क्लाउड के लिए अपने बनावट के रूप में अंतिम सरणी (0-255 मानों के साथ) का उपयोग करने की कोशिश कर रहा हूं। GlBegin (GL_POLYGON) से मैं इसे लेता हूं आप जाल बनाने का सुझाव दे रहे हैं ???? फिर सवाल यह है कि मेरे ऊपर क्या है, उससे प्रगति कैसे करें। या मैं पूरी तरह से गलत दिशा में जा रहा हूँ। – user1733628

+0

ठीक है, उपर्युक्त कोड मूल रूप से आपके 3 समन्वय सरणी से बिंदु बिंदु खींच जाएगा। कोई वास्तविक "बफर" नहीं है जो भर जाता है, आप सीधे तत्काल मोड में आते हैं। रंगों के लिए: जैसा कि मैं समझता हूं कि आपके पास प्रत्येक वर्टेक्स द्वारा एक हस्ताक्षरित बाइट मान है? तो आपको यह परिभाषित करना चाहिए कि ये मान कुछ रंगों का प्रतिनिधित्व कैसे करते हैं। आप उन्हें तीव्रता के रूप में उपयोग कर सकते हैं, या आप एक पैलेट, या कुछ पूरी तरह से अलग कर सकते हैं। – derhass

उत्तर

2

बिंदु ड्राइंग कोड ठीक है जैसा है।

(लंबे समय तक, यदि आप दृश्य को घुमाने वाले उपयोगकर्ता के जवाब में कहते हैं, तो आप इन समस्याओं को बार-बार आकर्षित करना चाहते हैं, तो प्रदर्शन समस्याओं में भाग ले सकते हैं। 3 arrays से डेटा को x, y, z मानों के साथ 1 में पुन: व्यवस्थित करना एक दूसरे को आप प्रत्येक glVertex से पहले glColor की जरूरत है, अंक रंग करने के लिए आप तेजी से शिखर सरणियों/VBOs का उपयोग करने की अनुमति होगी। लेकिन अब के लिए, अगर यह टूट गया नहीं है, इसे ठीक नहीं है।)

। इसे पहले, बाद में नहीं होना चाहिए, क्योंकि ओपनजीएल में ग्लवीरटेक्स का मतलब है कि यह एक पूर्ण चरम है, इसे खींचें। आपने डेटा को पॉइंट क्लाउड के रूप में वर्णित किया है, इसलिए GlBegin को GL_POLYGON में न बदलें, इसे GL_POINTS के रूप में छोड़ दें।

ठीक है, आपके पास एक बाइट रंग सूचकांक मानों के साथ एक और सरणी है। आप सिर्फ इतना है कि का उपयोग कर एक ग्रेस्केल स्तर के रूप में

glColor3ub(color[i][j], color[i][j], color[i][j]); 

साथ जो अंक काले से सफेद करने के लिए अलग-अलग दिखाना चाहिए द्वारा शुरू कर सकता है।

प्रत्येक बिंदु के लिए सही रंग प्राप्त करने के लिए, आपको रंगीन लुकअप टेबल की आवश्यकता है - मुझे लगता है कि डेटा के साथ आता है या कोई भी जो आप बना रहे हैं। यह

static GLfloat ctab[256][3] = { 
    1.0, 0.75, 0.33, /* Color for index #0 */ 
    ... 
}; 

की तरह कुछ की घोषणा की और

glColor3fv(ctab[color[i][j]]); 

साथ glVertex से पहले इस्तेमाल किया जाना चाहिए मैंने इस्तेमाल किया चल बिन्दु रंग क्योंकि है कि क्या ओपन आंतरिक रूप से इन दिनों का उपयोग करता है। यदि आप रंगों के लिए 0..255 मान पसंद करते हैं, तो सरणी को GLubyte और glColor3fv में glColor3ub में बदलें।

उम्मीद है कि इससे मदद मिलती है।