ओपनजीएल में क्यूब कैसे बनाएं (चित्रों के साथ)

विषयसूची:

ओपनजीएल में क्यूब कैसे बनाएं (चित्रों के साथ)
ओपनजीएल में क्यूब कैसे बनाएं (चित्रों के साथ)

वीडियो: ओपनजीएल में क्यूब कैसे बनाएं (चित्रों के साथ)

वीडियो: ओपनजीएल में क्यूब कैसे बनाएं (चित्रों के साथ)
वीडियो: वर्चुअल बॉक्स में विंडोज एक्सपी कैसे इंस्टॉल करें - 2023 2024, अप्रैल
Anonim

OpenGL एक शक्तिशाली 3D प्रोग्रामिंग टूल है जिसका उपयोग साधारण आदिम से जटिल त्रि-आयामी दृश्यों को खींचने के लिए किया जाता है। यह लेख आपको सिखाएगा कि एक साधारण घन कैसे बनाया जाए जिसे आप तीन आयामों में देखने के लिए घुमा सकते हैं!

इस परियोजना के लिए आपको एक कोड संपादक और सी प्रोग्रामिंग के कुछ ज्ञान की आवश्यकता होगी।

कदम

3 का भाग 1: आरंभिक सेटअप

1994315 1 1
1994315 1 1

चरण 1. ओपनजीएल स्थापित करें आरंभ करने के लिए अपने सिस्टम पर ओपनजीएल स्थापित करने के लिए इन चरणों का पालन करें।

यदि आपके पास पहले से ओपनजीएल है, साथ ही एक संगत सी कंपाइलर स्थापित है, तो आप इस चरण को छोड़ सकते हैं और अगले पर जा सकते हैं।

1994315 2 1
1994315 2 1

चरण 2. दस्तावेज़ बनाएँ।

अपने पसंदीदा कोड संपादक में एक नई फ़ाइल बनाएं और इसे mycube.c. के रूप में सहेजें

1994315 3 1
1994315 3 1

चरण 3. #शामिल करें।

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

    // शामिल है #शामिल करें #शामिल करें #शामिल करें #GL_GLEXT_PROTOTYPES परिभाषित करें #ifdef _APPLE_ #include #else #include #endif

1994315 4 1
1994315 4 1

चरण 4. फ़ंक्शन प्रोटोटाइप और वैश्विक चर जोड़ें।

आपका अगला कदम कुछ फ़ंक्शन प्रोटोटाइप घोषित करना है।

    // फ़ंक्शन प्रोटोटाइप शून्य प्रदर्शन (); शून्य विशेष कुंजी (); // वैश्विक चर डबल रोटेट_वाई = 0; डबल रोटेट_एक्स = 0;

1994315 5 1
1994315 5 1

चरण 5. मुख्य () फ़ंक्शन सेट करें।

    int main(int argc, char* argv){ // GLUT को इनिशियलाइज़ करें और यूजर पैरामीटर्स को प्रोसेस करें glutInit(&argc, argv); // Z-बफर glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) के साथ डबल बफर्ड ट्रू कलर विंडो का अनुरोध करें;

  • यह कथन आपके परिवेश को स्थापित करता है। ओपनजीएल प्रोग्राम लिखते समय याद रखने वाली एक बड़ी बात यह है कि आपको हर चीज के लिए पूछना चाहिए। इसके लिए आपको इस बात की अधिक समझ होनी चाहिए कि आपका प्रोग्राम कैसे काम करता है और अपनी इच्छित कार्यक्षमता प्राप्त करने के लिए आपको क्या शामिल करना चाहिए। इस लाइन में, आप डिस्प्ले को डबल बफरिंग, RGB कलर और Z-बफर के साथ सेट करेंगे।
  • डबल बफरिंग स्क्रीन पर छवियों को कैसे खींचा जाता है, इसके कारण उत्पन्न होने वाली समस्या को खत्म करने के लिए ग्राफिक्स प्रोग्राम में उपयोग की जाने वाली एक तकनीक है। हर बार जब आप दृश्य को फिर से बनाते हैं, तो पहले डिस्प्ले को मिटाना होगा फिर नई जानकारी खींची जाएगी। डबल बफरिंग के बिना आप एक झिलमिलाहट प्रभाव देखेंगे क्योंकि स्क्रीन को मिटा दिया जाता है और बार-बार फिर से खींचा जाता है।
  • आकर्षित करने के लिए दूसरा बफ़र जोड़कर यह समस्या ठीक की गई है। इस विधि से, पहले बफ़र के लिए एक छवि खींची जाती है और वह बफ़र आपको दिखाया जाता है। अगला फ्रेम दूसरे बफर में खींचा जाएगा और जब यह हो जाएगा, तो दो बफर स्थान बदल देंगे। आप तुरंत दूसरा बफर देखेंगे, लेकिन, हमसे छिपा हुआ, पहला बफर मिटा दिया जा रहा है और तीसरे फ्रेम के साथ फिर से खींचा जा रहा है जिसे समाप्त होने पर बदल दिया जाएगा।
  • आप भी सक्षम करना चाहते हैं आरजीबी रंग आपकी विंडो में सिस्टम।
  • z-बफरिंग यह है कि आप अपने इच्छित 3D प्रभाव कैसे प्राप्त करते हैं। ओपनजीएल एक्स, वाई और जेड अक्षों के साथ त्रि-आयामी समन्वय प्रणाली का उपयोग करता है। यह प्रभाव देने के लिए कि कोई वस्तु आपके करीब है z अक्ष पर उसकी स्थिति बढ़ा दी गई है, हालांकि, इसे और दूर दिखाने के लिए z अक्ष पर इसकी स्थिति कम कर दी गई है।
1994315 6 1
1994315 6 1

चरण 6. विंडो बनाएं।

अगला कदम है खिड़की बनाएं जिसके भीतर आप घन खींचेंगे। इस ट्यूटोरियल में, विंडो को "Awesome Cube" कहा जाता है।

    // विंडो बनाएं glutCreateWindow ("बहुत बढ़िया क्यूब");

1994315 7 1
1994315 7 1

चरण 7. गहराई परीक्षण सक्षम करें।

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

    // Z-बफर गहराई परीक्षण सक्षम करें glEnable(GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

चरण 8. कॉलबैक फ़ंक्शन जोड़ें।

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

    // कॉलबैक फ़ंक्शन glutDisplayFunc (प्रदर्शन); glutSpecialFunc (विशेष कुंजी);

1994315 9 1
1994315 9 1

चरण 9. मेनलूप प्रारंभ करें।

यह मुख्य फ़ंक्शन को तब तक याद रखेगा जब तक आप एनिमेशन और उपयोगकर्ता इंटरैक्शन की अनुमति देने के लिए प्रोग्राम को बंद नहीं करते।

    // घटनाओं के लिए GLUT पर नियंत्रण पास करें glutMainLoop (); // ओएस रिटर्न 0 पर लौटें; }

3 का भाग 2: प्रदर्शन () फ़ंक्शन

1994315 10 1
1994315 10 1

चरण 1. इस फ़ंक्शन के उद्देश्य को समझें।

इस फंक्शन में आपका क्यूब बनाने का सारा काम हो जाएगा। आपके घन के पीछे सामान्य विचार सभी छह पक्षों को अलग-अलग खींचना और उन्हें उपयुक्त स्थिति में रखना है।

संकल्पनात्मक रूप से, प्रत्येक पक्ष चार कोनों को परिभाषित करके और ओपनजीएल को लाइनों को जोड़ने और इसे आपके द्वारा परिभाषित रंग से भरने के द्वारा खींचा जा रहा है। ऐसा करने के चरण नीचे दिए गए हैं।

1994315 11 1
1994315 11 1

चरण 2. ग्लिक्लेयर () जोड़ें।

इस फ़ंक्शन में आपको जो पहला कदम उठाने की आवश्यकता है वह है: रंग और Z बफर साफ़ करें. इन चरणों के बिना, पुराने चित्र अभी भी नए चित्रों के नीचे दिखाई दे सकते हैं और खींची गई वस्तुएँ स्क्रीन पर सही स्थान पर नहीं होंगी।

    शून्य प्रदर्शन () {// स्पष्ट स्क्रीन और जेड-बफर glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

1994315 12 1
1994315 12 1

चरण 3. GlBegin () और glEnd () जोड़ें।

ओपनजीएल वस्तुओं को विभिन्न बहुभुजों के संयोजन के रूप में परिभाषित करता है। का उपयोग करते हुए ग्लबीगिन () आदेश, आप प्रभावी रूप से एक पेंसिल डालते हैं जो एक आकृति खींचेगी। पेंसिल को ऊपर उठाने और एक नया आकार शुरू करने के लिए, आपको इसका उपयोग करना चाहिए ग्लेंड () आदेश। इस ट्यूटोरियल में आप क्यूब के प्रत्येक पक्ष को खींचने के लिए GL_POLYGON का उपयोग करेंगे लेकिन अन्य आकार बनाने के लिए GL_LINE, GL_QUAD, या GL_TRIANGLE जैसे अन्य पैरामीटर विकल्पों का उपयोग करना संभव है।

  • यहां आप अपने क्यूब के सामने से शुरुआत करेंगे। बाद में आप सभी 6 पक्षों में रंग डालेंगे।
  • // बहु-रंगीन पक्ष - फ्रंट ग्लबीगिन (GL_POLYGON); // अगले चरण में कोने जोड़े जाएंगे glEnd ();

1994315 13 1
1994315 13 1

चरण 4. GlVertex3f() जोड़ें।

एक बार जब आपने कहा कि आप अपना बहुभुज शुरू करना चाहते हैं, तो आपको करने की आवश्यकता है शीर्षों को परिभाषित करें वस्तु का। आप अपनी वस्तु के साथ क्या करना चाहते हैं, इसके आधार पर glVertex के कई रूप हैं।

  • पहला यह है कि आप कितने आयामों में काम कर रहे हैं। glVertex3f में उपरोक्त 3 कहता है कि आप 3 आयामों में आरेखण कर रहे हैं। 2 या 4 आयामों में काम करना भी संभव है। GlVertex3f में उपरोक्त f कहता है कि आप फ़्लोटिंग पॉइंट नंबरों के साथ काम कर रहे हैं। आप शॉर्ट्स, पूर्णांक या डबल्स का भी उपयोग कर सकते हैं।
  • ध्यान दें कि इन बिंदुओं को परिभाषित किया गया है a वामावर्त तौर - तरीका। यह इस समय बहुत महत्वपूर्ण नहीं है, लेकिन जब आप लाइटिंग, टेक्सचर्स और कूल-फेसिंग के साथ काम करना शुरू करते हैं, तो यह अविश्वसनीय रूप से महत्वपूर्ण हो जाएगा, इसलिए अब अपने पॉइंट्स को वामावर्त परिभाषित करने की आदत डालें।
  • GlBegin () और glEnd () लाइनों के बीच कोने जोड़ें।
  • // बहु-रंगीन पक्ष - फ्रंट ग्लबीगिन (GL_POLYGON); glVertex3f (-0.5, -0.5, -0.5); // P1 glVertex3f (-0.5, 0.5, -0.5); // P2 glVertex3f (0.5, 0.5, -0.5); // P3 glVertex3f (0.5, -0.5, -0.5); // पी 4 ग्लेंड ();

1994315 14 1
1994315 14 1

चरण 5. GlColor3f() जोड़ें।

glColor, glVertex की तरह ही काम करता है। आप अंक को शॉर्ट्स, पूर्णांक, युगल या फ्लोट के रूप में परिभाषित कर सकते हैं। प्रत्येक रंग का मान 0 से 1 तक होता है। सभी 0 बिंदु को काला बनाते हैं और सभी 1 बिंदु को सफेद बनाते हैं। GlColor3f() में 3 आरजीबी रंग प्रणाली को संदर्भित करता है जिसमें कोई अल्फा चैनल नहीं है। एक रंग का अल्फा इसकी पारदर्शिता को परिभाषित करता है। अल्फा स्तर को बदलने के लिए, अंतिम पैरामीटर 0 से 1 के मान के साथ अपारदर्शी से पारदर्शी के लिए glColor4f() का उपयोग करें।

  • जब आप glColor3f() को कॉल करते हैं तो उस बिंदु से खींचा गया प्रत्येक शीर्ष उस रंग का होगा। इसलिए, यदि आप चाहते हैं कि सभी चार कोने लाल हों, तो glVertex3f() कमांड से पहले कभी भी एक बार रंग सेट करें और सभी कोने लाल हो जाएंगे।
  • नीचे परिभाषित सामने वाला पक्ष दिखाता है कि प्रत्येक शीर्ष के लिए एक नया रंग कैसे परिभाषित किया जाए। जब आप ऐसा करते हैं, तो आप ओपनजीएल रंगों की एक दिलचस्प संपत्ति देख सकते हैं। चूंकि बहुभुज के प्रत्येक शीर्ष का अपना रंग होता है, OpenGL स्वचालित रूप से रंगों को मिश्रित कर देगा! अगला चरण दिखाएगा कि एक ही रंग के साथ चार शीर्षों को कैसे निर्दिष्ट किया जाए।
  • // बहु-रंगीन पक्ष - फ्रंट ग्लबीगिन (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 लाल है glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 हरा है glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 नीला है glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 बैंगनी glEnd () है;

1994315 15 1
1994315 15 1

चरण 6. दूसरे पक्षों को संभालें।

गणना करें कि घन की अन्य पाँच भुजाओं के लिए प्रत्येक शीर्ष का स्थान क्या होगा, लेकिन सरलता के लिए, ये आपके लिए परिकलित किए गए हैं और इन्हें इसमें शामिल किया गया है अंतिम प्रदर्शन () फ़ंक्शन नीचे।

    // सफेद पक्ष - बैक ग्लोबिन (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); ग्लेंड (); // पर्पल साइड - राइट ग्लोबिन (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); ग्लेंड (); // ग्रीन साइड - लेफ्ट ग्लोबिन (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, -0.5, -0.5); ग्लेंड (); // ब्लू साइड - टॉप ग्लोबिन (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, 0.5); ग्लेंड (); // रेड साइड - बॉटम ग्लबीगिन (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, -0.5); ग्लेंड (); ग्लफ्लश (); ग्लूटस्वैपबफर (); }

  • हम इस फ़ंक्शन के लिए कोड की दो अंतिम पंक्तियों में भी जोड़ना चाहते हैं। य़े हैं ग्लफ्लश ();

    तथा ग्लूटस्वैपबफर ();

    जो हमें डबल-बफरिंग प्रभाव देता है जिसके बारे में आपने पहले सीखा था।

भाग ३ का ३: उपयोगकर्ता अन्तरक्रियाशीलता

1994315 16 1
1994315 16 1

चरण 1. विशेष कुंजी () जोड़ें।

आपका काम लगभग पूरा हो चुका है, लेकिन इस समय आप एक घन बना सकते हैं, लेकिन उसे घुमाने का कोई तरीका नहीं है। ऐसा करने के लिए, आप करेंगे एक विशेष कुंजी बनाएं () हमें तीर कुंजियों को दबाने और क्यूब को घुमाने की अनुमति देने के लिए कार्य करता है!

  • यही कारण है कि आपने वैश्विक चर रोटेट_एक्स और रोटेट_य घोषित किया है। जब आप दाएँ और बाएँ तीर कुंजियाँ दबाते हैं, तो रोटेट_y 5 डिग्री से बढ़ा या घटाया जाएगा। इसी तरह, जब आप ऊपर और नीचे तीर कुंजियों को दबाते हैं, तो उसी के अनुसार रोटेट_एक्स बदल जाएगा।
  • शून्य विशेष कुंजी (इंट कुंजी, इंट एक्स, इंट वाई) {// दायां तीर - 5 डिग्री से रोटेशन बढ़ाएं अगर (कुंजी == GLUT_KEY_RIGHT) रोटेट_y + = 5; // बायां तीर - रोटेशन को 5 डिग्री कम करें यदि (कुंजी == GLUT_KEY_LEFT) रोटेट_य - = 5; और अगर (कुंजी == GLUT_KEY_UP) रोटेट_x + = 5; और अगर (कुंजी == GLUT_KEY_DOWN) रोटेट_एक्स - = 5; // अनुरोध प्रदर्शन अद्यतन glutPostRedisplay (); }

1994315 17 1
1994315 17 1

चरण 2. GlRotate () जोड़ें।

आपका अंतिम कथन उस कथन को जोड़ना है जो आपकी वस्तु को घुमाएगा। डिस्प्ले () फ़ंक्शन पर वापस जाएं और सामने की तरफ, इन पंक्तियों को जोड़ें:

    // परिवर्तनों को रीसेट करें glLoadIdentity (); // घुमाएँ जब उपयोगकर्ता रोटेट_एक्स और रोटेट_य ग्लोटेटेफ़ (रोटेट_एक्स, 1.0, 0.0, 0.0) बदलता है; glRotatef (रोटेट_वाई, 0.0, 1.0, 0.0); // बहुरंगी पक्ष - सामने…।

  • पहले ध्यान दें कि वाक्य रचना ग्लोरोटेफ () GlColor3f() और glVertex3f() के समान है लेकिन हमेशा 4 पैरामीटर की आवश्यकता होती है। पहला पैरामीटर लागू किए जाने वाले रोटेशन की डिग्री है। अगले तीन पैरामीटर परिभाषित करते हैं कि किस अक्ष को घुमाना है जिसमें पहला x अक्ष है, दूसरा y अक्ष है, और तीसरा z अक्ष है। अभी आपको केवल x और y-अक्ष के बारे में घुमाने की आवश्यकता है।
  • आपके द्वारा अपने प्रोग्राम में लिखे गए सभी परिवर्तनों को इसी तरह की पंक्तियों की आवश्यकता होती है। संकल्पनात्मक रूप से, आप इसे रोटेट_एक्स द्वारा परिभाषित राशि द्वारा एक्स अक्ष के बारे में अपनी वस्तु को घुमाने के रूप में सोच सकते हैं और फिर रोटेट_वाई द्वारा वाई अक्ष के चारों ओर घूमते हुए सोच सकते हैं। हालाँकि, OpenGL इन सभी कथनों को एक मैट्रिक्स परिवर्तन में जोड़ता है। हर बार जब आप डिस्प्ले फ़ंक्शन को कॉल करते हैं, तो आप एक ट्रांसफ़ॉर्मेशन मैट्रिक्स बनाते हैं और ग्ललोड इडेंटिटी () आश्वासन देता है कि आप प्रत्येक पास में एक नए मैट्रिक्स के साथ शुरुआत करेंगे।
  • आपके द्वारा लागू किए जा सकने वाले अन्य परिवर्तन कार्य हैं glTranslatef() और glScalef()। ये फ़ंक्शन glRotatef () के समान हैं, अपवाद के साथ वे ऑब्जेक्ट का अनुवाद या स्केल करने के लिए केवल 3 पैरामीटर, x, y, और z मात्रा लेते हैं।
  • तीनों परिवर्तनों को एक वस्तु पर लागू करते समय सही प्रभाव प्राप्त करने के लिए, आपको उन्हें सही क्रम में लागू करने की आवश्यकता है। उन्हें हमेशा क्रम में लिखें glTranslate, glRotate, फिर glScale. ओपनजीएल अनिवार्य रूप से परिवर्तनों को नीचे से ऊपर तरीके से लागू करता है। इसे समझने के लिए यह कल्पना करने की कोशिश करें कि एक साधारण 1x1x1 क्यूब ट्रांसफॉर्मेशन के साथ कैसा दिखेगा यदि ओपनजीएल ने उन्हें ऊपर से नीचे तक लागू किया और यदि ओपनजीएल ने उन्हें नीचे से ऊपर तक लागू किया।
1994315 18 1
1994315 18 1

चरण 3. क्यूब को x-अक्ष के साथ 2, y-अक्ष के साथ 2 से स्केल करने के लिए निम्नलिखित कमांड जोड़ें, क्यूब को y-अक्ष के बारे में 180 डिग्री घुमाएँ, और क्यूब को x-अक्ष के साथ 0.1 से अनुवाद करें।

सुनिश्चित करें कि इन और साथ ही पिछले glRotate() कमांड को ऊपर बताए अनुसार सही क्रम में व्यवस्थित करें। (यदि आप अनिश्चित हैं, तो यह ट्यूटोरियल के अंत में अंतिम कोड में किया जाता है।)

    // अन्य परिवर्तन glTranslatef (०.१, ०.०, ०.०); glRotatef (१८०, ०.०, १.०, ०.०); ग्लस्केलेफ (2.0, 2.0, 0.0);

1994315 19 1
1994315 19 1

चरण 4. अपना कोड संकलित करें और चलाएं।

यह मानते हुए कि आप अपने कंपाइलर के रूप में gcc का उपयोग कर रहे हैं, अपने प्रोग्राम को संकलित और परीक्षण करने के लिए इन कमांड को अपने टर्मिनल से चलाएँ।

    लिनक्स पर: gcc cube.c -o cube -lglut -lGL./ mycube मैक पर: gcc -o foo foo.c -framework GLUT -framework OpenGL./ mycube विंडोज़ पर: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -लोपेंगल32./ mycube

1994315 20 1
1994315 20 1

चरण 5. अपना पूरा कोड जांचें।

यह इस तरह होना चाहिए:

    // // फ़ाइल: mycube.c // लेखक: मैट डेज़ली // बनाया गया: 4/25/2012 // प्रोजेक्ट: ओपनजीएल में एक क्यूब बनाने के लिए स्रोत कोड // विवरण: एक ओपनजीएल विंडो बनाता है और एक 3 डी क्यूब बनाता है / / कि उपयोगकर्ता तीर कुंजियों का उपयोग करके घुमा सकता है // // नियंत्रण: बायाँ तीर - बाएँ घुमाएँ // दायाँ तीर - दाएँ घुमाएँ // ऊपर तीर - ऊपर घुमाएँ // नीचे तीर - नीचे घुमाएँ // ------ -------------------------------------------------- --//शामिल है//------------------------------------------- --------------- #शामिल करें #शामिल करें #शामिल करें # परिभाषित करें GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #else #include #endif // ------------- ------------------------------------------- // फंक्शन प्रोटोटाइप / / ------------------------------------------------- --------- शून्य प्रदर्शन (); शून्य विशेष कुंजी (); //----------------------------------------------------- ---------- // सार्वत्रिक चर // ---------------------------------- ------------------------ डबल रोटेट_वाई = 0; डबल रोटेट_एक्स = 0; //----------------------------------------------------- ---------- // डिस्प्ले () कॉलबैक फ़ंक्शन // ----------------------------- --------------------------- शून्य प्रदर्शन () {// स्पष्ट स्क्रीन और जेड-बफर glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // परिवर्तनों को रीसेट करें glLoadIdentity (); // अन्य परिवर्तन // glTranslatef (०.१, ०.०, ०.०); // शामिल नहीं है // glRotatef (180, 0.0, 1.0, 0.0); // शामिल नहीं है // जब उपयोगकर्ता रोटेट_एक्स और रोटेट_य ग्लोटेटेफ (रोटेट_एक्स, 1.0, 0.0, 0.0) बदलता है तो घुमाएं; glRotatef (रोटेट_वाई, 0.0, 1.0, 0.0); // अन्य परिवर्तन // glScalef (२.०, २.०, ०.०); // शामिल नहीं है // बहु-रंगीन पक्ष - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 लाल है glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 हरा है glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 नीला है glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 बैंगनी glEnd () है; // सफेद पक्ष - बैक ग्लोबिन (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); ग्लेंड (); // पर्पल साइड - राइट ग्लोबिन (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); ग्लेंड (); // ग्रीन साइड - लेफ्ट ग्लबीगिन (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, -0.5, -0.5); ग्लेंड (); // ब्लू साइड - टॉप ग्लोबिन (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, 0.5); ग्लेंड (); // रेड साइड - बॉटम ग्लबीगिन (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, -0.5); ग्लेंड (); ग्लफ्लश (); ग्लूटस्वैपबफर (); } // ------------------------------------------- ----------- // विशेष कुंजी () कॉलबैक फ़ंक्शन // ----------------------------- ----------------------------- शून्य विशेष कुंजी (इंट कुंजी, इंट एक्स, इंट वाई) {// दायां तीर - 5 से रोटेशन बढ़ाएं डिग्री अगर (कुंजी == GLUT_KEY_RIGHT) Rotate_y += 5; // बायां तीर - रोटेशन को 5 डिग्री कम करें यदि (कुंजी == GLUT_KEY_LEFT) रोटेट_य - = 5; और अगर (कुंजी == GLUT_KEY_UP) रोटेट_x += 5; और अगर (कुंजी == GLUT_KEY_DOWN) रोटेट_एक्स - = 5; // अनुरोध प्रदर्शन अद्यतन glutPostRedisplay (); } // ------------------------------------------- ----------- // मुख्य कार्य // ------------------------------- ---------------------------- int main(int argc, char* argv){ // GLUT को इनिशियलाइज़ करें और यूजर पैरामीटर्स को प्रोसेस करें glutInit (और argc, argv); // Z-बफर glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) के साथ डबल बफर्ड ट्रू कलर विंडो का अनुरोध करें; // विंडो बनाएं glutCreateWindow ("बहुत बढ़िया क्यूब"); // Z-बफर गहराई परीक्षण सक्षम करें glEnable(GL_DEPTH_TEST); // कॉलबैक फ़ंक्शन glutDisplayFunc (प्रदर्शन); glutSpecialFunc (विशेष कुंजी); // घटनाओं के लिए GLUT पर नियंत्रण पास करें glutMainLoop (); // ओएस रिटर्न 0 पर लौटें; }

सिफारिश की: