ओपनजीएल में एक क्यूब कैसे बनाएं

ओपनजीएल एक शक्तिशाली 3D प्रोग्रामिंग टूल है जिसका इस्तेमाल सरल प्रीमिटीव के जटिल तीन आयामी दृश्यों को आकर्षित करने के लिए किया गया था। यह आलेख आपको सिखाना होगा कि एक साधारण क्यूब कैसे खींचना है जिसे आप तीन आयाम में घुमा सकते हैं और प्रदर्शित कर सकते हैं।

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

कदम

भाग 1

प्रारंभिक सेटिंग्स और मुख्य () फ़ंक्शन

ओपनजीएल स्थापित करें

दस्तावेज़ बनाएं

  • अपने पसंदीदा कोड एडिटर के साथ एक नई फाइल बनाएं, और इसे इल्मीकोबूब सी के रूप में सहेजें

#includes

  • ये मूलभूत हैं जिनमें से हमारे कार्यक्रम की आवश्यकता होगी। यह समझना महत्वपूर्ण है कि अलग-अलग ऑपरेटिंग सिस्टमों में भिन्नता भी शामिल है। अपने प्रोग्राम के लिए अधिकतम अस्थिरता सुनिश्चित करने के लिए उन सभी को शामिल करना सुनिश्चित करें।

// इसमें शामिल # शामिल # शामिल # शामिल करें # परिभाषित करें GL_GLEXT_PROTOTYPES # ifdef __APPLE __ # शामिल # else # include #endif

कार्य और वैश्विक चर के प्रोटोटाइप

  • अगला कदम कार्य के कुछ प्रोटोटाइप घोषित करना है।

    // कार्यात्मकता के प्रोटोटाइप प्रदर्शित करें () - शून्य विशेष के () - // चर Globalidouble rotate_y = 0-double rotate_x = 0-
  • बाद में इन सभी कार्यों और चर को उनके कार्यान्वयन के समय, विस्तार से समझाया जाएगा। अभी के लिए, उन्हें घोषित करना महत्वपूर्ण है।

मुख्य () फ़ंक्शन सेट करें

  • int main (int argc, char * argv []) GLUT_RGB 

भाग 3

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

  • संकल्पनात्मक रूप से, प्रत्येक पक्ष को 4 कोनों को परिभाषित किया जाएगा और ओपनजीएल को लाइनों से जुड़ने और उन्हें एक उपयोगकर्ता परिभाषित रंग के साथ भरना होगा। बाद में आप इस ऑपरेशन के लिए आवश्यक कदम पायेंगे।

glClear ()

  • इस फ़ंक्शन में अनुसरण करने के लिए पहला कदम है रंग और बफर जेड रीसेट करें. इन चरणों के बिना, पुराने डिजाइन अभी भी नए के तहत दृश्यमान हो सकते हैं और ऑब्जेक्ट स्क्रीन पर सही स्थिति में नहीं हो सकते।

शून्य प्रदर्शन () // स्क्रीन को साफ़ करें और बफर जेग्ललर साफ़ करें (GL_COLOR_BUFFER_BIT
  • हमें इस फ़ंक्शन के लिए दो और पंक्तियाँ कोड डालना होगा। वे हैं glFlush () - और glutSwapBuffers () -, जो डबल बफ़रिंग प्रभाव डालें जिसमें हमने पहले वर्णन किया था।
  • भाग 4

    उपयोगकर्ता के लिए अन्तरक्रियाशीलता

    specialKeys ()

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

    • यह फ़ंक्शन यही कारण है कि हमने वैश्विक चर rotate_x और rotate_y की घोषणा की है। जब हम बाएं और दाएँ तीर दबाते हैं, तो हम 5 डिग्री से rotate_y के मान को बढ़ा या घटा देंगे। इसी तरह, जब हम ऊपर और नीचे तीरों को दबाते हैं, rotate_x तदनुसार अलग-अलग होंगे।




    शून्य specialKeys (पूर्णांक कुंजी, int x, int y) {// दायाँ तीर - बढ़ जाती है 5 gradiif के रोटेशन (कुंजी == GLUT_KEY_RIGHT) rotate_y + 5 = - // बायाँ तीर - 5 gradielse अगर के रोटेशन को कम (कुंजी = = GLUT_KEY_LEFT) rotate_y - = 5-else if (कुंजी == GLUT_KEY_UP) rotate_x + = 5-else if (कुंजी == GLUT_KEY_DOWN) rotate_x - 5 = - // dell`immagineglutPostRedisplay अद्यतन का अनुरोध करें () -}

    glRotate ()

    • कोड का आखिरी टुकड़ा उस कथन को जोड़ना है जो हमारे ऑब्जेक्ट को घुमाएगा। फ़ंक्शन पर लौटें "प्रदर्शन ()" और सामने से पहले, इन पंक्तियों को जोड़ें:

      trasformazioniglLoadIdentity रीसेट // () - // घुमाएँ जब उपयोगकर्ता परिवर्तन rotate_x और rotate_yglRotatef (rotate_x, 1.0, 0.0, 0.0) -glRotatef (rotate_y, 0.0, 1.0, 0.0) - बहु // साइड - सामने ....
    • पहले आपको नोटिस है कि glRotatef () glColor3f () और glVertex3f () के समान है लेकिन हमेशा 4 पैरामीटर की आवश्यकता होती है पहला पैरामीटर लागू होने के लिए रोटेशन की डिग्री है। निम्न तीन मापदंडों को परिभाषित करता है कि कौन सी अक्ष घुमाएगी, पहले के साथ एक्स, दूसरा दूसरा और z तीसरा होगा। फिलहाल हमें क्यूब को एक्स और वाई अक्ष के साथ घूमना होगा।

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

    • अन्य परिवर्तन कार्य जो हम लागू कर सकते हैं, glTranslatef () और glScalef () हैं ये फ़ंक्शन glRotatef () के समान हैं, अपवाद के साथ कि वे केवल 3 मापदंडों को स्वीकार करते हैं, जो कि एक्स, वाई और जेड अक्षरों के साथ मूल्य है, जिनमें से ऑब्जेक्ट को अनुवाद या पैमाने पर किया जाता है।

    • जब हम तीनों परिवर्तनों को एक वस्तु में लागू करते हैं तो सही प्रभाव प्राप्त करने के लिए, हमें उन्हें सही क्रम में लागू करना होगा। उन्हें इस क्रम में हमेशा लिखें: glTranslate, glRotate, फिर glScale. ओपनजीएल इन बदलावों को अंतिम से पहले तक लागू करता है इस अवधारणा को समझने के लिए, सरल 1x1x1 क्यूब के विज़ुअलाइज़ेशन में मतभेदों की कल्पना करने का प्रयास करें अगर ओपनजीएल ने पहले से आखिरी और फिर आखिरी से पहले तक उन्हें लागू किया।

    • एक्स अक्ष के साथ क्यूब 2 को स्केल करने के लिए, y अक्ष के साथ 2 से स्केल करने के लिए, y अक्ष के साथ क्यूब 180 डिग्री को घुमाएं और एक्स अक्ष के साथ 0.1 का अनुवाद करें। ऊपर वर्णित सही क्रम में उन्हें लिखना सुनिश्चित करें (यदि आपके कोई संदेह है, तो आपको गाइड के अंत में अंतिम कोड में सही क्रम मिलेगा)

      // अनुवाद के अन्य परिवर्तन (0.1, 0.0, 0.0) -glRotatef (180, 0.0, 1.0, 0.0) -glScalef (2.0, 2.0, 0.0) -

    संकलन

    • अपना पहला ओपनजीएल प्रोजेक्ट पूरा करने का अंतिम चरण यह है कि अपना कोड पूरा करें और निष्पादित करें. मान लें कि आप जीसीसी को एक कंपाइलर के रूप में उपयोग कर रहे हैं, इन आदेशों को अपने टर्मिनल से चलाने के लिए अपने प्रोग्राम को संकलित और परीक्षण करें।

      लिनक्स पर: जीसीसी -ओ cube.c घन -lglut -lGL./ ilmiocuboSu मैक: जीसीसी -ओ foo foo.c -Framework भरमार -Framework OpenGL./ ilmiocuboSu विंडोज: जीसीसी -Wall -ofoo foo.c -lglut32cu -lglu32 - lopengl32./ ilmocubo

    भाग 5

    अंतिम कोड
    • यहां, अंत में आपने अपना पहला ओपनसीएल कार्यक्रम बनाया है! नीचे आपको एक संदर्भ बिंदु के रूप में स्रोत कोड मिलेगा

    //// फ़ाइल: ilmiocubo.c // लेखक: मैट Daisley // निर्मित: 25/4/2012 // परियोजना: स्रोत कोड ओपन में एक घन बनाने के लिए // विवरण: एक ओपन विंडो बनाता है और एक 3 डी घन आकर्षित / / आप दिशात्मक तीर // // नियंत्रण का उपयोग कर क्या बारी बारी से कर सकते हैं: छोड़ दिया तीर - बाएं घुमाएं // सही तीर - बारी बारी से सही तीर // - // नीचे तीर ऊपर की ओर बारी बारी - बारी बारी से नीचे // ------------------------------------------------ ---------- // इसमें शामिल है ----------------------------------- ----------------------- # शामिल # शामिल # शामिल #define GL_GLEXT_PROTOTYPES #ifdef __ __APPLE किसी और # # शामिल # # endif शामिल // ----- -------------------------------------------------- --- // कार्यों के प्रोटोटाइप // ---------------------------------------- ------------------ शून्य प्रदर्शन () - शून्य विशेष कुंजी () - // -------------------- -------------------------------------- // वैश्विक चर // ------ -------------------------------------------------- --डबल रोटेट_य = 0-डबल रोटेट_एक्स = 0 - // ----- -------------------------------------------------- --- // डिस्प्ले रिकॉल फ़ंक्शन () // ------------------------------------- --------------------- शून्य प्रदर्शन () // साफ स्क्रीन और बफर ZglClear (स्पष्ट GL_COLOR_BUFFER_BIT // ----------- ----------------------------------------------- // समारोह अनुस्मारक विशेष कियां () // ------------------------------------------- --------------- शून्य specialKeys (पूर्णांक कुंजी, int x, int y) {// सही तीर - 5 gradiif के रोटेशन (कुंजी == GLUT_KEY_RIGHT) rotate_y + = 5 बढ़ जाती है // बाएँ तीर - 5 gradielse के रोटेशन को कम करता है, तो (कुंजी == GLUT_KEY_LEFT) rotate_y - = 5-else if (कुंजी == GLUT_KEY_UP) rotate_x + = 5-else if (कुंजी == GLUT_KEY_DOWN) rotate_x - = 5 / / अनुरोध dell`immagineglutPostRedisplay () को अद्यतन करने -} // ------------------------------------ ---------------------- // फ़ंक्शन मुख्य () // -------------------- -------------------------------------- int main (int argc, char * argv []) GLUT_RGB 

    और पढ़ें ... (1)
    सामाजिक नेटवर्क पर साझा करें:

    संबद्ध

    © 2011—2022 GnuMani.com