TLDR: घटक बनाने के लिए कई जाल से मिलकर शुरू होता है।
मैं ऐस्केरनॉन / बाइटे 56 / लॉरेंट से सहमत हूं कि मेष / सामग्री जोड़े और इकाई के बीच एक अन्य स्तर पर अप्रत्यक्षता की आवश्यकता है। ग्राफिक्सकम्पोनेंट को कोने और सामग्री के रूप में देखने के बजाय, इसे अंतिम रेखापुंज पर पिक्सेल के एक बूँद के रूप में सोचें - यह कैसे मिलता है / उन्हें कार्यान्वयन विस्तार है और इससे ज्यादा कुछ नहीं।
मैंने अपनी परियोजना के लिए इस बारे में बहुत सोचा और मुझे लगता है कि इष्टतम समाधान ग्राफिक्सकॉमपॉइंट को एक उच्च स्तर का घटक बनाने के लिए है, जिसमें पारंपरिक 'मॉडल' ऑब्जेक्ट की कार्यक्षमता का बहुत कुछ शामिल है - क्योंकि यह कार्यक्षमता वैकल्पिक नहीं है! उन बहुभुजों को प्रस्तुत करने के लिए बफर डेटा की तुलना में बहुत अधिक है और शेडर की आवश्यकता है, जैसे:
- स्थिति जिसका आपने उल्लेख किया है
- स्किनिंग / एनिमेशन डेटा
- वर्तमान पास (उदाहरण के लिए दो पास अल्फा का उपयोग करते हुए)
- छाया ढलाई की जानकारी (यदि आप कर रहे हैं)
- सामग्री को कैसे और कब अपडेट करना है, इस बारे में जानकारी
- कार्यशीलता में कमी
और कण प्रणाली, बिलबोर्ड आदि पर विचार किए बिना सिर्फ 3 डी संपत्ति के लिए, लेकिन यह सब केवल ग्राफिक्स / प्रतिपादन कोड के लिए उचित है - यह भौतिकी, ध्वनि या पटकथा को प्रभावित नहीं करता है, इसलिए यह समझ में आता है कि इसमें बैठना चाहिए ग्राफिक्स / प्रतिपादन घटक।
मैं इसके साथ समाप्त हुआ:
Model : Entity, IHasGraphicsComponent, IHasSkeleton, IHasAnimationStore //This is the 'game object' - it is passed to the GraphicsController
ModelComponent : GraphicsComponent //This is the actual graphics component, used by the GraphicsController in the context of the game object.
ModelComponentPart : GraphicsComponent //This is also a graphics component
Mesh //These are implementation details
Material
ModelComponentPart : GraphicsComponent
Mesh
Material
Skeleton
Animations
इसमें:
मॉडल किसी भी खेल की संपत्ति है जिसमें एक ग्राफिक्स घटक है।
ModelComponent पारंपरिक मॉडल के अनुरूप है और वास्तव में, 3D संपत्तियों के लिए है। ग्राफिक्सकम्पोनेंट कंट्रोलर (यदि आप मॉडल-व्यू-कंट्रोलर पैटर्न का उपयोग करते हैं) यह पता लगाने के लिए जिम्मेदार है कि यह किस प्रकार की ग्राफिक्स संपत्ति है और इसे सही तरीके से ड्राइंग करें (ध्यान दें कि मॉडलकंपोनेंट ग्राफिक्सकंपोनेंट का एक उपवर्ग है)।
सादगी और पीछे की संगतता के लिए खान में कुछ समझौते भी हुए थे, जैसे कि प्रत्येक GraphicsComponent भी एक Entity है, और Entity सीधे स्थिति डेटा संग्रहीत करता है इसलिए इसकी केवल एक ही स्थान पर गणना की जाती है, लेकिन विचार एक ही है: GraphicsComponent हैंडल क्या है आइटम को आकर्षित करने की आवश्यकता है - सभी की आवश्यकता है - न कि केवल क्या जो कि मॉड्यूलर से आता है।