क्या इससे कोई फर्क पड़ता है कि मैं OpenGL या Direct3D सीखता हूं?


11

क्या इन दो एपीआई मामूली कार्यान्वयन विवरणों के बीच अंतर है, जिसका मतलब है कि एक बार मैंने सीखा है कि मैं इसे हर चीज के लिए उपयोग कर सकता हूं? या फिर एक के बजाय एक सीखने के कारण हैं यदि मैं भविष्य में एक और एपीआई को पुनः उपयोग किए बिना सामान्य रूप से इसका उपयोग करने में सक्षम होना चाहता हूं? क्या एक या अन्य सामान्य है?

विशेष रूप से मैं किसी भी ग्राफिक्स कार्ड के लिए लिखने में सक्षम होना चाहूंगा, इसलिए कोड केवल किसी विशेष मनुफ़ैक्टर के कार्ड या किसी विशिष्ट मॉडल पर चलने तक ही सीमित नहीं है। मैं कोड लिखना चाहूंगा जो अभी भी ग्राफिक्स कार्ड (यद्यपि धीमी) की अनुपस्थिति में काम करता है।

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


2
शाफ़्ट फ्रीक का जवाब एक अच्छा है। यदि आप Direct3D सीखना चाहते हैं तो आप मेरी मुफ्त पुस्तक "द डायरेक्ट 3 डी ग्राफिक्स पाइपलाइन" पढ़ सकते हैं । एपीआई विवरण ज्यादातर Direct3D9 हैं, लेकिन अवधारणाएं समान हैं। बात यह है, 3 डी ग्राफिक्स प्रोग्रामिंग के लिए अवधारणाएं वास्तव में 1960 के दशक के बाद से बिल्कुल भी नहीं बदली हैं। उन अवधारणाओं को व्यक्त करने के लिए एपीआई बहुत अधिक होशियार हो गए हैं।
वैध

जवाबों:


9

मुझे नहीं लगता कि यह बहुत मायने रखता है कि आप "प्रोग्राम ग्राफिक्स" के लिए किस एपीआई का उपयोग करना चाहते हैं। 3 डी दृश्यों के साथ काम करने के दौरान सीखने की अधिक महत्वपूर्ण चीजें आपके द्वारा उपयोग की जाने वाली विशिष्ट अवधारणाएं हैं। उदाहरण के लिए आप सीखना चाहते हैं कि एक सरल (और बाद में अधिक परिष्कृत) दृश्य ग्राफ कैसे लिखना है। ये अवधारणाएँ आपके द्वारा कॉल किए जाने वाले विशिष्ट API विधि नामों से बहुत अधिक महत्वपूर्ण हैं।

प्रोग्राम लिखने का तरीका सीखने के दौरान इसकी तुलना करें। यदि आप उदाहरण के लिए जावा में प्रोग्राम लिखने में काफी अच्छे हैं, तो आपको C ++, ऑब्जेक्टिव-सी, स्विफ्ट, या कुछ अन्य ऑब्जेक्ट-ओरिएंटेड भाषा सीखने में बहुत परेशानी नहीं होगी। क्योंकि यह अवधारणाएं और सोच है जो आप सीखते हैं।

ओपनजीएल, डायरेक्ट 3 डी और मेटल के बीच का विकल्प मुख्य रूप से पसंद है, जो आप ऑपरेटिंग सिस्टम को लक्षित करते हैं। Direct3D मुख्य रूप से विंडोज, मेटल ऑन OS X और iOS पर उपलब्ध है, और OpenGL OS X, iOS, विंडोज और लिनक्स सहित अधिकांश प्रणालियों पर समर्थित है।

ग्राफिक्स कार्ड का शायद इस निर्णय पर कोई प्रभाव नहीं पड़ता क्योंकि मुझे एक कार्ड की जानकारी नहीं है जो केवल एक या दो का समर्थन करता है। यदि आपके पास कोई समर्पित ग्राफिक्स कार्ड नहीं है, तो वास्तविक समय में प्रतिपादन जल्द ही एक समस्या होगी। हालांकि एक इंटेल एचडी ग्राफिक्स और एएमडी साथी पहले से ही काफी कुछ कर सकते हैं।

तो, अपने मंच का चयन करें।


अस्वीकरण: अब तक, मैंने न तो Direct3D और न ही धातु का उपयोग किया था।


2
> "यदि आप उदाहरण के लिए जावा में प्रोग्राम लिखने में काफी अच्छे हैं, तो आपको C ++ सीखने में इतनी परेशानी नहीं होगी" - यह सच नहीं है। C ++ सीखने और उपयोग करने में हर किसी को भारी मात्रा में परेशानी होगी । इसे जावा या किसी अन्य सुरक्षित भाषा से तुलना करना पूरी तरह से अनुचित है। आपके द्वारा सूचीबद्ध अन्य भाषाओं के लिए (ऑब्जेक्टिव-सी, स्विफ्ट, या कुछ अन्य ऑब्जेक्ट-ओरिएंटेड लैंग्वेज) जो कि कथन अधिकांशतः सत्य है, हालांकि।
प्रदर्शित नाम

9

वर्तमान में हम एपीआई प्रतिमानों के संक्रमण में हैं।

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

यही कारण है कि नई एपिस आई हैं (या जल्द ही आ रही हैं) डी 3 डी 12, वल्कन और मेटल सबसे प्रमुख हैं। ये API प्रोग्राम को अधिक नियंत्रण देते हैं और यह पहले ही घोषित कर देते हैं कि यह कमांड बफ़र का उपयोग क्या करना चाहता है। वे आपको अपने स्वयं के संसाधनों (शीर्ष डेटा, बनावट, ...) का अधिक सीधे प्रबंधन करने देते हैं। एकाधिक के साथ उनका उपयोग करना बहुत अधिक सीधे आगे है।

पुराने और नए के बीच का चुनाव इस बात पर आधारित है कि आप कितनी अच्छी तरह वीडियो कमांड को आवंटित कर सकते हैं और कमांड बफर का निर्माण कर सकते हैं।

  • यदि आप कुछ ऐसा चाहते हैं जो पुराने हार्डवेयर पर भी "बस काम करता है" तो पुराने स्कूल एपीआई बेहतर हैं; वे बेहतर रूप से भी जाने जाते हैं और आपको ऑनलाइन उन पर अधिक मदद मिलेगी।

  • दूसरी ओर यदि आप प्रेषण आदेशों की अतुल्यकालिक प्रकृति को संभाल सकते हैं और आपके द्वारा आवंटित सभी बफ़र्स को ट्रैक करने में कोई आपत्ति नहीं है। फिर नए एपीआई आपके लिए कुछ हो सकते हैं।


6
नए स्पष्ट ग्राफिक्स एपीआई वास्तव में औसत ग्राफिक्स प्रोग्रामर द्वारा खपत के लिए डिज़ाइन नहीं किए गए हैं, वे इंजन में बुनियादी ढांचे के काम करने वाले लोगों के लिए, या उन लोगों के लिए अधिक हैं, जिन्हें वास्तव में प्रदर्शन की आवश्यकता है। वे आपको एक बहुत बड़ी बंदूक देते हैं और इसे आपके पैर में ठीक से इंगित करते हैं।
porglezomp 16

3

मुझे व्यक्तिगत रूप से नहीं लगता कि यह ज्यादा मायने रखता है। बस एक चुनें जो आपके प्रोजेक्ट के अनुकूल हो। मैंने अतीत में D3D और OpenGL दोनों का उपयोग किया है। यह अवधारणाएं हैं जो मायने रखती हैं। जिसे भी आप पकड़ते हैं, आपको समझने की जरूरत है (उदाहरण के लिए):

  • जीपीयू क्या हैं और उनका उपयोग कैसे किया जाता है।
  • ग्राफिक्स विकास की मूल अवधारणाएं (कार्यक्षेत्र, प्रधानता, टुकड़े, आदि)
  • कैमरा सिस्टम कैसे काम करता है (उदाहरण के लिए OpenGL में MVP मैट्रिसेस)।
  • क्या shaders हैं और उन्हें कैसे ठीक से उपयोग करें।
  • आपकी मशीन पर सीपीयू बनाम जीपीयू कितना अलग काम करता है।
  • GPU के मेमोरी मॉडल और CPU के मेमोरी मॉडल में क्या अंतर हैं।
  • सीपीयू पर क्या किया जाना चाहिए और प्रसंस्करण के लिए GPU पर क्या उतारना चाहिए।

जैसा कि अन्य लोगों ने यहां बताया है, हम APIs (Vulkan, Metal, इत्यादि) के एक नए सेट के संक्रमण के बीच में हैं, इसलिए इस बिंदु पर यदि आप ग्राफिक्स डेवलपमेंट के लिए पूरी तरह से नए हैं, तो शायद GLSL पर ध्यान केंद्रित करना एक अच्छा विचार है क्योंकि वुलकन के रूप में अच्छी तरह से इसका फायदा उठाने जा रहा है।

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

दिन के अंत में, सभी एपीआई आपकी मशीन पर एक ही हार्डवेयर का उपयोग करते हैं, यह केवल "कैसे" की बात है, वे इसे एक्सेस करते हैं।


Direct3D भी वह है जो आप उपयोग करेंगे यदि आप किसी भी Xbox कंसोल के लिए प्रोग्रामिंग कर रहे हैं।
वैध करें

"कुछ भी संभव नहीं" से आपका क्या मतलब है? शराब समस्याओं के बिना सैकड़ों डी 3 डी-आधारित कार्यक्रम चलाता है, और वर्षों से ऐसा किया है। बेशक वहाँ कीड़े और unimplemented भागों हैं, लेकिन यह पूरे एपीआई को बेकार नहीं बनाता है।
रुस्लान

0

मैं ग्राफिक्स कार्ड के बिना प्रतिपादन के बारे में कुछ शब्द कहूँगा।

नीथर ओपन और न ही डायरेक्टएक्स को वास्तव में ग्राफिक्स कार्ड की आवश्यकता है। एक कार्यान्वयन पूरी तरह से त्वरित सॉफ्टवेयर हो सकता है।

लिनक्स में ओपनजीएल के लिए मेसा सॉफ्टवेयर रैस्टराइज़र है। मेरे अनुभव में यह तब तक ठीक काम करता है जब तक कि आप इसे अजीब विशेषताओं के संयोजन के लिए बहुत मुश्किल न रखें (प्रदर्शन सूची + अनुक्रमित शीर्ष सरणियाँ)। मुझे लगता है कि वास्तविक कीड़े की उनकी सूची मील ऊंची है। निरंतर परीक्षण करना सुनिश्चित करें!

मुझे विंडोज में ओपनजीएल का उपयोग करने का कम अनुभव है। यदि आपको कुछ पता है तो उत्तर संपादित करें!

डायरेक्टएक्स एसडीके को एक सॉफ्टवेयर रैस्टराइज़र के साथ वितरित किया जाता है जिसे "संदर्भ रैस्टराइज़र" कहा जाता है। यह ज्यादातर मेरी राय में डीबगिंग के लिए है, लेकिन मुझे कम से कम एक दोस्त का पता है संदर्भ डीफ़ास्टाइज़र का उपयोग करते हुए जब डीएक्स 11 केवल डीएक्स 10 पर डीएक्स 11 विकसित कर रहा है। जैसा कि अन्य उत्तरों में बताया गया है कि डायरेक्टएक्स केवल माइक्रोसॉफ्ट है।


एक एकीकृत ग्राफिक्स कार्ड का उपयोग करते हुए मेरे अनुभव में विंडोज पर अधिकांश ओपनजीएल विकास के लिए पर्याप्त होना चाहिए, बस यह सुनिश्चित करें कि यह हाल ही के ओपन संस्करण का समर्थन करता है।
अकलतरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.