ध्यान में रखने के लिए कई विचार हैं। सबसे पहले ध्यान से पढ़ना सुनिश्चित करें: https://github.com/libgdx/libgdx/wiki/ModelBuilder%2C-MeshBuilder-and-MeshPartBuilder।
दूसरा, ModelBuilder#createXXX
विधियों से बचने का प्रयास करें। वे डीबगिंग और परीक्षण उद्देश्यों के लिए सिर्फ एक शॉर्टकट हैं। आप इसके पीछे code को देखें, तो आपको लगता है कि बहुत सीधा है देखेंगे:
modelBuilder.begin();
modelBuilder.part("box", GL20.GL_TRIANGLES,
VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates,
new Material(TextureAttribute.createDiffuse(AssetLoader.tr[0])))
.box(2f, 2f, 2f);
box = modelBuilder.end();
आप इस पूरे बॉक्स के लिए एक एकल हिस्सा बनाता है देख सकते हैं, तो एक दूसरे भाग तक पहुँचने के लिए (के रूप में आप में क्या कोशिश कर रहा आपका उदाहरण) काम नहीं करेगा। लेकिन क्योंकि आप प्रत्येक चेहरे के लिए एक अलग सामग्री का उपयोग करना चाहते हैं, तो आपको प्रत्येक चेहरे के लिए एक हिस्सा बनाना होगा।
int attr = VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates;
modelBuilder.begin();
modelBuilder.part("front", GL20.GL_TRIANGLES, attr, new Material(TextureAttribute.createDiffuse(AssetLoader.tr[0])))
.rect(-2f,-2f,-2f, -2f,2f,-2f, 2f,2f,-2, 2f,-2f,-2f, 0,0,-1);
modelBuilder.part("back", GL20.GL_TRIANGLES, attr, new Material(TextureAttribute.createDiffuse(AssetLoader.tr[1])))
.rect(-2f,2f,2f, -2f,-2f,2f, 2f,-2f,2f, 2f,2f,2f, 0,0,1);
modelBuilder.part("bottom", GL20.GL_TRIANGLES, attr, new Material(TextureAttribute.createDiffuse(AssetLoader.tr[2])))
.rect(-2f,-2f,2f, -2f,-2f,-2f, 2f,-2f,-2f, 2f,-2f,2f, 0,-1,0);
modelBuilder.part("top", GL20.GL_TRIANGLES, attr, new Material(TextureAttribute.createDiffuse(AssetLoader.tr[3])))
.rect(-2f,2f,-2f, -2f,2f,2f, 2f,2f,2f, 2f,2f,-2f, 0,1,0);
modelBuilder.part("left", GL20.GL_TRIANGLES, attr, new Material(TextureAttribute.createDiffuse(AssetLoader.tr[4])))
.rect(-2f,-2f,2f, -2f,2f,2f, -2f,2f,-2f, -2f,-2f,-2f, -1,0,0);
modelBuilder.part("right", GL20.GL_TRIANGLES, attr, new Material(TextureAttribute.createDiffuse(AssetLoader.tr[5])))
.rect(2f,-2f,-2f, 2f,2f,-2f, 2f,2f,2f, 2f,-2f,2f, 1,0,0);
box = modelBuilder.end();
हालांकि, प्रत्येक चेहरे के लिए एक हिस्सा होने से प्रत्येक चेहरे के लिए रेंडर कॉल होता है।
int attr = VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates;
modelBuilder.begin();
MeshPartBuilder mpb = modelBuilder.part("box", GL20.GL_TRIANGLES, attr, new Material(TextureAttribute.createDiffuse(AssetLoader.tr[0].getTexture())));
mpb.setUVRange(AssetLoader.tr[0]);
mpb.rect(-2f,-2f,-2f, -2f,2f,-2f, 2f,2f,-2, 2f,-2f,-2f, 0,0,-1);
mpb.setUVRange(AssetLoader.tr[1]);
mpb.rect(-2f,2f,2f, -2f,-2f,2f, 2f,-2f,2f, 2f,2f,2f, 0,0,1);
mpb.setUVRange(AssetLoader.tr[2]);
mpb.rect(-2f,-2f,2f, -2f,-2f,-2f, 2f,-2f,-2f, 2f,-2f,2f, 0,-1,0);
mpb.setUVRange(AssetLoader.tr[3]);
mpb.rect(-2f,2f,-2f, -2f,2f,2f, 2f,2f,2f, 2f,2f,-2f, 0,1,0);
mpb.setUVRange(AssetLoader.tr[4]);
mpb.rect(-2f,-2f,2f, -2f,2f,2f, -2f,2f,-2f, -2f,-2f,-2f, -1,0,0);
mpb.setUVRange(AssetLoader.tr[5]);
mpb.rect(2f,-2f,-2f, 2f,2f,-2f, 2f,2f,2f, 2f,-2f,2f, 1,0,0);
box = modelBuilder.end();
इस जबकि मदद कर सकता है आप आप चाहते हैं, क्या तुम सच में अपने दृष्टिकोण पर पुनर्विचार करना चाहिए: यह सुनिश्चित करें कि सभी TextureRegion
रों शेयर एक ही बनावट इसके बजाय उसका उपयोग करने के लिए अधिक performant है। जैसा कि आप देख सकते हैं, कोड द्वारा मॉडल बनाना वास्तव में गन्दा हो सकता है। और, इसके अलावा, बॉक्स के लिए एक मॉडल बनाना अधिकांश मामलों में इष्टतम से दूर है जब तक कि आपका लक्ष्य केवल एक बॉक्स को प्रस्तुत न करें और बॉक्स से अधिक कुछ न हो। इसके बजाय अपने मॉडल बनाने के लिए मॉडलिंग एप्लिकेशन का उपयोग करें। अधिक जानकारी के लिए http://blog.xoppa.com/ पर मेरे ब्लॉग पर एक नज़र डालें। यदि आप वास्तव में अपने आप भागों को संशोधित करना चाहते हैं, तो कम से कम "दृश्यों के पीछे" ट्यूटोरियल को पढ़ने और सुनिश्चित करना सुनिश्चित करें।
धन्यवाद - यह काम करता है! हां, मैंने कोड पर एक नज़र डाली और सोचा कि वहां कुछ आसान और बेहतर तरीका होना चाहिए जिसे मैं समझ नहीं पाया। वैसे भी, ऐसा लगता है कि अलग-अलग पक्षों को विभिन्न सामग्रियों को संलग्न करने में सक्षम होने की इस विशेषता को मॉडलबिल्डर के इन सरल जेनरेट किए गए प्राइमेटिव में शामिल किया जाना चाहिए। मैं इस बात से सहमत नहीं हूं कि यह केवल परीक्षण और डिबगिंग के लिए होना चाहिए। इनके साथ कई सरल लेकिन भयानक चीजें बनाई जा सकती हैं :) धन्यवाद फिर से! – Scalarr
क्या होगा यदि आप ऐसे कई बॉक्स रखने की योजना बना रहे थे जिनके साथ आप उन वस्तुओं के रूप में व्यवहार करना चाहते थे जिनके साथ आप बातचीत कर सकते हैं? उदाहरण के लिए एक बॉक्स जिसमें गुण होते हैं जो किसी चरित्र के लड़ने वाले गुणों को प्रभावित कर सकता है। पीएस ब्लॉग के लिए धन्यवाद – Ishmael
हैलो @ एक्सओपीपीए, मैं मॉडल का उपयोग करके 2 डी स्प्राइट्स बना रहा हूं (प्रत्येक के लिए एक मॉडल) और इसमें खराब प्रदर्शन है, क्या मैं प्रत्येक स्प्राइट के लिए मेशपार्टबुइडर का उपयोग कर सकता हूं? ModelCache का उपयोग कर भी मदद नहीं कर रहा है क्योंकि TextureRigions को अलग माना जाता है। कृपया 3 डी में 2 डी स्प्राइट्स को आकर्षित करने का सबसे अच्छा तरीका सुझाएं, मैं आपके सुझाव के आधार पर ढांचा तैयार करूंगा (क्या मुझे decals, createRect, ModelCache, कई हिस्सों के साथ एकल मॉडल, रेक्ट या कुछ और के साथ एकल मॉडल मेषपार्ट का उपयोग करना चाहिए), मुझे decalBatch चाहिए आकार को 4 अक्षरों के आकार के निर्माण के लिए संशोधित करें? अग्रिम धन्यवाद – Diljeet