2011-02-17 8 views
9

मैं ओपनजीएल ईएस में एक ही घन का प्रतिनिधित्व करने के लिए अलग-अलग ऑनलाइन साइटों में विभिन्न प्रकार के शिखर देखता हूं। यहाँओपनजीएल ईएस में घन खींचने के लिए कितने कोष्ठक की आवश्यकता है?

float vertices[] = { -width, -height, -depth, // 0 
           width, -height, -depth, // 1 
           width, height, -depth, // 2 
          -width, height, -depth, // 3 
          -width, -height, depth, // 4 
           width, -height, depth, // 5 
           width, height, depth, // 6 
          -width, height, depth // 7 
     }; 
    short indices[] = { 0, 2, 1, 
       0, 3, 2, 

       1,2,6, 
       6,5,1, 

       4,5,6, 
       6,7,4, 

       2,3,6, 
       6,3,7, 

       0,7,3, 
       0,4,7, 

       0,1,5, 
       0,5,4 
         }; 

और एक और एक है: उदाहरण के लिए यह एक है

float vertices[] = { 
      //Vertices according to faces 
       -1.0f, -1.0f, 1.0f, //Vertex 0 
       1.0f, -1.0f, 1.0f, //v1 
       -1.0f, 1.0f, 1.0f, //v2 
       1.0f, 1.0f, 1.0f, //v3 

       1.0f, -1.0f, 1.0f, //... 
       1.0f, -1.0f, -1.0f,   
       1.0f, 1.0f, 1.0f, 
       1.0f, 1.0f, -1.0f, 

       1.0f, -1.0f, -1.0f, 
       -1.0f, -1.0f, -1.0f,    
       1.0f, 1.0f, -1.0f, 
       -1.0f, 1.0f, -1.0f, 

       -1.0f, -1.0f, -1.0f, 
       -1.0f, -1.0f, 1.0f,   
       -1.0f, 1.0f, -1.0f, 
       -1.0f, 1.0f, 1.0f, 

       -1.0f, -1.0f, -1.0f, 
       1.0f, -1.0f, -1.0f,   
       -1.0f, -1.0f, 1.0f, 
       1.0f, -1.0f, 1.0f, 

       -1.0f, 1.0f, 1.0f, 
       1.0f, 1.0f, 1.0f,   
       -1.0f, 1.0f, -1.0f, 
       1.0f, 1.0f, -1.0f, 
            }; 

(ध्यान दें कि यह OpenGL ES और न ओपन है) कौन सा प्रतिनिधित्व OpenGL ES में सबसे अधिक प्रदर्शन है? जब मैं प्रकाश व्यवस्था के लिए मानक निर्दिष्ट करना चाहता हूं तो सबसे अच्छा प्रतिनिधित्व कौन सा है। एसओ पर मेरे अन्य उद्धरणों में, मुझे लगता है कि मुझे घन के लिए 24 शिखर निर्दिष्ट करने की आवश्यकता है, एक और कहता है कि मुझे 36 शिखर की आवश्यकता है, फिर भी एक और कहता है कि मुझे एक ही प्रश्न के विरोधाभासी उत्तर प्राप्त करने के लिए एक अलग संख्या की आवश्यकता है। वैसे भी मैं सही एकल जवाब जानना चाहता हूं जो तकनीकी रूप से सही है।

मुझे पता है कि बैठक के लिए त्रिभुज पट्टी या त्रिभुज पंखे आदि की एक अवधारणा है, लेकिन मेरे मामले में मैं उपयोग कर रहा हूँ:

gl.glDrawElements(GL10.GL_TRIANGLES, mNumOfIndices, 
       GL10.GL_UNSIGNED_SHORT, mIndicesBuffer); 

तो यह स्पष्ट रूप से स्पष्ट करना चाहिए कि मैं क्या पूछ रहा हूँ।

उत्तर

18

यदि सूचकांक का उपयोग करते हैं, तो आपको केवल ओपनजीएल ES में घन को परिभाषित करने के लिए 8 विशिष्ट शीर्षकों को प्रदान करने की आवश्यकता होती है। उदाहरण के लिए:

static const GLfloat cubeVertices[] = { 
    -1.0, -1.0, 1.0, 
    1.0, -1.0, 1.0, 
    -1.0, 1.0, 1.0, 
    1.0, 1.0, 1.0, 
    -1.0, -1.0, -1.0, 
    1.0, -1.0, -1.0, 
    -1.0, 1.0, -1.0, 
    1.0, 1.0, -1.0, 
}; 

static const GLushort cubeIndices[] = { 
    0, 1, 2, 3, 7, 1, 5, 4, 7, 6, 2, 4, 0, 1 
}; 

यहाँ ज्यामिति के लिए एक त्रिकोण पट्टी का उपयोग करना, मैं केवल 14 सूचकांक घन निर्दिष्ट करने के लिए प्रदान करने के लिए की जरूरत है। यदि आप चाहें तो आप उपरोक्त इंडेक्स को हटा सकते हैं और उस क्रम में शिखर प्रदान कर सकते हैं।

जेनपॉल्ट उस मामले का वर्णन करता है जहां आप OpenGL ES को शुद्ध त्रिभुज प्रदान करते हैं, इस स्थिति में आपको 36 शिखर की आवश्यकता होगी। जैसा कि आप देख सकते हैं, इनमें से कई कोष्ठक अनावश्यक हैं, इसलिए स्ट्रिप्स या इंडेक्स आपको जिस ज्यामिति को भेजने की आवश्यकता है उसे कम कर सकते हैं।

एरिक अपनी टिप्पणी में एक अच्छा बिंदु लाता है, कि अगर आपको प्रत्येक चेहरे पर एक बनावट या रंग प्रदान करने की आवश्यकता है (जो appears to be your goal) तो आप 24 शिरोबियों या सूचकांक का उपयोग करना चाहेंगे। आपको इसकी आवश्यकता है ताकि आप प्रत्येक चेहरे को अलग से संबोधित कर सकें।

आपके विशेष एप्लिकेशन के लिए उच्चतम प्रदर्शन क्या होगा आप जिस हार्डवेयर को चला रहे हैं उस पर निर्भर करेगा। संभव के रूप में कोने दोहराया

सर्वश्रेष्ठ प्रदर्शन के लिए, अपने मॉडल एक भी unindexed त्रिकोण के रूप में कुछ के साथ glDrawArrays का उपयोग कर पट्टी के रूप में प्रस्तुत किया जाना चाहिए: उदाहरण के लिए, iOS उपकरणों के अंदर PowerVR चिप्स पर, एप्पल has this to say। अपने मॉडल अधिक शीर्ष आवश्यकता दोहराया जा करने के लिए है (क्योंकि कई कोने त्रिकोण कि त्रिकोण पट्टी में क्रमिक रूप से या प्रकट नहीं होते हैं क्योंकि आपके आवेदन कई छोटे त्रिकोण स्ट्रिप्स विलय कर दिया द्वारा साझा कर रहे हैं), तो आपको का उपयोग कर बेहतर प्रदर्शन प्राप्त कर सकते हैं एक अलग इंडेक्स बफर और इसके बजाय glDrawElements को कॉल करना। एक unindexed त्रिकोण पट्टी समय-समय पर पूरे कोने नकल चाहिए, जबकि एक अनुक्रमित त्रिकोण सूची सूचकांक के लिए अतिरिक्त मेमोरी की आवश्यकता है और ऊपर कोने देखने के लिए भूमि के ऊपर जोड़ता है: वहाँ एक व्यापार बंद है।सर्वोत्तम परिणामों के लिए, अपने मॉडलों को अनुक्रमित और अनइंडेक्ड त्रिकोण स्ट्रिप्स दोनों का उपयोग करके परीक्षण करें, और सबसे तेज़ प्रदर्शन करने वाले का उपयोग करें।

+1

घन चेहरे से भिन्न होने पर अतिरिक्त चरमों की आवश्यकता हो सकती है। उदाहरण के लिए प्रत्येक चेहरे पर अलग-अलग रंगों के साथ एक घन 24 अक्षरों की आवश्यकता हो सकती है, और 36 सूचकांक यदि ग्लिट्रियन के साथ खींचे जाते हैं। यदि घन के सभी किनारे दिखाई नहीं दे रहे हैं, तो चित्रों को चित्रित नहीं किया जा सकता है, जो चेहरे को चित्रित नहीं कर रहे हैं, जो इंडेक्स गिनती को कम करते हैं। –

+0

@ एमआर। बर्ना - अच्छा बिंदु। मैंने इसे अपने उत्तर में एकीकृत किया है, क्योंकि ऐसा लगता है जैसे वह अपने घन के चेहरों के लिए अलग-अलग रंगों की तलाश में है। –

+1

@ ब्रैड लार्सन - इस पुराने धागे में पोस्ट करने के लिए खेद है, लेकिन मुझे लगता है कि सूचकांक {0, 1, 2, 3, 7, 1, 6, 4, 7, 5, 2, 4, 0, 1} होना चाहिए एक सही घन बनाओ। ऐसा न हो कि तुमने मेरे लिए काम नहीं किया। =) – Dafen

संबंधित मुद्दे