2010-01-03 9 views
7

में कई क्षेत्रों को चित्रित करना मैं ओपनजीएल का उपयोग करके कई क्षेत्रों (~ 100k) को आकर्षित करना चाहता हूं। अब तक, मैं की तरहओपनजीएल

for (int i=0; i<pnum; i++){ 
    glPushMatrix(); 
    glTranslatef(bpos[i].x, bpos[i].y, bpos[i].z); 
    glCallList(DListSPHERE); 
    glPopMatrix(); 
} 

कुछ कर रहा हूँ उचित क्षेत्रों उपयोग करने से पहले, मैं GL_POINTS इस्तेमाल किया। इससे मुझे glDrawArrays पर कॉल करने की इजाजत दी गई जिसमें सभी बिंदुएं बहुत कुशल थीं। क्या उपरोक्त कोड की तुलना में कई, समान वस्तुओं को आकर्षित करने का कोई बेहतर तरीका है?

+1

ग्रेगरी पाकोज़ ने उल्लेख किया है, ऐसा करने का मानक तरीका है। हालांकि, मुझे वास्तव में नहीं मिल रहा है कि असली दुनिया के मामले में ~ 100 के क्षेत्र की आवश्यकता होगी। जिन चीजों के बारे में मैं सोच सकता हूं वे गोल बिंदुओं के साथ बेहतर ढंग से सेवा करेंगे। अपने उपयोग के मामले में कुछ प्रकाश डालने की देखभाल? – Bahbar

+0

मैं शनि के छल्ले अनुकरण करता हूं और मैं वास्तविक समय में परिणामों को देखना चाहता हूं। "गहराई" की दृश्य प्रतिक्रिया महत्वपूर्ण है और इसलिए सरल बिंदु काम नहीं करते हैं। उदाहरण के लिए देखें: http://hanno-rein.de/examplespheres.png और http://hanno-rein.de/examplepoints.png – hanno

+1

अच्छा चित्रण। आप एक पिक्सेल शेडर में प्रकाश कर कर क्षेत्र को देख सकते हैं। यहां तक ​​कि केवल एक बुनियादी बनावट लगाने से आपको पहले से ही मदद मिलेगी। प्वाइंट होने के कारण, 100 के गोले पेर्फ को चोट पहुंचाने के लिए बाध्य हैं, जबकि अंक उतना अधिक नहीं हैं (जैसा कि आपने पहले ही देखा है)। – Bahbar

उत्तर

8

instancing पर इस पेज पर एक नज़र डालें: यह कई संदर्भ हैं:

भी Geometry instancing on Wikipedia देखें।

3

यदि आप ~ 100k गोले आकर्षित करते हैं, तो आप उन्हें अनुमानित करने के लिए बहुभुज मेष का उपयोग करने के बजाय उन्हें raycasting पर विचार करना चाहेंगे। सिग एट अल द्वारा पेपर GPU-Based Ray-Casting of Quadratic Surfaces। (2006) और Splatting Illuminated Ellipsoids with Depth Correction द्वारा गमहोल्ड (2003) दिखाते हैं कि यह कैसे करें। यदि आप ऐसा करते हैं, तो आप अपने अधिक तेज़ बिंदु स्प्राइट कोड का पुन: उपयोग कर सकते हैं।

2

आप वास्तविक क्षेत्र ज्यामिति के बिना एक प्रस्तुत क्षेत्र के प्रभाव को डुप्लिकेट करने के लिए बिंदु sprites और एक टुकड़ा शेडर का उपयोग कर सकते हैं। हालांकि, मैं पहले इंस्टेंसिंग करने की कोशिश करता हूं।