फिक्स्ड-फंक्शन बनाम शेड्स: शुरुआत के लिए कौन सा?


16

मैं वर्तमान में कंप्यूटर विज्ञान के लिए कॉलेज जा रहा हूँ। हालांकि मैं एक छोटे गेम को बनाने के लिए किसी बिंदु पर मौजूदा इंजन का उपयोग करने की योजना बना रहा हूं, मेरा उद्देश्य अभी मूल सिद्धांतों को सीखने की ओर है: अर्थात्, 3 डी प्रोग्रामिंग। मैंने DirectX और OpenGL के बीच चुनाव के बारे में पहले से ही कुछ शोध किया है, और सामान्य भावना जो उस से बाहर आई थी, चाहे आप OpenGL या DirectX को अपने प्रशिक्षण-पहियों के मंच के रूप में चुनते हों, बहुत सारा ज्ञान दूसरे प्लेटफ़ॉर्म पर स्थानांतरित करने योग्य है । इसलिए, चूंकि ओपनजीएल अधिक प्रणालियों (शायद सीखने के लिए चुनने का एक मूर्खतापूर्ण कारण) द्वारा समर्थित है, मैंने फैसला किया कि मैं पहले ओपनिंग सीखने जा रहा हूं।

OpenGL सीखने के लिए यह निर्णय लेने के बाद, मैंने कुछ और शोध किया और एक डायकोटॉमी के बारे में पाया कि मैं इस समय किसी भी तरह से अनजान था: फिक्स्ड-फंक्शन OpenGL बनाम आधुनिक प्रोग्रामेबल shader- आधारित ओपनजीएल। सबसे पहले, मैंने सोचा कि यह एक स्पष्ट विकल्प था कि मुझे shader- आधारित ओपनजीएल सीखने का चयन करना चाहिए क्योंकि यह आज उद्योग में सबसे अधिक उपयोग किया जाता है। हालांकि, मैं तब जेसन एल। मैककसन द्वारा बहुत लोकप्रिय लर्निंग मॉडर्न 3 डी ग्राफिक्स प्रोग्रामिंग पर ठोकर खाई , यहाँ स्थित है: http://www.arcsynthesis.org/gltut/

मैं परिचयात्मक बिट्स के माध्यम से पढ़ता हूं, और "इस पुस्तक के बारे में" अनुभाग में, लेखक बताता है:

"सबसे पहले, इस दृष्टिकोण के साथ जो सीखा गया है, उसे अनिवार्य रूप से छोड़ दिया जाना चाहिए जब उपयोगकर्ता एक ग्राफिक्स समस्या का सामना करता है जिसे प्रोग्रामबिलिटी के साथ हल किया जाना चाहिए। प्रोग्रामबिलिटी लगभग सभी निश्चित फ़ंक्शन पाइपलाइन को मिटा देती है, इसलिए ज्ञान आसानी से स्थानांतरित नहीं होता है।"

अभी तक एक ही समय में यह भी तय करता है कि नियत-कार्यक्षमता, शुरुआती लोगों के लिए एक आसान और अधिक सीखने की अवस्था प्रदान करती है:

"निश्चित फ़ंक्शन पाइपलाइन का उपयोग करके आमतौर पर नियोफ़ाइट ग्राफिक्स प्रोग्रामर को पढ़ाना सबसे आसान माना जाता है।"

स्वाभाविक रूप से, आप देख सकते हैं कि मुझे किस विरोधाभास के बारे में जानने के लिए संघर्ष किया जा सकता है: क्या मैं निश्चित-कार्यक्षमता के तरीकों को सीखने में बहुत समय बिताता हूं (और बाद में अनलिस्टिंग), या क्या मैं shaders के साथ शुरुआत करना चुनता हूं? मेरी प्राथमिक चिंता यह है कि आधुनिक प्रोग्रामेबल शेडर्स को किसी तरह प्रोग्रामर को पहले से तय फंक्शन पाइपलाइन को समझने की आवश्यकता होती है, लेकिन मुझे संदेह है कि ऐसा ही हो।

टीएल; डीआर = एक महत्वाकांक्षी गेम ग्राफिक्स प्रोग्रामर के रूप में, फिक्स्ड-कार्यक्षमता या आधुनिक शेडर-आधारित प्रोग्रामिंग के माध्यम से 3 डी प्रोग्रामिंग सीखना मेरा सबसे अच्छा हित है?


इसी तरह के कुछ सवाल भी हैं ...
नहीं

"अभी तक एक ही समय में यह भी मामला बनाता है कि निश्चित-कार्यक्षमता शुरुआती लोगों के लिए एक आसान, अधिक तत्काल सीखने की अवस्था प्रदान करती है:" जिज्ञासु। वास्तव में यह कैसे बनता है? क्योंकि बोली स्पष्ट रूप से कहती है, "यह आमतौर पर सबसे आसान माना जाता है ..." (जोर दिया)। जैसा कि, यह सच माना जा सकता है, लेकिन इसका मतलब यह नहीं है कि यह सच है।
निकोल बोलस

हाँ, यह शब्द बोलने का एक अजीब तरीका था।
रोब हेयर्स

फिक्स्ड-फ़ंक्शन पाइपलाइन को ओपनजीएल और डायरेक्टएक्स दोनों में चित्रित किया गया है, इसलिए मैं इसके साथ आपका समय बर्बाद नहीं करूंगा। बेसिक शेड्स बहुत सरल होते हैं, और निश्चित रूप से एक प्रतिपादन संदर्भ काम करने के लिए पर्याप्त समझने की तुलना में अधिक जटिल नहीं है।
डी जुले

जवाबों:


30

मैं इस तर्क को नहीं खरीदता कि निश्चित-फंक्शन सामान के साथ शुरू करना आसान है। यह मामला हो सकता है कि निश्चित-फ़ंक्शन आपको कम कोड के साथ कुछ चीजें करने देता है - निश्चित-फ़ंक्शन ओपनजीएल में, उदाहरण के लिए, आप कुछ बहुत ही बुनियादी प्रकाश व्यवस्था / छायांकन कर सकते हैं glEnable(GL_LIGHTING)और कुछ अन्य कॉल कर सकते हैं। परेशानी यह है कि जैसे ही आप कुछ अलग चाहते हैं - प्रति पिक्सेल प्रकाश व्यवस्था, प्रति-शीर्ष प्रकाश व्यवस्था के बजाय, कहते हैं - आपको पूरी तरह से नियत-फंक्शन सामान को छोड़ना होगा और जो भी निश्चित कार्यक्षमता का उपयोग कर रहे थे, उसे लागू करने के लिए एक shader लिखें। पहले, प्लस जो भी आप बदलना चाहते थे।

यह सिर्फ ऐसा लगता है कि यह सरल और कम भ्रामक पूरे समय का उपयोग करने के लिए किया जाएगा। जैसा कि आपके पास एक अलग स्रोत फ़ाइल है जिसे लोड करने और संकलित करने की आवश्यकता है, कुछ अतिरिक्त सी कॉल करने के लिए शेडर्स की आवश्यकता होती है, कुछ अतिरिक्त सी कॉल पैरामीटर देखने और सेट करने के लिए, आदि। लेकिन एक बार जब आप एक shader जा रहा है, यह सबसे आसान काम है कुछ अलग प्रभावों को कोड करने के लिए, विभिन्न विचारों को आज़माएं, आदि और आपको इस बात की परवाह करने की ज़रूरत नहीं है कि फ़िक्स्ड-फंक्शन सिस्टम की सीमाएँ कहाँ हैं और क्या आप चाहते हैं या नहीं कर सकते हैं; जैसा कि आप के लिए कोड लिख सकते हैं shaders कर सकते हैं, प्रदर्शन और स्मृति की सामान्य सीमा modulo।


शांत, प्रतिक्रिया के लिए धन्यवाद। मैं सबसे अधिक संभावना है कि अभी shaders के लिए सही जा रहा हूँ।
Rob Hays

3
+1 - यह "लर्निंग सी ++" बनाम "लर्निंग बेसिक" की तरह भी है। C ++ सीखने में आपको अधिक समय लगेगा, लेकिन आपने लंबे समय में अधिक सीखा होगा।
जोनाथन डिकिंसन

3
मैं opengl-tutorial.org की सिफारिश करना चाहता हूं । साइट मूल बातें बहुत अच्छी तरह से समझाती है और केवल शेड का उपयोग करती है।
१६:१२

3

मैं GLUT पर निश्चित फ़ंक्शन के साथ शुरू करने के लिए कहूंगा। मैं इस बारे में ज्यादा कुछ कहने वाला नहीं हूं, लेकिन शेड्स के पीछे विचार बहुत जटिल हैं और अपेक्षित ज्ञान बुनियादी 3 डी प्रोग्रामिंग (यानी वर्टेक्स क्रिएशन और ट्रांसफॉर्मेशन मैट्रीस आदि) है। और भी बहुत सी जगहें हैं, जो आप shaders का उपयोग करके स्क्रू कर सकते हैं, कोड के लिए बहुत कुछ है।

मेरी ट्यूटोरियल देखें , और इन lighthouse3d वाले


2

मैं दूसरा सीधे shaders के लिए जा रहा हूँ। यह वास्तव में नहीं है कि बहुत कठिन स्थापित करने के लिए, और जब आप कि पहली बाधा पारित आप अपनी उंगलियों पर पूरा अधिकार है।

इस बिंदु पर, आपको पता चलेगा कि कॉलेज में पुस्तकों और ग्राफिक्स व्याख्यानों में आपके द्वारा देखे जाने वाले गणितीय समीकरणों से शेयर्ड प्रोग्रामिंग अधिक बारीकी से मेल खाती है।


0

मैं आपके कार्यक्रम की रीढ़ के रूप में निर्धारित फ़ंक्शन पाइपलाइन का उपयोग करने का सुझाव दूंगा। मुझे लगता है कि विशुद्ध रूप से shaders के बजाय इसका उपयोग करके कुछ दिखाना आसान होना चाहिए। फिर, जब आप जानते हैं कि आपने अपने कोने या मानदंडों को गड़बड़ नहीं किया है, तो आप धीरे-धीरे लेकिन निश्चित रूप से छायांकन की दुनिया में अपना रास्ता खोल सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.