2012-07-15 10 views
5

नहीं खींचता है मैं Vertex Arrays सामान को आजमा रहा हूं लेकिन किसी कारण से glDrawElements कमांड मेरे लिए कुछ भी नहीं खींचता है। मैं glBegin/glEnd और glDrawElements का उपयोग करके आकर्षित कर सकता हूं, लेकिन glDrawElements काम नहीं करता है।ओपनजीएल: glDrawElements

इन सरणियों निर्माता में स्थापित हो:

double points[100]; 
GLint indices[50]; 

for (int i=0; i < 50; i++){ 
    points[2*i] = radius * cos(i*2*PI/50); 
    points[2*i + 1] = radius * sin(i*2*PI/50); 
    indices[i] = i; 
} 

कार्य glArrayElement के साथ ही अंक सरणी का उपयोग कर कोड: कोड स्निपेट है

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glBegin(GL_POLYGON); 
    for (int i=0; i < 50; i++){ 
     glArrayElement(i); 
    } 
    glEnd(); 
} 

भी काम कर कोड, अंक सरणी का उपयोग कर, सूचकांक सरणी के माध्यम से उपयोग किए गए विशिष्ट सूचकांक:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glBegin(GL_POLYGON); 
    for (int i=0; i < 50; i++){ 
     glArrayElement(indices[i]); 
    } 
    glEnd(); 
} 

गैर-कार्य कोड , glDrawElements का उपयोग करने का प्रयास:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glDrawElements(GL_POLYGON, 4, GL_INT, indices); 
} 

कोई सलाह? यह पूरी तरह से आवश्यक मुझे इस बिंदु पर इसका इस्तेमाल करने के लिए नहीं है, लेकिन यह परेशान है कि यह काम नहीं करता है ...

उत्तर

7

glDrawElements के 2 पैरामीटर count है, इसलिए 4 नहीं सूचकांकों की संख्या होना चाहिए (50) ?

4

के लिए

glDrawElements() 

मापदंडों इस प्रकार हैं ..:

1 [मोड] पैरामीटर आदिम किस तरह प्रस्तुत करना है।

दूसरा [गिनती] पैरामीटर प्रस्तुत करने के लिए तत्वों की संख्या होना चाहिए। अर्थात। कोने की संख्या

3 [प्रकार] पैरामीटर पैरामीटर में मान का प्रकार होना चाहिए .. केवल या तो

GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT or GL_UNSIGNED_INT 

4 [सूचकांक] पैरामीटर हो सकता है एक सूचक है जहां सूचकांक संग्रहीत किए जाते हैं।

आप इस here के बारे में अधिक पढ़ सकते हैं ..

+3

प्रयास करें "4 [सूचकांक] पैरामीटर जहां सूचकांक जमा हो जाती है के लिए सूचक है।" NOOOOOO! सूचकांक को बफर में संग्रहीत किया जाना चाहिए जो वर्तमान में GL_ELEMENT_ARRAY_BUFFER से जुड़ा हुआ है। चौथा पैरामीटर इंडेक्स सरणी में ऑफ़सेट पॉइंटर है। – IceCool

+0

मैं आधिकारिक दस्तावेज़ों का उद्धरण दे रहा था .. http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml – iKlsR

+5

ओह हाँ, ठीक है। यह वास्तव में एक सूचक है जहां सूचकांक संग्रहीत किए जाते हैं।लेकिन सामान्य सी पॉइंटर के विपरीत, यह सिस्टम मेमोरी में डेटा को इंगित नहीं करता है, इसके बजाय यह तत्व बफर में डेटा को इंगित करता है (इसलिए 0x0 आईबी में पहला तत्व है)। – IceCool

0

मैं सिर्फ एक ही समस्या का सामना करना पड़ा।

GL_UNSIGNED_INT

glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_INT, indices);