2012-04-01 21 views
9

मैं एक 2 डी खेल परियोजना पर काम कर रहा हूँ जहाँ मैं इस तरह के रूप 2D बहुभुज (बंद पथ) आकर्षित करने के लिए उपयोगकर्ताओं की उम्मीद कर रहा हूँ:ओपनजीएल 2 डी बहुभुज आकार ड्राइंग और हेरफेर?

Explanation

संभव समाधान:

1 - अंक और गणना से ड्रा सीमा रेखाएं
1 समस्या - सीमा रेखाओं की गणना।

2 - एक अंडाकार से शुरू करें और उपयोगकर्ता को शिखर स्थानांतरित करके इसे दोबारा दोहराएं।
2 समस्या - जब अंडाकार बढ़ता है, तो यह उन शिखरों के बीच अंतराल बनाता है जहां आप पुनः आकार नहीं ले सकते हैं।

3 - जोड़ें और ले जाएँ कोने
3 समस्या - कान कतरन त्रिकोणीयकरण stucks somepoint पर (53th लाइन while पाश @http://pastebin.com/Ug337mH2, अनंत लूप में चला जाता है)

** कुछ सोच के बाद, मैंने तय कर लिया कि मैं बेहतर करने पर काम अनंत लूप (विधि 3 में) समस्या को जोड़ने और वर्टेक्स विधि को स्थानांतरित करने के बजाय समस्या। 53. लाइन पर while लूप में अनंत लूप का कारण क्या है (http://pastebin.com/Ug337mH2 देखें)?

मेरा अनुमान है: कान कतरन ट्राईऐन्ग्युलेशंस कैसे मैं आसानी से अपने खेल में बहुभुज ड्राइंग लागू कर सकते हैं किसी भी त्रिकोण के लिए कुछ शीर्ष संलग्न करने के लिए विफल रहता है और पुन: प्रयास रहता है **

।?

+0

उपयोगकर्ता जा रहा में विवश किया जा रहा है कि वे किस तरह बहुभुज? मेरा मतलब है कि उन्हें एक नई लाइन बनाने से रोका जाएगा जो मौजूदा एक को छेड़छाड़ करता है? – Robinson

+0

वास्तव में लाइनों के लिए एक दूसरे को छेड़छाड़ करना ठीक है ... वे वैसे भी अलग त्रिकोणों में समूहित होने जा रहे हैं। तो मुझे लगता है कि अगर वे छेड़छाड़ करते हैं तो यह काम करेगा। –

+0

समाधान 3 अनंत लूप समस्या को छोड़कर बहुत अच्छी तरह से काम करता है: /। मैंने थोड़े लूप के लिए "नकली" फिक्स बनाया है http://pastebin.com/nw4ZAM7d यह अनंत लूप के कारण शिखर को अनदेखा करता है। –

उत्तर

2

उपयोग ओपन के tesselator:

#include <gl/gl.h> 
    #include <gl/glu.h> 
    #include <vector> 

    using namespace std; 

    typedef vector< vector< GLdouble* > > contours; 
    contours poly; 
    //Initialize poly here 

    GLUtesselator* tess = gluNewTess(); 
    gluTessCallback(tess, GLU_TESS_BEGIN, (void (CALLBACK*)())&BeginCallback); 
    gluTessCallback(tess, GLU_TESS_VERTEX, (void (CALLBACK*)())&VertexCallback); 
    gluTessCallback(tess, GLU_TESS_END, (void (CALLBACK*)())&EndCallback); 
    gluTessCallback(tess, GLU_TESS_COMBINE, (void (CALLBACK*)())&CombineCallback); 
    gluTessCallback(tess, GLU_TESS_ERROR, (void (CALLBACK*)())&ErrorCallback); 
    gluTessNormal(tess, 0.0, 0.0, 1.0); 
    gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); 
    gluTessProperty(tess, GLU_TESS_BOUNDARY_ONLY, GL_FALSE); //GL_FALSE 
    gluTessBeginPolygon(tess, NULL); 
    for (UINT i = 0; i < poly.size(); ++i) 
    { 
     gluTessBeginContour(tess); 
     for (UINT j = 0; j < poly[i].size(); ++j) 
     { 
      gluTessVertex(tess, poly[i][j], poly[i][j]); 
     } 
     gluTessEndContour(tess); 
    } 
    gluTessEndPolygon(tess); 
    gluDeleteTess(tess); // Delete after tessellation 
+0

libgdx का उपयोग कर रहा हूं, इसलिए ग्लू यहां पहुंचने के लिए काफी कुछ है। अगर आप जानते हैं कि कैसे टेस्सेलेशन और त्रिकोण कार्य करता है तो कृपया मुझे बताएं कि कानक्लिंगिंगग्रैंगुलेटर क्लास अनंत लूपिंग के कारण क्या हो सकता है। त्रिभुज के लिए वर्टेक्स पैरामीटर पर कोई नियम हैं? –

+0

@ एहमेट: यह ग्लूट नहीं है, यह ग्लू है। विभिन्न चीजें :) –

+0

@StuartGolodetz सुधार के लिए धन्यवाद;) –

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