मैंने ओपनजीएल और सी ++ के साथ विभिन्न डेमो परियोजनाओं पर काम किया है, लेकिन वे सभी कुछ दिलचस्प प्रभावों के साथ बस एक घन (या समान सरल जाल) प्रस्तुत करने में शामिल हैं। इस तरह के एक साधारण दृश्य के लिए, घन के लिए कशेरुक डेटा एक सुरुचिपूर्ण वैश्विक सरणी में संग्रहीत किया जा सकता है। अब मैं विभिन्न प्रकार के कई वस्तुओं के साथ, अधिक जटिल दृश्यों को प्रस्तुत करने में देख रहा हूं।ओपनजीएल और ओओपी प्रोग्राम संरचना
मैं इसे समझ में आता है वस्तुओं (Rock
, Tree
, Character
, आदि) के विभिन्न प्रकार के विभिन्न वर्गों के लिए लगता है, लेकिन मैं कैसे सफाई से डेटा को तोड़ने के लिए सोच रहा हूँ और दृश्य में वस्तुओं के लिए कार्यक्षमता प्रतिपादन। प्रत्येक वर्ग वर्टेक्स पदों, बनावट निर्देशांक, मानक, इत्यादि की अपनी सरणी संग्रहित करेगी। हालांकि मुझे यकीन नहीं है कि ओपनजीएल कॉल कहां रखा जाए। मैं सोच रहा हूं कि मेरे पास एक लूप होगा (World
या Scene
कक्षा में) जो दृश्य में सभी वस्तुओं पर पुनरावृत्त करता है और उन्हें प्रस्तुत करता है।
उन्हें प्रस्तुत करना चाहिए प्रत्येक ऑब्जेक्ट (Rock::render(), Tree::render(),...)
में एक रेंडर विधि को कॉल करना या एक रेंडर विधि जो पैरामीटर (render(Rock), render(Tree),...)
पैरामीटर के रूप में लेती है? उत्तरार्द्ध क्लीनर लगता है, क्योंकि मेरे पास प्रत्येक वर्ग में डुप्लिकेट कोड नहीं होगा (हालांकि इसे RenderableObject
वर्ग से विरासत में कम करके कम किया जा सकता है), और अगर मैं बाद में बंदरगाह करना चाहता हूं तो यह रेंडर() विधि को आसानी से बदला जा सकता है DirectX। दूसरी तरफ, मुझे यकीन नहीं है कि मैं उन्हें अलग रख सकता हूं, क्योंकि मुझे ऑब्जेक्ट्स में संग्रहीत ओपनजीएल विशिष्ट प्रकारों की आवश्यकता हो सकती है (उदाहरण के लिए वर्टेक्स बफर)। इसके अलावा, यह ऑब्जेक्ट से रेंडर कार्यक्षमता को अलग करने के लिए थोड़ा बोझिल लगता है, क्योंकि इसे ऑब्जेक्ट्स से डेटा प्राप्त करने के लिए Get()
विधियों को कॉल करना होगा। अंत में, मुझे यकीन नहीं है कि यह प्रणाली उन वस्तुओं को कैसे संभालेगी जिन्हें विभिन्न तरीकों से खींचा जाना है (विभिन्न शेडर्स, शेडर्स में पास करने के लिए अलग-अलग चर)।
क्या इनमें से एक डिजाइन दूसरे की तुलना में स्पष्ट रूप से बेहतर है? मेरे कोड को व्यवस्थित और कुशल रखने के लिए मैं उन तरीकों से किस प्रकार सुधार कर सकता हूं?
धन्यवाद, यह मुझे काम करने के लिए कुछ विचार देता है। एक बात जो मुझे समझ में नहीं आती है वह आपके द्वारा वर्णित रेंडर करने योग्य वर्ग और जाल वर्ग के बीच भेद है। क्या मैं नहीं चाहता कि जाल वर्ग एक प्रस्तुत करने योग्य हो जो खुद को आकर्षित कर सके? एक उच्च स्तर पर, मुझे लगता है कि डिजाइन की तुलना में यह डिजाइन अधिक जटिल होने जा रहा है। क्या आप किसी भी ऑनलाइन संसाधनों के बारे में जानते हैं जो एक प्रतिपादन प्रणाली को डिजाइन करने के लिए एक अच्छा परिचय प्रदान करते हैं? अधिकांश ओपनजीएल ट्यूटोरियल जिन्हें मैंने पाया है, चित्रकला, टेक्सचरिंग और कुछ त्रिकोणों को प्रकाश देने की प्रक्रिया को बिना किसी बड़े चित्र वास्तुकला की चर्चा के परिचय देते हैं। – Jeff
@ जेफ: नहीं। जाल सिर्फ कशेरुक डेटा का संग्रह है। एक जाल * अकेला * पर्याप्त नहीं है। कुछ प्रस्तुत करने के लिए, आपको एक जाल, शेडर जिसे आप इसके साथ प्रस्तुत करना चाहते हैं, और अन्य मिश्रित राज्य (बनावट, आदि) की आवश्यकता है। –
@ जेफ क्या निकोल ने कहा सही है। जो कुछ भी आप आकर्षित करते हैं वह एक जाल नहीं होगा (उदाहरण के लिए आप लाइनों या कुछ अन्य आदिम जैसे कि जाल की तरह जा सकते हैं जहां जाल अधिक हो सकता है)। एक जाल वर्ग को ज्यामिति (और कभी-कभी भौतिक सूचकांक प्रति त्रि, और समूह/पदानुक्रम) का वर्णन करना चाहिए, लेकिन बहुत कुछ नहीं। गेम इंजन विकास के बारे में बात करने वाली किताबों में देखें (भले ही आप कोई गेम नहीं बना रहे हों)। एक अच्छा "गेम इंजन आर्किटेक्चर" है, "गेम प्रोग्रामिंग जेम्स" और "गेम इंजन जेम्स" भी बहुत अच्छी जानकारी है। आप gamedev.net मंचों को भी छिपाना चाहते हैं –