OpenGL இல் ஒரு கனசதுரத்தை உருவாக்குவது எப்படி

நூலாசிரியர்: Gregory Harris
உருவாக்கிய தேதி: 12 ஏப்ரல் 2021
புதுப்பிப்பு தேதி: 1 ஜூலை 2024
Anonim
OpenGL டுடோரியல் 23 - ஒரு கனசதுரத்தை வரைதல்
காணொளி: OpenGL டுடோரியல் 23 - ஒரு கனசதுரத்தை வரைதல்

உள்ளடக்கம்

OpenGL என்பது ஒரு 3D நிரலாக்க கருவியாகும், இது எளிய வடிவங்களிலிருந்து சிக்கலான 3D படங்களை உருவாக்க உங்களை அனுமதிக்கிறது. இந்த கட்டுரையில், அவரது உதவியுடன் மூன்று பரிமாணங்களில் சுழற்றக்கூடிய ஒரு எளிய கனசதுரத்தை எப்படி வரையலாம் என்பதை நீங்கள் கற்றுக் கொள்வீர்கள்!

படிகள்

பகுதி 1 இன் 3: ஆரம்ப நிறுவல்

  1. 1 OpenGL ஐ நிறுவவும். உங்கள் கணினியில் OpenGL ஐ எவ்வாறு நிறுவுவது என்பது குறித்த டுடோரியலுடன் தொடங்கவும். உங்களிடம் ஏற்கனவே ஓபன்ஜிஎல் மற்றும் சி கம்பைலர் இருந்தால், இந்த படிநிலையைத் தவிர்த்துவிட்டு அடுத்த கட்டத்திற்கு செல்லலாம்.
  2. 2 ஒரு ஆவணத்தை உருவாக்கவும். உங்களுக்கு பிடித்த குறியீடு எடிட்டரில் ஒரு புதிய கோப்பை உருவாக்கி அதை mycube.c ஆக சேமிக்கவும்
  3. 3 #சேர்க்கவும். உங்களுக்குத் தேவையான அடிப்படை #அடங்கிய வழிமுறைகள் இதோ. வெவ்வேறு இயக்க முறைமைகளுக்கான வழிகாட்டுதல்கள் வேறுபட்டவை என்பதை நினைவில் கொள்வது அவசியம், எனவே நிரல் உலகளாவிய மற்றும் எந்த அமைப்பிலும் இயங்குவதற்கு நீங்கள் எல்லாவற்றையும் தேர்வு செய்ய வேண்டும்.

      // அடங்கும் #stdio.h> #stdarg.h> #சேர்க்கவும் கணிதம்.

  4. 4 செயல்பாட்டு முன்மாதிரிகள் மற்றும் உலகங்களைச் சேர்க்கவும். அடுத்த கட்டம் செயல்பாட்டு முன்மாதிரிகளை அறிவிப்பதாகும்.

      // செயல்பாட்டு முன்மாதிரிகள் வெற்றிட காட்சி (); வெற்றிட சிறப்பு விசைகள் (); // உலகளாவிய மாறிகள் இரட்டை சுழற்சி_ஒய் = 0; இரட்டை சுழற்று_எக்ஸ் = 0;

  5. 5 முக்கிய () செயல்பாட்டை வரையறுக்கவும்.

      int main (int argc, char * argv []) // GLUT ஐ துவக்கவும் மற்றும் தனிப்பயன் அளவுருக்கள் glutInit ஐ செயலாக்கவும் (& argc, argv); /

3 இன் பகுதி 2: காட்சி () செயல்பாடு

  1. 1 காட்சி () செயல்பாட்டின் நோக்கத்தைப் புரிந்து கொள்ளுங்கள். கனசதுரத்தை வழங்குவதற்கான அனைத்து வேலைகளும் இந்த செயல்பாட்டின் பலவீனமான கோடுகளில் விழும். பொதுவான யோசனை இதுதான்: நீங்கள் கனசதுரத்தின் ஆறு தனி முகங்களை வரைந்து அவற்றை அந்தந்த நிலைகளில் வைப்பீர்கள்.
    • ஒவ்வொரு முகத்திற்கும், நீங்கள் நான்கு மூலைகளை வரையறுப்பீர்கள், மேலும் OpenGL அவற்றை வரிகளுடன் இணைத்து, நீங்கள் தேர்ந்தெடுத்த வண்ணத்தால் நிரப்பும். இதை எப்படி செய்வது என்பது கீழே விளக்கப்படும்.
  2. 2 GlClear () செயல்பாட்டைச் சேர்க்கவும். முதலில், இந்த செயல்பாட்டில் பணிபுரியும் போது, ​​நமக்குத் தேவை தெளிவான நிறம் மற்றும் z- இடையகம்... இது இல்லாமல், புதிய படம் கீழ் பழையது தெரியும், மற்றும் நிரலால் வரையப்பட்ட பொருள்கள் தவறாக நிலைநிறுத்தப்படும்.

      வெற்று காட்சி () // திரை மற்றும் Z இடையகத்தை அழிக்கவும் glClear (GL_COLOR_BUFFER_BIT

    • கடைசி இரண்டு வரிகளுக்கு கவனம் செலுத்துங்கள். இவை செயல்பாடுகள் glFlush (); மற்றும் குளுட்ஸ்வாப் பஃபர்ஸ் ();, மேலே விவரிக்கப்பட்ட இரட்டை இடையகத்தின் விளைவைக் கொடுக்கும்.

3 இன் பகுதி 3: நிரல் தொடர்பு

  1. 1 சிறப்பு விசைகள் () செயல்பாட்டைச் சேர்க்கவும். கொள்கையளவில், எல்லாம் கிட்டத்தட்ட தயாராக உள்ளது, ஆனால் கனசதுரம் மட்டுமே வரையப்பட்டு சுழற்றப்படவில்லை. இதை செய்ய, நீங்கள் உருவாக்க வேண்டும் சிறப்பு விசைகள் () செயல்பாடுஅம்பு விசைகளை அழுத்துவதன் மூலம் கனசதுரத்தை சுழற்ற அனுமதிக்கும்!
    • இந்த செயல்பாட்டிற்காக உலக மாறிகள் சுழலும்_ x மற்றும் சுழற்று_ஒய் அறிவிக்கப்பட்டது. நீங்கள் இடது மற்றும் வலது அம்பு விசைகளை அழுத்தும்போது, ​​rotate_y மதிப்பு ஐந்து டிகிரி அதிகரிக்கும் அல்லது குறையும். Rotate_x இன் மதிப்பு அதே வழியில் மாறும், ஆனால் இந்த முறை மேல் மற்றும் கீழ் அம்பு விசைகளை அழுத்துவதன் மூலம்.
    • வெற்றிட சிறப்பு விசைகள் (int விசை, int x, int y) {// வலது அம்பு - சுழற்சியை 5 டிகிரி அதிகரித்தால் // இடது அம்பு - சுழற்சியை 5 டிகிரி குறைக்கவும் (key == GLUT_KEY_LEFT) சுழலும்_y - = 5; இல்லையெனில் (key == GLUT_KEY_UP) rotate_x + = 5; இல்லையெனில் (கீ == GLUT_KEY_DOWN) rotate_x - = 5; // ஸ்கிரீன் ரெஃப்ரெஷ் க்ளூட் போஸ்ட் ரெடிஸ்ப்ளே (); }

  2. 2 GLRotate () சேர்க்கவும். பொருளைச் சுழற்ற அனுமதிக்கும் ஒரு வரியைச் சேர்ப்பதே நாம் கடைசியாகச் செய்வோம். செயல்பாட்டிற்குத் திரும்பு காட்சி () மற்றும் முன் பக்கத்தின் விளக்கத்திற்கு முன் சேர்க்கவும்:

      // ரீசெட் ட்ரான்ஸ்ஃபார்ம்ஸ் க்ளோலோட் அடையாளம் (); // பயனர் மாறும்போது சுழற்று மதிப்புகள் சுழற்று glRotatef (rotate_y, 0.0, 1.0, 0.0); // பல வண்ணப் பக்கம் - முன் ....

    • தொடரியல் என்பதை தயவுசெய்து கவனிக்கவும் glRotatef ()இது glColor3f () மற்றும் glVertex3f () ஆகியவற்றின் தொடரியல் போன்றது, ஆனால் எப்போதும் நான்கு அளவுருக்கள் தேவைப்படுகிறது. முதல் டிகிரி சுழற்சி கோணம். அடுத்த மூன்று அச்சுகள் x, y, z வரிசையில் சுழற்சி நடைபெறுகிறது. இப்போதைக்கு, கனசதுரத்தை x மற்றும் y ஆகிய இரண்டு அச்சுகளுடன் சுழற்ற வேண்டும்.
    • நிரலில் நாம் வரையறுக்கும் அனைத்து மாற்றங்களுக்கும் ஒரே மாதிரியான கோடுகள் தேவை. அடிப்படையில், x- அச்சில் ஒரு பொருளின் சுழற்சியை சுழற்சி_ x இன் மதிப்பின் மாற்றமாகவும், y- அச்சில் சுழலும் சுழற்சியின் மதிப்பில் ஏற்படும் மாற்றமாகவும் நாங்கள் குறிப்பிடுகிறோம். இருப்பினும், ஓபன்ஜிஎல் எல்லாவற்றையும் ஒரு உருமாற்ற மேட்ரிக்ஸில் தொகுக்கும். ஒவ்வொரு முறையும் நீங்கள் காட்சிக்கு அழைக்கும் போது, ​​நீங்கள் ஒரு உருமாற்ற மேட்ரிக்ஸை உருவாக்குவீர்கள், மற்றும் glLoadIdentity () ஒவ்வொரு முறையும் ஒரு புதிய மேட்ரிக்ஸுடன் தொடங்க உங்களை அனுமதிக்கும்.
    • நீங்கள் பயன்படுத்திய பிற மாற்றும் செயல்பாடுகள் glTranslatef () மற்றும் glScalef () ஆகும். பொருளை மறுஅளவிடுவதற்கும் அளவிடுவதற்கும் x, y மற்றும் z மதிப்புகள் மட்டுமே தேவைப்படுகின்றன என்பதைத் தவிர அவை glRotatef () க்கு ஒத்தவை.
    • மூன்று உருமாற்றங்களும் ஒரு பொருளுக்குப் பயன்படுத்தப்படும்போது அனைத்தும் சரியாகக் காண்பிக்க, நீங்கள் சரியான வரிசையில் மாற்றங்களை அமைக்க வேண்டும், அதாவது glTranslate, glRotate, glScale - மற்றும் ஒருபோதும் இல்லை. ஓப்பன்ஜிஎல் நிரலை கீழே இருந்து மேலே படிப்பதன் மூலம் பொருளை மாற்றுகிறது. இதை நன்கு புரிந்துகொள்ள, 1x1x1 கனசதுரமானது அனைத்து மாற்றங்களையும் OpenGL காட்டும் வரிசையில் (மேலிருந்து கீழாக) பயன்படுத்தினால் எப்படி இருக்கும் என்று கற்பனை செய்து பாருங்கள், பின்னர் OpenGL கனசதுரத்தை கீழே இருந்து மேலே படிப்பதன் மூலம் எப்படி செயல்படும் என்று சிந்தியுங்கள்.
  3. 3 க்யூப்ஸை x மற்றும் y திசைகளில் இரண்டு முறை அளவிட, கியூப்பை y அச்சில் 180 டிகிரி சுழற்றவும், க்யூப் 0.1 ஐ x அச்சில் நகர்த்தவும் பின்வரும் கட்டளைகளைச் சேர்க்கவும். முன்னர் கொடுக்கப்பட்ட glRotate () கட்டளைகள் உட்பட அனைத்து தொடர்புடைய கட்டளைகளும் சரியான வரிசையில் இருப்பதை உறுதி செய்யவும். நீங்கள் தவறு செய்ய பயப்படுகிறீர்கள் என்றால், கட்டுரையின் முடிவில் நிரலின் இறுதி பதிப்பைப் பார்க்கவும்.

      // மேலும் உருமாற்றங்கள் glTranslatef (0.1, 0.0, 0.0); glRotatef (180, 0.0, 1.0, 0.0); glScalef (2.0, 2.0, 0.0);

  4. 4 குறியீட்டை தொகுத்து இயக்கவும். நீங்கள் gcc ஐ உங்கள் தொகுப்பாளராக பயன்படுத்துகிறீர்கள் என்று வைத்துக்கொள்வோம், எனவே பின்வரும் கட்டளைகளை உங்கள் முனையத்தில் உள்ளிடவும்:

      லினக்ஸில்: gcc cube.c -o cube -lglut -lGL ./ mycube on Mac: gcc -o foo foo.c -framework GLUT -framework OpenGL ./ mycube on Windows: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32 ./ mycube

  5. 5 இறுதி குறியீட்டைச் சரிபார்க்கவும். கட்டுரையின் ஆசிரியரால் உருவாக்கப்பட்ட இறுதி குறியீடு இங்கே உள்ளது, இது கருத்துக்களை மொழிபெயர்க்காது.

      // // கோப்பு: mycube.c // ஆசிரியர்: மாட் டெய்ஸ்லி // உருவாக்கப்பட்டது: 4/25/2012 // திட்டம்: OpenGL இல் ஒரு கியூப்பை உருவாக்குவதற்கான மூல குறியீடு // விளக்கம்: ஒரு OpenGL சாளரத்தை உருவாக்கி ஒரு 3D க்யூப்/ / அம்பு விசைகளைப் பயன்படுத்தி பயனர் சுழற்றலாம் // // கட்டுப்பாடுகள்: இடது அம்பு -இடதுபுறம் சுழற்று -------------------------------------------------------- -// அடங்கும் // -------------------------------------------- -------------- #stdio.h> #stdarg.h> #சேர்க்கவும் கணிதம். GL / glut.h> #endif // ----------------------------------------- ------------------ // செயல்பாட்டு முன்மாதிரிகள் // ------------------------- ------------------------------- வெற்றிட காட்சி (); வெற்றிட சிறப்பு விசைகள் (); // ---------------------------------------------------- ---------- // உலகளாவிய மாறிகள் // -------------------------------------- ------------------------ இரட்டை சுழற்று_ y = 0; இரட்டை சுழற்று_எக்ஸ் = 0; // ------------------------------------------------ ---------- // காட்சி () அழைப்பு செயல்பாடு // ---------------------------------- --------------------------- வெற்றிட காட்சி () // தெளிவான திரை மற்றும் Z- இடையக glClear (GL_COLOR_BUFFER_BIT // ------ -------------------------------------------------------- -// ஸ்பெஷல் கீஸ் () கால்பேக் செயல்பாடு // -------------------------------------------- ------------------ வெற்றி விசேஷ விசைகள் (int key, int x, int y) {// வலது அம்பு-சுழற்சியை 5 டிகிரி அதிகரிக்கவும் = 5; // இடது அம்பு - சுழற்சியை 5 டிகிரி குறைக்கவும் 5; // காட்சி புதுப்பிப்பு கோரிக்கையை க்ளட் போஸ்ட் ரெடிஸ்ப்ளே ();} // ---------------------------------------- ---------------------- // முக்கிய () செயல்பாடு // ------------------- -------------------------------------- int பிரதான (int argc, char * argv [] GLUT_RGB