सीखना ग्राफिक्स प्रोग्रामिंग केवल सीखने वाले एपीआई से अधिक के बारे में है। यह सीखने के बारे में है कि ग्राफिक्स कैसे काम करता है। वर्टेक्स ट्रांसफॉर्मेशन, लाइटिंग मॉडल, शैडो तकनीक, टेक्सचर मैपिंग, डिफर्ड रेंडरिंग, और इसके आगे। आपके पास उन्हें लागू करने के लिए उपयोग की जाने वाली API से कोई लेना-देना नहीं है।
तो सवाल यह है: क्या आप सीखना चाहते हैं कि एपीआई का उपयोग कैसे करें? या क्या आप ग्राफिक्स सीखना चाहते हैं ?
हार्डवेयर-त्वरित ग्राफिक्स के साथ सामान करने के लिए, आपको उस हार्डवेयर का उपयोग करने के लिए एक एपीआई का उपयोग करना सीखना होगा। लेकिन एक बार जब आप सिस्टम के साथ इंटरफेस करने की क्षमता रखते हैं, तो आपका ग्राफिक्स सीखना इस बात पर ध्यान केंद्रित करना बंद कर देता है कि एपीआई आपके लिए क्या करता है और इसके बजाय ग्राफिक्स अवधारणाओं पर ध्यान केंद्रित करता है। प्रकाश, छाया, बम्प-मैपिंग, आदि।
यदि आपका लक्ष्य ग्राफिक्स अवधारणाओं को सीखना है, तो जिस समय आप एपीआई के साथ बिता रहे हैं, वह समय आप ग्राफिक्स अवधारणाओं को सीखने में खर्च नहीं कर रहे हैं । शेडर्स को कैसे संकलित करना है, इसका ग्राफिक्स से कोई लेना-देना नहीं है। न ही उन्हें वर्दी कैसे भेजें, कैसे बफ़र में वर्टेक्स डेटा अपलोड करें, आदि ये उपकरण हैं, और ग्राफिक्स काम करने के लिए महत्वपूर्ण उपकरण हैं।
लेकिन वे वास्तव में ग्राफिक्स अवधारणाएं नहीं हैं। वे एक अंत के लिए एक साधन हैं।
यह बहुत काम लेता है और वुलकन के साथ सीखने से पहले आप उस बिंदु तक पहुंच सकते हैं जहां आप ग्राफिक्स अवधारणाओं को सीखना शुरू करने के लिए तैयार हैं। शेड्स में डेटा पास करने के लिए स्पष्ट मेमोरी प्रबंधन और एक्सेस के स्पष्ट सिंक्रनाइज़ेशन की आवश्यकता होती है। इत्यादि।
इसके विपरीत, OpenGL के साथ उस बिंदु पर जाने के लिए कम काम की आवश्यकता होती है। और हाँ, मैं आधुनिक, shader- आधारित कोर-प्रोफाइल OpenGL की बात कर रहा हूँ।
बस तुलना करें कि स्क्रीन को साफ़ करने में जितना सरल है उतना कुछ करना है। वल्कन में, इसके लिए बड़ी संख्या में अवधारणाओं की कम से कम कुछ समझ की आवश्यकता होती है: कमांड बफ़र, डिवाइस कतार, मेमोरी ऑब्जेक्ट, चित्र और विभिन्न डब्ल्यूएसआई निर्माण।
ओपन में ... यह तीन कार्यों है: glClearColor
, glClear
, और प्लेटफ़ॉर्म-विशिष्ट स्वैप कॉल बफ़र्स। यदि आप अधिक आधुनिक OpenGL का उपयोग कर रहे हैं, तो आप इसे दो तक ले जा सकते हैं: glClearBufferuiv
और बफ़र्स स्वैप करें। आपको यह जानने की ज़रूरत नहीं है कि फ्रेमबफ़र क्या है या इसकी छवि कहाँ से आती है। आप इसे साफ़ करें और बफ़र्स स्वैप करें।
क्योंकि ओपनजीएल आपसे बहुत कुछ छुपाता है, यह उस बिंदु तक पहुंचने के लिए बहुत कम प्रयास करता है जहां आप वास्तव में ग्राफिक्स को सीख रहे हैं क्योंकि ग्राफिक्स हार्डवेयर को इंटरफ़ेस सीखने के विपरीत है।
इसके अलावा, OpenGL एक (अपेक्षाकृत) सुरक्षित एपीआई है। यह गलतियाँ जारी करेगा जब आप कुछ गलत करते हैं, आमतौर पर। वल्कन नहीं है। जब डिबगिंग परतें होती हैं जो आप मदद करने के लिए उपयोग कर सकते हैं, तो कोर वालकैन एपीआई आपको लगभग कुछ भी नहीं बताएगा जब तक कि कोई हार्डवेयर दोष न हो। यदि आप कुछ गलत करते हैं, तो आप कचरा रेंडर कर सकते हैं या जीपीयू को क्रैश कर सकते हैं।
वल्कन की जटिलता के साथ युग्मित, गलती से गलत काम करना बहुत आसान हो जाता है। सही लेआउट में बनावट सेट करने के लिए भूलना एक कार्यान्वयन के तहत काम कर सकता है, लेकिन दूसरे पर नहीं। एक sychronization बिंदु को भूलना कभी-कभी काम कर सकता है, लेकिन फिर अचानक बिना किसी कारण के असफल हो जाता है। इत्यादि।
कहा जा रहा है कि सभी, ग्राफ़िकल तकनीकों को सीखने की तुलना में ग्राफिक्स सीखने के लिए अधिक है। विशेष रूप से एक क्षेत्र है जहां वल्कन जीतता है।
चित्रमय प्रदर्शन ।
3 डी ग्राफिक्स प्रोग्रामर होने के नाते आमतौर पर आपके कोड का अनुकूलन करने के लिए कुछ विचार की आवश्यकता होती है। और यह वह जगह है जहां OpenGL की जानकारी छिपाना और अपनी पीठ के पीछे चीजें करना एक समस्या बन जाती है।
OpenGL मेमोरी मॉडल सिंक्रोनस है। कार्यान्वयन को आदेशों को अतुल्यकालिक रूप से जारी करने की अनुमति दी जाती है जब तक कि उपयोगकर्ता अंतर नहीं बता सकता। इसलिए यदि आप कुछ छवि को प्रस्तुत करते हैं, तो इससे पढ़ने की कोशिश करें, कार्यान्वयन को इन दो कार्यों के बीच एक स्पष्ट सिंक्रनाइज़ेशन घटना जारी करनी चाहिए।
लेकिन ओपनजीएल में प्रदर्शन प्राप्त करने के लिए, आपको यह जानना होगा कि कार्यान्वयन ऐसा करते हैं, ताकि आप इससे बच सकें । आपको महसूस करना होगा कि कार्यान्वयन गुप्त रूप से सिंक्रोनाइज़ेशन ईवेंट्स जारी कर रहा है, और फिर जितना संभव हो सके उनसे बचने के लिए अपने कोड को फिर से लिखें। लेकिन एपीआई खुद यह स्पष्ट नहीं करता है; आपको यह ज्ञान कहीं से प्राप्त करना होगा।
वल्कन के साथ ... आप एक हैं जिन्हें उन तुल्यकालन घटनाओं को जारी करना है। इसलिए, आपको इस तथ्य के बारे में पता होना चाहिए कि हार्डवेयर कमांड को सिंक्रोनाइज़ नहीं करता है। आपको पता होना चाहिए कि आपको उन घटनाओं को कब जारी करने की आवश्यकता है, और इसलिए आपको पता होना चाहिए कि वे शायद आपके कार्यक्रम को धीमा कर देंगे। इसलिए आप उनसे बचने के लिए वह सब कुछ कर सकते हैं जो आप कर सकते हैं।
वल्कन जैसी स्पष्ट एपीआई आपको इस प्रकार के प्रदर्शन निर्णय लेने के लिए मजबूर करती है। और इसलिए, यदि आप वुलकन एपीआई सीखते हैं, तो आपको पहले से ही इस बारे में अच्छी जानकारी है कि कौन सी चीजें धीमी होने जा रही हैं और कौन सी चीजें तेज होने वाली हैं।
यदि आपको कुछ फ्रेमबफ़र काम करना है जो आपको एक नया रेंडरपास बनाने के लिए मजबूर करता है ... ऑड्स अच्छे हैं कि यह धीमी गति से होगा यदि आप इसे रेंडरपास के अलग सबपास में फिट कर सकते हैं। इसका मतलब यह नहीं है कि आप ऐसा नहीं कर सकते हैं, लेकिन एपीआई आपको सामने बताता है कि यह एक प्रदर्शन समस्या पैदा कर सकता है।
ओपनजीएल में, एपीआई मूल रूप से आपको अपने फ्रेमबफ़र संलग्नक को विली-निली को बदलने के लिए आमंत्रित करता है। ऐसा कोई मार्गदर्शन नहीं है जिस पर बदलाव तेज़ या धीमे होंगे।
तो उस स्थिति में, वल्कन सीखने से आपको ग्राफिक्स को तेज बनाने के तरीके के बारे में बेहतर सीखने में मदद मिल सकती है। और यह निश्चित रूप से आपको सीपीयू ओवरहेड को कम करने में मदद करेगा।
इससे पहले कि आप उस बिंदु तक पहुँच सकते हैं, जहाँ आप ग्राफ़िकल रेंडरिंग तकनीक सीख सकते हैं।