2011-07-28 29 views
8

मैं यह नहीं समझ सकता कि आईफोन के लिए ओपनगल एएस 2.0 में मेरे इलाके के लिए वर्टेक्स बफर ऑब्जेक्ट का उपयोग कैसे किया जाए। यह स्थिर डेटा है इसलिए मैं वीबीओ का उपयोग कर गति बढ़ाने की उम्मीद कर रहा हूं। नियमित ओपनजीएल में, मैं शेडर्स के साथ डिस्प्ले सूचियों का उपयोग करता हूं कोई समस्या नहीं। हालांकि, ओपनजीएस एएस 2.0 में मुझे श्रेय को वर्टेक्स डेटा को एक विशेषता के रूप में भेजना है और यह नहीं पता कि यह वीबीओ के साथ कैसे काम करता है। कशेरुक बफर कैसे पता चलेगा कि कशेरुक डेटा को बाध्य करने के लिए उसे किस विशेषता को बांधना है? क्या यह Opengl es 2.0 में भी संभव है? यदि नहीं, तो क्या मेरे अन्य इलाकों के प्रतिपादन को अनुकूलित करने के अन्य तरीके हैं जो स्थैतिक हैं?ओपनजीएल ईएस 2.0 और वर्टेक्स बफर ऑब्जेक्ट्स (वीबीओ)

उत्तर

12

ज़रूर, यह वास्तव में बहुत सरल है, अपनी विशेषता का एक स्थान है, और शिखर डेटा इस तरह, सादे वर्टेक्स सरणी के लिए glVertexAttribPointer साथ तंग आ गया है:

float *vertices = ...; 
int loc = glGetAttribLocation(program, "position"); 
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices); 

VBOs के लिए, यह एक ही है, लेकिन आपके पास GL_ARRAY_BUFFER लक्ष्य पर बफर को बांधने के लिए, और glVertexAttribPointer का अंतिम पैरामीटर अब बफर मेमोरी स्टोरेज में ऑफसेट है। सूचक मूल्य अपने आप में एक ऑफसेट के रूप में व्याख्या की है:

glBindBuffer(GL_ARRAY_BUFFER, buffer); 
int loc = glGetAttribLocation(program, "position"); 
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, 0); 

इस मामले में ऑफसेट संभालने शिखर डेटा बफर के शुरू में अपलोड की गई है, 0 है। ऑफसेट बाइट्स में उपाय है।

ड्राइंग तब glDrawArrays/glDrawElements के साथ किया जाता है। उम्मीद है की यह मदद करेगा!

+0

हां यह मुझे जो चाहिए वह करना चाहिए। मैं कल कोशिश करूँगा। धन्यवाद! – Nitrex88

+0

अगर मैं दूसरे उदाहरण में 'कोष्ठक' के साथ क्या करना चाहूंगा तो यह शायद मेरी मदद करेगा। एक विचार? –

+1

@Stephane शिखर glbufferData का उपयोग कर एक वीबीओ पर अपलोड किया जाना चाहिए। –