2012-06-06 19 views
8

मैं ओपनजीएल सीखने की कोशिश कर रहा हूं। मुझे सी और सी ++ के साथ अनुभव मिला है, एक बिल्ड वातावरण स्थापित करना है, और वह जैज़, लेकिन मैं एक अच्छा प्रारंभिक बिंदु जानने की कोशिश कर रहा हूं।ओपनजीएल कोर और संगतता

मुझे ओपनजीएल < = 2.1 में प्रमुख फिक्स्ड फ़ंक्शन पाइपलाइन से अवगत है, और यह शुरू करने के लिए अपेक्षाकृत आसान लगता है। हालांकि, OpenGL ओपनजीएल> = 3.1 में धक्का देता है जो कोर प्रोफाइल मुझे बहिष्करण के कारण एफएफपी से दूर रहना चाहता है। लेकिन मैं उलझन में हूं कि यह 3.1 और उससे ऊपर के सभी कार्यों में कैसे काम करता है। 2.1 और नीचे में आप अपनी glBegin (GL_WHATEVER) और glEnd() हैं जब आप आकृतियों को चित्रित कर रहे हों। कोर प्रोफाइल एपीआई के माध्यम से देखे जाने पर पहली बात यह है कि ये दो फ़ंक्शन कॉल चली गई हैं। मुझे एहसास है कि शायद एक साधारण प्रतिस्थापन है, लेकिन इस तरह के एक बुनियादी कार्य से कुछ ऐसा (प्रतीत होता है) देखने के लिए काफी चौंकाने वाला है। यह लगभग सी मानक पुस्तकालय से printf() को हटाने की तरह लगता है। और जब मैं नवीनतम रेड बुक के माध्यम से काम करता हूं, तब भी वे पुराने बहिष्कृत कोड का उपयोग करते हैं जो मेरी सोच को आगे बढ़ाता है।

इसी तरह के प्रश्नों के विभिन्न उत्तरों के माध्यम से पढ़ते समय मैं सामान्य "शेडर आधारित" या "यह सब शेडर्स के साथ किया जाता है" आदि देखता हूं। यदि मैं एक काले रंग की पृष्ठभूमि पर एक साधारण सफेद वर्ग बनाना चाहता हूं (पहला उदाहरण नवीनतम रेड बुक), मुझे समझ में नहीं आता कि एक शेडर बिल्कुल एक बॉक्स बनाने के लिए कैसे प्रासंगिक है। उन्हें नहीं करना चाहिए ... अच्छा .. छायांकन? मैंने ऑरेंज बुक और ब्लू बुक खरीदने में देखा है, लेकिन मैं अब कुछ ऐसी चीज़ों पर पैसा नहीं बिताना चाहता हूं जो इसे लाइब्रेरी (ब्लू बुक) के पीछे छिपाने जा रहा है या कुछ ऐसा जो शेडर प्रोग्रामिंग के बारे में बात करने जा रहा है एक 3 डी पर्यावरण (ऑरेंज बुक) में कुछ प्रकाश कार्य करने के लिए।

तो मैं कहां से शुरू करूं? कोर प्रोफाइल के अलावा कुछ भी नहीं, मैं एक बॉक्स (या एक घन या पिरामिड या जो भी) खींच सकता हूं। मैं यहां एक कोड स्निपेट नहीं मांग रहा हूं, मैं एक विस्तृत ट्यूटोरियल या एक किताब या कुछ ढूंढ रहा हूं जो कोई मुझे इंगित कर सके। अगर इसका उत्तर पहले दिया गया है और मुझे यह नहीं मिला, तो कृपया मुझे रीडायरेक्ट करें।

+4

मैं आपको आधुनिक ओपनजीएल पर एक अच्छी "किताब" लेने के लिए सलाह दूंगा। मेरी पहली सिफारिश http://www.arcsynthesis.org/gltut/ होगी जो ऑनलाइन और नि: शुल्क है। आपको इस तरह से प्रारंभ करवाया जाना चाहिए। – Bart

+1

आप 2.0 में भी प्रोग्राम करने योग्य पाइपलाइन का उपयोग कर सकते हैं। फिक्स्ड-फ़ंक्शन संस्करण के बावजूद क्रोधित और अक्षम है। –

+0

@CatPlusPlus यह पहली बार है जब मैंने किसी के बारे में सुना है कि निश्चित फ़ंक्शन पाइपलाइन को अक्षम के रूप में संदर्भित किया गया है। :) आप उस शब्द पर पुनर्विचार करना चाहेंगे।क्रैपी - मैं इसके साथ सहमत हूं। – Ani

उत्तर

11

मूल प्रोफ़ाइल में अचानक "जटिलता" का कारण यह तथ्य है कि निश्चित कार्यक्षमता पाइपलाइन वास्तव में आपके लिए GPU के प्रतिनिधि का प्रतिनिधित्व नहीं करती है। अधिकांश कार्यक्षमता सीपीयू पर की गई थी, और केवल वास्तविक ड्राइंग GPU पर हुई थी। निश्चित पाइपलाइन के साथ दूसरी समस्या यह है कि यह एक हारने वाली लड़ाई है। निश्चित पाइपलाइन में बहुत सारे knobs और स्विच sooooooo है! इसलिए, न केवल दर्दनाक रूप से जटिल है, यह दृश्यों को आकर्षित करने के नए तरीकों की अंतहीन मांग को कभी भी बनाए रखेगा। जीएलएसएल दर्ज करें, और आपके पास GPU को यह बताने की क्षमता है कि आप अपना दृश्य कैसे आकर्षित करना चाहते हैं। यह डेवलपर को शक्ति को बदल देता है और सभी को नए स्विच/knobs के लिए ओपनजीएल अपडेट की प्रतीक्षा करने से मुक्त करता है।

अब, ग्लोबिन और ग्लिंड के अचानक नुकसान के साथ आपकी निराशा के संबंध में ... सरल ढांचे हैं जो नए कोर प्रोफाइल पर उनके व्यवहार की नकल करते हैं, और यह एक अच्छी बात है। दोबारा, यह डेवलपर्स को पावरलाइन तक पहुंचने के लिए चुनने के लिए शक्ति को बदल देता है। हालांकि, एफएफपी पर 3 डी का अभ्यास करने में कुछ भी गलत नहीं है। वैसे भी आपको 3 डी गणित और अवधारणाओं को सीखना होगा। उन अवधारणाएं एपीआई के बावजूद लागू होती हैं। (मैट्रिक्स गणित ओपनजीएल और डायरेक्ट 3 डी दोनों में आपके जीवन को बचाएगा।) तो, पहले आप सरल त्रिकोण और रंगों के साथ अभ्यास करते हैं। फिर आप बनावट (बनावट निर्देशांक के साथ) पर ले जाते हैं। फिर आप मानक जोड़ते हैं (प्रकाश के साथ)। फिर, उन सभी अवधारणाओं को समझने के बाद, आप glbegin/glEnd का उपयोग करना बंद कर देते हैं, और आप बफर में बड़ी मात्रा में कशेरुक डेटा बैच करना शुरू करते हैं। यदि आप glbegin/glEnd को समझ में नहीं आता है तो आप gldrawElements को अच्छी तरह समझ नहीं पाएंगे। तो, उन उपकरणों पर सीखना ठीक है।

+0

मैं सहमत हूं, मुझे लगता है कि जाने का तरीका लाल पुस्तक के पहले संस्करण के माध्यम से पढ़ा जाता है (1 99 3 मुझे लगता है) फिर नवीनतम नारंगी किताब में कूदें या जो भी 2015 की गर्मता है ... उस समय से मूल बातें सीखने के लिए अच्छा है जब ओपनएल केवल 120 कार्य था। –

+0

इसके लिए धन्यवाद; यह मैंने कभी देखा है सबसे अच्छे उत्तरों में से एक है। लंबे समय तक मैं ईमानदारी से सोच रहा हूं कि पूरे ओपनजीएल समुदाय ने अपना मन कैसे खो दिया है: हर कोई दिमाग से मंत्र को दोहराता है "निश्चित पाइपलाइन खराब थी, आपको इसका उपयोग नहीं करना चाहिए" जबकि अविश्वसनीय रूप से एक और अधिक जटिल विकल्प की वकालत करते हुए खड़ी सीखने की वक्र और उपयोगकर्ताओं के विशाल बहुमत के लिए बिल्कुल कोई स्पष्ट लाभ नहीं है। यह पहली बात है जिसे मैंने कभी पढ़ा है जो निश्चित पाइपलाइन के बारे में वास्तव में समस्याग्रस्त हो सकता है, इसकी एक झलक देता है, और आप स्पष्ट और स्पष्ट समग्र तस्वीर देते हैं। –

+0

आपका स्वागत है। मैं खुशी से मदद कर सकता है। – TheBuzzSaw

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