2011-04-11 19 views
10

मुझे कुछ विशिष्ट और कुछ सामान्य सलाह चाहिए। मैं एक काफी कुशल जावा प्रोग्रामर और एक बहुत ही अनुभवी वेब प्रोग्रामर हूं, लेकिन मैं सॉफ्टवेयर विकास में शामिल होना चाहता हूं और मैं सी ++ से निपट रहा हूं। मुझे लगता है मैं क्या करना चाहते हैं एक खेल के लिए एक बहुत अच्छा विचार है, और मुझे लगता है यह एक विशाल उपक्रम होगा - लेकिन मैं सी ++, रैपिंग जानने का अवसर के लिए और अधिक इसे देख रहा हूँ, वास्तव में जो कुछ भी मैं में में चलाने देव प्रक्रिया ...ओपनजीएल और सी ++ से शुरू, उचित पथ?

लेकिन मुझे अपने पैरों को अवधारणात्मक रूप से नहीं मिल सकता है! मैं सी ++ पहलू ठीक संभाल सकता हूं, यह सिर्फ ग्राफिक्स को स्थापित कर रहा है, सही तरीका, जो मुझे भ्रमित कर रहा है। मैंने सी ++ के साथ ओपनजीएल के लिए ट्यूटोरियल्स का एक गुच्छा चलाया है, जो सभी अलग-अलग चीजें कहते हैं, जिनमें से कोई भी वास्तव में काम नहीं कर सकता ...

कुछ लोग जीएलयूटी और जीएलडब्ल्यू का उपयोग करने के लिए कहते हैं। कुछ कहते हैं कि जीएलयूटी मर चुका है और फ्रीग्लूट अब बात है। कुछ उन पूरी तरह से उपेक्षा और "glaux.h" है कि मैं खोजने के लिए नहीं कर पा रहे की तरह फाइलों का एक समूह का उपयोग करें - और अन्य ट्यूटोरियल बचने "glaux.h" ... अधिकांश ट्यूटोरियल मैं चेतावनी के साथ आ पाया है के लिए समर्पित टिप्पणी में ओपन के अपने संस्करण दिनांकित है कि और मैं राक्षस और औरोरा की तरह 3 पार्टी पुस्तकालयों के साथ नए libraries-- और अभी भी दूसरों का उपयोग करना चाहिए।

मैं किताबों और ट्यूटोरियल का एक गुच्छा देख रहा हूं कि सभी के पास ओपनजीएल का उपयोग सी ++ के साथ करने के लिए लगभग पूरी तरह से अलग सेटअप है। मुझे एहसास हुआ कि वहाँ शायद नहीं एक ठीक है, यह कर दर असल की तरीका है, लेकिन मैं रास्ता है कि सबसे वर्तमान, सबसे अधिक लोकप्रिय है, और जहाँ तक मेरे सीखने के रूप में परियोजना की उपयोगिता को अधिकतम करने के लिए देख रहा हूँ .. सामान्य रूप से ट्यूटोरियल या सलाह के लिए कोई भी लिंक बहुत सराहना की है।

बीटीडब्ल्यू, मैं विजुअल स्टूडियो एक्सप्रेस 2010 (अच्छा विचार?) का उपयोग कर रहा हूं। मेरे खेल भी रेखांकन तीव्र (सममितीय 2 डी) नहीं होगा लेकिन तर्क की एक टन और डेटा की एक टन है, जिसके कारण मैं सी का उपयोग कर ++ द्वारा चीज़ों को गति करना चाहते हैं की आवश्यकता होगी। लॉगिन और ग्राफिक्स (उद्योग परिप्रेक्ष्य से) के लिए सी ++ का उपयोग करने से बेहतर करने के बेहतर तरीकों पर कोई अन्य अंतर्दृष्टि भी मेरे लिए बहुत मूल्यवान है! अग्रिम में धन्यवाद!

+0

इसके अलावा - अगर किसी के पास कारण हैं तो मुझे ओपनजीएल का उपयोग नहीं करना चाहिए - आग लगाना। असल में, मुख्य चिंता मेरी खुद की शिक्षा है और लंबे समय तक मुझे मदद करने जा रहा है – user446882

+1

हर कोई नेहे ट्यूटोरियल्स की सिफारिश कर रहा है, लेकिन ध्यान रखें कि वे बहुत पुराने हैं और निष्पादन के पूरे मॉडल का उपयोग करते हैं (केवल एक नहीं एपीआई कमांड का सेट) जिसे ओपनजीएल 3 के बाद से हटा दिया गया है। इसका मतलब यह नहीं है कि आप उनसे नहीं सीख सकते हैं। – dfan

उत्तर

5

आप एक शिक्षण अनुभव के रूप में ओपन सीख रहे हैं मान लिया जाये कि करने के लिए हो रहा से रखने जाएगा, मैं सिफारिश करेंगे आप यह:

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

ग्लैक्स और ग्लूट के बारे में भूल जाओ। फ्रीग्लूट एक अच्छा और बहुत मानक विकल्प है। कम स्पष्ट विकल्प क्यूटी होगा, लेकिन यह QGLWidget आपको आसानी से ग्ल कॉल करने की अनुमति देता है, और संदर्भ निर्माण और उसके बारे में चिंता न करें। और यह gui विकल्पों को जोड़ने में आसान है, जो प्रोग्रामिंग ग्राफिक्स के दौरान हमेशा बहुत अच्छा होता है।

वास्तव में ओपनजीएल सीखने के लिए, मैं http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html की सिफारिश करता हूं। नीहे में वह समस्या है जहां आधे से अधिक सामान सीखने के लिए बेकार है, और इसके आस-पास बहुत सारी फ्लाफ (विंडो सृजन एट अल) है।

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

ओह, और अगर मैंने इसे पर्याप्त दोहराया नहीं है। LEARN SHADERS

3

आसपास का सबसे अच्छा ट्यूटोरियल (तर्कसंगत रूप से, कुछ भी "सर्वश्रेष्ठ") Nehe opengl tutorial है। कम से कम, इस ट्यूटोरियल को कई सालों से सुझाव दिया गया है।

जब भी आप जावा पृष्ठभूमि से आते हैं तो आप frameworks such as Tao से ओपनएल के लिए सी # बाइंडिंग पसंद कर सकते हैं, लेकिन वास्तविक सेटअप नमूना डाउनलोड करने और उन्हें चलाने से कठिन हो सकता है।

2

यदि आप पोर्टेबल 3 डी एप्लिकेशन लिखना चाहते हैं तो आपको ओपनजीएल का उपयोग करना चाहिए। विंडोज, लिनक्स और मैक ओएस एक्स इसका समर्थन करता है।

आप NeHe tutorials पर एक नज़र डालना चाहते हैं। यह वेब पर उपलब्ध सर्वश्रेष्ठ ओपनजीएल ट्यूटोरियल में से एक है।

0

मेरी समझ यह है कि यदि आप ओपनजीएल के हाल के संस्करण के लिए सरल समर्थन चाहते हैं तो आपको विंडोज-लैंड छोड़ना होगा, इसलिए शुरू होने पर इसे आगे बढ़ने का प्रयास करें ... जटिल।

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

मुझे दूसरों से सहमत होना है कि नेहे के ट्यूटोरियल बहुत अधिक क्लासिक हैं। आप OpenGL Red Book पर भी विचार करना चाहेंगे, लेकिन इससे पैसे खर्च होंगे।

तीसरे पैराग्राफ के बारे में, जीएलयूटी पुराना है (और उस मामले के लिए जीएलयू है), लेकिन यदि आप उनका उपयोग करने वाले एक अच्छे ट्यूटोरियल देखते हैं, तो मुझे उनके साथ कुछ भी गलत नहीं दिख रहा है। एक बार जब आप अपने पैरों को गीला कर लेंगे तो आप GLUT को मिटाने और SDL का उपयोग करने पर विचार करना चाहेंगे जो मुझे विश्वास है कि बहुत अधिक 'जीवित' है।

जहां तक ​​GLEW जाता है, मैंने इसे सफलतापूर्वक उपयोग किया है और यह अच्छा है अगर आप विंडोज़ पर शेडर्स की तरह कुछ फैंसी करना चाहते हैं। हालांकि, मैं कहूंगा कि इसके बारे में चिंता मत करो पहली बार में, क्योंकि यह अपने स्थापना के समय में वृद्धि और आप मज़ा सामान :)

+1

"मेरी समझ यह है कि यदि आप ओपनजीएल के हाल के संस्करण के लिए सरल समर्थन चाहते हैं तो आपको विंडोज-लैंड छोड़ना होगा, इसलिए शुरू होने पर इसे आगे बढ़ने का प्रयास करें ... जटिल।" ------- ---- ओपनजीएल के लिए विंडोज़ का समर्थन कब होता है? –

+0

मैंने पहले सी # के एक्सएनए का उपयोग किया है, लेकिन मैं इस परियोजना के लिए इसे टालना चाहता हूं - और मुझे यकीन है (केवल माइन क्राफ्ट देखें) कि जावा शायद मैं जो करना चाहता हूं उसे संभालने में सक्षम हूं - और वास्तव में मैं समाप्त कर सकता हूं ग्राफिक्स/इंटरफेस के लिए जावा (या सी #) का उपयोग करके, और तर्क के लिए सी ++। क्या एसडीएल जावा और साथ ही सी ++ में काम करता है? – user446882

+0

@ टॉम - मुख्य शब्द "सरल" और "हालिया" हैं। मुझे पता है कि विंडोज ओपनजीएल का समर्थन करता है, लेकिन मुझे कुछ अतिरिक्त हुप्स (जैसे GLEW) के बिना बिना शेडर्स जैसी फैंसी फीचर्स प्राप्त करने का तरीका पता नहीं है। –

3

यह देखना आसान है कि सी ++ के साथ ओपनजीएल के लिए उपलब्ध विकल्पों की विविधता थोड़ी परेशानी होगी। अधिकांश भाग के लिए, जावा दो संभावनाओं के बीच दो सुंदर स्पष्ट कट विकल्प देता है (क्या आप दृश्य ग्राफ चाहते हैं या नहीं?)

सी ++ की स्थिति निश्चित रूप से अधिक जटिल है।

  1. ग्लूट: यह मूल रूप से एक ओपनजीएल उन्मुख अनुप्रयोग ढांचा है। यह मुख्य रूप से उदाहरणों को छोटा होने की अनुमति देने के लिए लिखा गया था, लेकिन अभी भी काम करता है। मूल कार्यान्वयन में कुछ सुंदर प्रसिद्ध बग हैं, और एक दशक से अधिक समय में अपडेट नहीं किए गए हैं। मैं इसे मूल रूप से मूल रूप से इच्छित संदर्भ में उपयोग करता हूं: लघु नमूने/उदाहरण/डेमो।
  2. चमक: यहां की कहानी GLUT के समान है। इसमें कुछ मेमोरी लीक हैं जिन्हें अब एक दशक से अधिक समय तक जाना जाता है। यह किसी भी मामले में पोर्टेबल कभी नहीं था। मैं इसे पूरी तरह से टालना चाहूंगा।
  3. GLEW/GLEE: ये ओपनजीएल कार्यान्वयन (उदा।, माइक्रोसॉफ्ट के) से ओपनजीएल के नए संस्करणों में जोड़े गए कार्यों के अपेक्षाकृत आसान उपयोग की अनुमति देते हैं जिन्हें शीर्षकों तक पहुंच प्रदान करने के लिए हेडर/पुस्तकालयों को शामिल करने के लिए अपडेट नहीं किया गया है।मैं गली को एक छोटे मार्जिन से पसंद करता हूं क्योंकि यह स्वचालित रूप से स्वचालित रूप से शुरू होता है, लेकिन दोनों ठीक काम करते हैं।
  4. फ्रीग्लूट: इसे हाल ही में अपडेट किया गया है, और कुछ कीड़े समाप्त हो गई हैं। हालांकि अभी भी जीएलयूटी के बुनियादी डिजाइन में सुधार करने के लिए बहुत कुछ नहीं किया है। शायद छोटे डेमो/नमूने के लिए बेहतर विकल्प, लेकिन अभी भी बहुत गंभीर उपयोग के लिए उपयुक्त (आईएमओ) नहीं है।
  5. ओग्रे 3 डी: यह पिछले किसी भी पुस्तकालय की तुलना में बड़ा है। यह एक पूर्ण उड़ा हुआ दृश्य ग्राफ लाइब्रेरी है, बनावट लोडिंग, परिभाषित फ़ाइल प्रारूप इत्यादि के साथ, एक ठोस लाइब्रेरी, लेकिन ध्यान रखें कि यदि आप इसका उपयोग करते हैं, तो आप आमतौर पर ओपनजीएल का उपयोग सीधे नहीं करेंगे (उदाहरण के लिए, विंडोज़ पर, यह स्रोत कोड को बदले बिना ओपनजीएल या डायरेक्ट 3 डी के माध्यम से प्रस्तुत करें)।
  6. ओपेंगसेनग्राफ: अक्सर वैज्ञानिक रूप से उन्मुख अनुप्रयोगों के लिए उपयोग किया जाता है, लेकिन ओग्रे 3 डी से सबसे अधिक तुलनीय है।
  7. FLTK: ओपनजीएल के शीर्ष पर चलने वाली एक छोटी, हल्के जीयूआई लाइब्रेरी।
  8. जीएलएफडब्ल्यू: जीएलयूटी के समान सामान्य भावना में, लेकिन इसे हाल ही में अपडेट किया गया है, इसमें लगभग कई बग नहीं हैं, और (आईएमओ) एक अच्छा डिजाइन है - न्यूनतम लेकिन अभी भी "असली" उपयोग के लिए उपयुक्त है।
संबंधित मुद्दे