OpenGL -da kubni qanday qilish kerak (rasmlar bilan)

Mundarija:

OpenGL -da kubni qanday qilish kerak (rasmlar bilan)
OpenGL -da kubni qanday qilish kerak (rasmlar bilan)

Video: OpenGL -da kubni qanday qilish kerak (rasmlar bilan)

Video: OpenGL -da kubni qanday qilish kerak (rasmlar bilan)
Video: Noutbook klaviaturasini yoqish #shorts 2024, Aprel
Anonim

OpenGL-bu oddiy ibtidoiylardan murakkab uch o'lchovli sahnalarni chizish uchun ishlatiladigan kuchli 3D dasturlash vositasi. Ushbu maqola sizga uchta o'lchamda ko'rish uchun aylantira oladigan oddiy kubni qanday chizishni o'rgatadi!

Ushbu loyiha uchun sizga kod muharriri va C dasturlash bo'yicha ba'zi bilimlar kerak bo'ladi.

Qadamlar

3dan 1 -qism: Dastlabki sozlash

1994315 1 1
1994315 1 1

Qadam 1. OpenGL -ni o'rnating. Boshlash uchun OpenGL -ni tizimingizga o'rnatishni boshlang

Agar sizda allaqachon OpenGL, shuningdek mos keluvchi C kompilyatori o'rnatilgan bo'lsa, siz bu bosqichni o'tkazib yuborib, keyingisiga o'tishingiz mumkin.

1994315 2 1
1994315 2 1

Qadam 2. Hujjatni yarating

Sevimli kod muharririda yangi fayl yarating va uni mycube.c sifatida saqlang

1994315 3 1
1994315 3 1

3 -qadam. #O'z ichiga oladi

Bu sizning dasturingiz uchun zarur bo'lgan asosiy elementlar. Shuni tushunish kerakki, har xil operatsion tizimlar uchun zarur bo'lgan har xil komponentlar mavjud. Sizning dasturingiz ko'p qirrali va har qanday foydalanuvchi uchun ishlashi uchun bularning barchasini kiritganingizga ishonch hosil qiling.

    // Tarkibiga #qo'shish #qo'shish #qo'shish #belgilash GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #se #include #endif

1994315 4 1
1994315 4 1

Qadam 4. Funktsiya prototiplarini va global o'zgaruvchilarni qo'shing

Sizning keyingi qadamingiz ba'zi funktsional prototiplarni e'lon qilishdir.

    // Funktsiya prototiplari void displeyi (); void specialKeys (); // Global o'zgaruvchilar double rotate_y = 0; ikki marta aylantirish_x = 0;

1994315 5 1
1994315 5 1

5 -qadam. Main () funktsiyasini o'rnating

    int main (int argc, char* argv ) {// GLUTni ishga tushiring va glutInit foydalanuvchi parametrlarini qayta ishlang (& argc, argv); // Z-buferli glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) bilan ikki buferli haqiqiy rangli oynani so'rash;

  • Bu bayonot sizning muhitingizni o'rnatadi. OpenGL dasturlarini yozishda eslash kerak bo'lgan narsa shundaki, siz hamma narsani so'rashingiz kerak. Bu sizning dasturingiz qanday ishlashini va kerakli funktsiyalarni olish uchun nimalarni kiritish kerakligini yaxshiroq tushunishingizni talab qiladi. Bu qatorda siz displeyni ikki buferli, RGB rangli va Z-tamponli o'rnatasiz.
  • Ikki marta buferlash tasvirlar ekranga qanday tortilishi tufayli yuzaga keladigan muammoni bartaraf etish uchun grafik dasturlarda qo'llaniladigan texnikadir. Har safar sahnani qayta chizganingizda, displey avval o'chirilishi kerak, so'ngra yangi ma'lumotlar chiziladi. Ikki marta buferlashsiz siz miltillovchi effektni ko'rasiz, chunki ekran o'chiriladi va qayta -qayta chiziladi.
  • Bu muammo chizish uchun ikkinchi buferni qo'shish orqali hal qilinadi. Bu usul yordamida tasvir birinchi buferga tortiladi va sizga bufer ko'rsatiladi. Keyingi ramka ikkinchi buferga tortiladi va bu tugagach, ikkita bufer joy almashadi. Siz darhol ikkinchi buferni ko'rasiz, lekin bizdan yashiringan holda, birinchi bufer o'chiriladi va uchinchi ramka bilan qayta chiziladi, u tugagandan so'ng almashtiriladi.
  • Shuningdek, siz uni yoqishni xohlaysiz RGB rangi tizim sizning oynangizda.
  • Z-buferlash Siz xohlagan 3D effektlarini qanday olasiz. OpenGL x, y va z o'qlari bo'lgan uch o'lchovli koordinatalar tizimidan foydalanadi. Ob'ekt sizga yaqinroq bo'lishini ta'minlash uchun uning z o'qidagi o'rni ko'tariladi, lekin uning uzoqroq ko'rinishini ta'minlash uchun uning z o'qidagi o'rni kamayadi.
1994315 6 1
1994315 6 1

Qadam 6. Oynani yarating

Keyingi qadam - bu oynani yarating uning ichida siz kubni chizasiz. Bu darslikda oyna "Ajoyib kub" deb nomlangan.

    // Deraza yaratish glutCreateWindow ("Ajoyib kub");

1994315 7 1
1994315 7 1

Qadam 7. Chuqurlik testini yoqing

OpenGL qat'iy tildir, chunki u hech qanday maxsus xususiyatlar yoqilmagan deb o'ylamaydi. Sizning dasturingiz Z-bufer yordamida 3 o'lchamda to'g'ri ko'rsatilishi uchun sizga kerak chuqurlik sinovini yoqish. OpenGL-ni o'rganishda davom etayotganingizda, siz yoqishingiz kerak bo'lgan ko'plab xususiyatlarni kashf etasiz, shu jumladan yoritish, tekstura, burilish va boshqalar.

    // Z-bufer chuqurlik sinovini yoqish glEnable (GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

Qadam 8. Qayta qo'ng'iroq qilish funktsiyalarini qo'shing

Siz ilgari prototiplarni yozgan qayta qo'ng'iroq qilish funktsiyalari. Har safar asosiy pastadir orqali bu funktsiyalar chaqiriladi. Ko'rsatish funktsiyasi oldingi qo'ng'iroqdan beri o'zgaruvchilar o'zgarishiga qarab sahnani qayta chizadi. SpecialKeys funktsiyasi bizga dastur bilan ishlashga imkon beradi.

    // Qayta qo'ng'iroq qilish funktsiyalari glutDisplayFunc (ko'rsatish); glutSpecialFunc (maxsus kalitlar);

1994315 9 1
1994315 9 1

Qadam 9. MainLoop -ni ishga tushiring

Animatsiya va foydalanuvchilar bilan muloqot qilish uchun dasturni yopmaguningizcha, bu asosiy funktsiyani eslab qoladi.

    // glutMainLoop () hodisalari uchun boshqaruvni GLUT -ga o'tkazing; // OS ga qaytish 0 ga qaytish; }

3dan 2 qism: Displey () funktsiyasi

1994315 10 1
1994315 10 1

Qadam 1. Bu funksiyaning maqsadini tushuning

Kubni chizish bo'yicha barcha ishlar shu funksiyada bajariladi. Sizning kubingizning umumiy g'oyasi, barcha olti tomonni birma -bir chizish va ularni kerakli joyga joylashtirishdir.

Kontseptual ravishda, har bir tomon to'rt burchakni aniqlash va OpenGL -ga chiziqlarni ulash va uni siz belgilagan rang bilan to'ldirish orqali chiziladi. Buni amalga oshirish uchun qadamlar quyida keltirilgan

1994315 11 1
1994315 11 1

2 -qadam. GlClear () qo'shing

Ushbu funktsiyani bajarishingiz kerak bo'lgan birinchi qadam bu rang va Z buferini tozalang. Bu qadamlarsiz eski chizmalar hali ham yangi chizmalar ostida ko'rinishi mumkin va chizilgan narsalar ekranda to'g'ri joylashmagan bo'lardi.

    void display () {// Ekranni tozalash va Z-tampon glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

1994315 12 1
1994315 12 1

Qadam 3. glBegin () va glEnd () qo'shing

OpenGL ob'ektlarni turli xil ko'pburchaklarning kombinatsiyasi sifatida belgilaydi. Dan foydalanib glBegin () buyruq berib, siz shaklni chizadigan qalamni samarali qo'yasiz. Qalamni yuqoriga ko'tarib, yangi shaklni boshlash uchun siz uni ishlatishingiz kerak glEnd () buyruq. Ushbu qo'llanmada siz kubning har bir tomonini chizish uchun GL_POLYGON -dan foydalanasiz, lekin boshqa shakllarni yaratish uchun GL_LINE, GL_QUAD yoki GL_TRIANGLE kabi boshqa parametr variantlaridan foydalanish mumkin.

  • Bu erda siz kubning old qismidan boshlaysiz. Keyinchalik siz 6 tomonga rang qo'shasiz.
  • // Ko'p rangli tomon - FRONT glBegin (GL_POLYGON); // Keyingi qadamda vertikalar qo'shiladi glEnd ();

1994315 13 1
1994315 13 1

Qadam 4. glVertex3f () qo'shing

Ko'pburchakni boshlashni xohlaganingizni aytganingizdan so'ng, buni qilishingiz kerak tepaliklarni aniqlang ob'ekt haqida. glVertex sizning ob'ektingiz bilan nima qilishni xohlayotganingizga qarab bir nechta shaklga ega.

  • Birinchisi, siz qancha o'lchamda ishlayotganingiz. GlVertex3f -dagi 3 -rasmda siz 3 o'lchovda chizilganligingiz aytilgan. Bundan tashqari, 2 yoki 4 o'lchamda ishlash mumkin. GlVertex3f dagi yuqoridagi f siz o'zgaruvchan nuqta raqamlari bilan ishlayotganingizni bildiradi. Bundan tashqari, qisqa, butun sonlar yoki dubllardan foydalanishingiz mumkin.
  • E'tibor bering, bu nuqtalar a soat sohasi farqli o'laroq uslub Hozirgi vaqtda bu unchalik muhim emas, lekin siz yorug'lik, tekstura va burilish bilan ishlashni boshlaganingizda, bu nihoyatda muhim bo'lib qoladi, shuning uchun o'z fikrlaringizni soat sohasi farqli o'laroq aniqlab olishga odatlaning.
  • GlBegin () va glEnd () qatorlari orasidagi tepaliklarni qo'shing.
  • // Ko'p rangli tomon - FRONT glBegin (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); // P4 glEnd ();

1994315 14 1
1994315 14 1

5 -qadam. GlColor3f () qo'shing

glColor glVertex -ga o'xshash tarzda ishlaydi. Siz nuqtalarni qisqa, tamsayı, dubl yoki suzuvchi sifatida belgilashingiz mumkin. Har bir rang 0 dan 1 gacha qiymatga ega. Hamma 0 -lar nuqta qora, 1 -lar esa oq rangga aylantiradi. GlColor3f () dagi 3 alfa kanali bo'lmagan RGB rang tizimini bildiradi. Rang alfa uning shaffofligini belgilaydi. Alfa darajasini o'zgartirish uchun glColor4f () dan foydalaning, oxirgi parametr shaffof bo'lmagan uchun 0 dan 1 gacha.

  • GlColor3f () ni chaqirganingizda, shu nuqtadan chizilgan har bir tepalik shu rangda bo'ladi. Shuning uchun, agar siz to'rtta tepalikning qizil bo'lishini xohlasangiz, glVertex3f () buyruqlaridan oldin rangni xohlagan vaqtda belgilang va barcha tepaliklar qizil bo'ladi.
  • Old tomondan har bir tepalik uchun yangi rangni qanday aniqlash kerakligi ko'rsatilgan. Buni qilganingizda, OpenGL ranglarining qiziqarli xususiyatini ko'rishingiz mumkin. Ko'pburchakning har bir tepasi o'ziga xos rangga ega bo'lgani uchun OpenGL avtomatik ravishda ranglarni aralashtirib yuboradi! Keyingi qadam bir xil rangdagi to'rtta tepalikni qanday belgilashni ko'rsatadi.
  • // Ko'p rangli tomon - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0,5, -0,5, -0,5); // P1 - qizil glColor3f (0,0, 1,0, 0,0); glVertex3f (0,5, 0,5, -0,5); // P2 - yashil glColor3f (0,0, 0,0, 1,0); glVertex3f (-0.5, 0.5, -0.5); // P3 - ko'k glColor3f (1.0, 0.0, 1.0); glVertex3f (-0,5, -0,5, -0,5); // P4 - binafsha rangli glEnd ();

1994315 15 1
1994315 15 1

Qadam 6. Boshqa tomonlarini ushlang

Kubning qolgan besh tomoni uchun har bir tepalikning joylashuvi qanday bo'lishini aniqlang, lekin soddaligi uchun ular siz uchun hisoblab chiqilgan. yakuniy ko'rsatish () funktsiyasi pastda

    // Oq tomon - BACK glBegin (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); glEnd (); // Binafsha tomon - O'ng glBegin (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); glEnd (); // Yashil tomon - LEFT glBegin (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); glEnd (); // Moviy tomon - TOP glBegin (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); glEnd (); // Qizil tomon - BOTTOM glBegin (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); glEnd (); glFlush (); glutSwapBuffers (); }

  • Bundan tashqari, biz ushbu funktsiya uchun oxirgi ikkita kod qatorini qo'shmoqchimiz. Bular glFlush ();

    va glutSwapBuffers ();

    Bu bizga ilgari bilib olgan ikki tomonlama bufer effektini beradi.

3 -dan 3 -qism: Foydalanuvchilarning o'zaro ta'siri

1994315 16 1
1994315 16 1

Qadam 1. specialKeys () ni qo'shing

Siz deyarli tayyorsiz, lekin hozircha siz kub chizishingiz mumkin, lekin uni aylantirishning iloji yo'q. Buni amalga oshirish uchun, siz maxsus kalitlarni yaratish () O'q tugmachalarini bosish va kubni aylantirish imkonini beradigan funksiya!

  • Aynan shuning uchun siz global o'zgaruvchilarni rotate_x va rotate_y deb e'lon qildingiz. O'ng va chap o'q tugmachalarini bosganingizda, rotate_y 5 gradusga oshadi yoki kamayadi. Xuddi shunday, yuqoriga va pastga o'q tugmalarini bosganingizda, rotate_x mos ravishda o'zgaradi.
  • void specialKeys (int key, int x, int y) {// O'ng o'q - aylanishni 5 darajaga oshirish, agar (key == GLUT_KEY_RIGHT) rotate_y += 5; // Chap o'q - aylanishni 5 darajaga kamaytiring, agar (key == GLUT_KEY_LEFT) rotate_y - = 5; aks holda (key == GLUT_KEY_UP) rotate_x += 5; aks holda (key == GLUT_KEY_DOWN) rotate_x -= 5; // glutPostRedisplay displeyini yangilashni so'rash (); }

1994315 17 1
1994315 17 1

Qadam 2. glRotate () qo'shing

Sizning oxirgi so'zingiz - bu sizning ob'ektingizni aylantiradigan bayonotni qo'shish. Display () funktsiyasiga qayting va FRONTdan oldin quyidagi qatorlarni qo'shing:

    // glLoadIdentity () konvertatsiyasini tiklash; // Foydalanuvchi rotate_x va rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0) o'zgarganda aylantirish; glRotatef (rotate_y, 0.0, 1.0, 0.0); // Ko'p rangli tomon - OLD ….

  • Avval sintaksisga e'tibor bering glRotatef () glColor3f () va glVertex3f () ga o'xshaydi, lekin har doim 4 parametrni talab qiladi. Birinchi parametr - bu qo'llaniladigan aylanish darajasi. Keyingi uchta parametr qaysi o'qning aylanishini aniqlaydi, birinchisi x o'qi, ikkinchisi y o'qi, uchinchisi z o'qi. Hozirda siz faqat x va y o'qlari atrofida aylanishingiz kerak.
  • Sizning dasturingizda yozadigan barcha o'zgartirishlar shunga o'xshash satrlarni talab qiladi. Kontseptual tarzda, siz ob'ektni x o'qi atrofida rotate_x tomonidan belgilangan miqdorga aylantirish va keyin y o'qi atrofida rotate_y bilan aylantirish deb o'ylashingiz mumkin. Biroq, OpenGL bu bayonotlarning barchasini bitta matritsali transformatsiyaga birlashtiradi. Har safar displey funktsiyasini chaqirganingizda, siz transformatsiya matritsasini tuzasiz va glLoadIdentity () har bir o'tishda siz yangi matritsadan boshlashingizga ishontiradi.
  • Siz qo'llashingiz mumkin bo'lgan boshqa o'zgartirish funktsiyalari - glTranslatef () va glScalef (). Bu funktsiyalar glRotatef () ga o'xshaydi, bundan mustasno, ular ob'ektni tarjima qilish yoki kattalashtirish uchun faqat 3 parametrni, x, y va z miqdorlarini oladi.
  • Uch ob'ektni bitta ob'ektga qo'llashda to'g'ri effekt olish uchun ularni to'g'ri tartibda qo'llash kerak. Har doim ularni tartibda yozing glTranslate, glRotate, keyin glScale. OpenGL asosan o'zgarishlarni pastdan yuqoriga qarab qo'llaydi. Buni tushunish uchun, agar OpenGL ularni yuqoridan pastgacha qo'llagan bo'lsa va OpenGL pastdan yuqoriga qo'llasa, 1x1x1 o'lchamdagi oddiy kub qanday o'zgarishini tasavvur qiling.
1994315 18 1
1994315 18 1

Qadam 3. Kubni x o'qi bo'ylab 2 ga, y o'qi bo'ylab 2 ga, kubni y o'qi atrofida 180 gradusga aylantirish va x o'qi bo'ylab 0,1 ga tarjima qilish uchun quyidagi buyruqlarni qo'shing

Yuqorida aytib o'tilganidek, avvalgi glRotate () buyruqlarini to'g'ri tartibda joylashtiring. (Agar ishonchingiz komil bo'lmasa, bu dars oxiridagi oxirgi kodda bajariladi.)

    // Boshqa o'zgarishlar glTranslatef (0.1, 0.0, 0.0); glRotatef (180, 0,0, 1,0, 0,0); glScalef (2.0, 2.0, 0.0);

1994315 19 1
1994315 19 1

Qadam 4. Kodingizni kompilyatsiya qiling va ishga tushiring

Agar siz gcc -ni kompilyator sifatida ishlatayotgan bo'lsangiz, dasturni kompilyatsiya qilish va tekshirish uchun terminaldan ushbu buyruqlarni bajaring.

    Linuxda: gcc cube.c -o cube -lglut -lGL./ mycube Mac -da: gcc -o foo foo.c -framework GLUT -framework OpenGL./ mycube Windowsda: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32./ mycube

1994315 20 1
1994315 20 1

Qadam 5. To'liq kodingizni tekshiring

Bu shunday bo'lishi kerak:

    // // Fayl: mycube.c // Muallif: Matt Daisley // Yaratilgan: 25.04.2012 // Loyiha: OpenGL -da kub yaratish uchun manba kodi // Tavsif: OpenGL oynasini yaratadi va 3D kubini chizadi/ / Foydalanuvchining o'q tugmachalari yordamida aylanishi // -------------------------------------------------- -// o'z ichiga oladi // ------------------------------------------- --------------- #qo'shish #qo'shish #qo'shish #ta'riflash GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #se #include #endif // ------------- --------------------------------------------- // Funktsiya prototiplari / / ------------------------------------------------- --------- bo'sh displey (); void specialKeys (); // ------------------------------------------------ ---------- // Global o'zgaruvchilar // ---------------------------------- ------------------------ ikki marta aylantirish_y = 0; ikki marta aylantirish_x = 0; // ------------------------------------------------ ---------- // display () Qayta qo'ng'iroq qilish funktsiyasi // ------------------------------- -------------------------- void displey () {// Tiniq ekran va Z-tampon glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glLoadIdentity () konvertatsiyasini tiklash; // Boshqa o'zgarishlar // glTranslatef (0.1, 0.0, 0.0); // Kiritilmagan // glRotatef (180, 0.0, 1.0, 0.0); // Kiritilmagan // Foydalanuvchi rotate_x va rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0) o'zgarganda aylantirish; glRotatef (rotate_y, 0.0, 1.0, 0.0); // Boshqa o'zgarishlar // glScalef (2.0, 2.0, 0.0); // Kiritilmagan // Ko'p rangli tomon - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0,5, -0,5, -0,5); // P1 - qizil glColor3f (0,0, 1,0, 0,0); glVertex3f (0,5, 0,5, -0,5); // P2 - yashil glColor3f (0,0, 0,0, 1,0); glVertex3f (-0.5, 0.5, -0.5); // P3 - ko'k glColor3f (1.0, 0.0, 1.0); glVertex3f (-0,5, -0,5, -0,5); // P4 - binafsha rangli glEnd (); // Oq tomon - BACK glBegin (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); glEnd (); // Binafsha tomon - O'ng glBegin (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); glEnd (); // Yashil tomon - LEFT glBegin (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); glEnd (); // Moviy tomon - TOP glBegin (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); glEnd (); // Qizil tomon - BOTTOM glBegin (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); glEnd (); glFlush (); glutSwapBuffers (); } // ----------------------------------------------- ----------- // specialKeys () qayta qo'ng'iroq qilish funktsiyasi // ------------------------------ ---------------------------- void specialKeys (int key, int x, int y) {// O'ng o'q-aylanishni 5 ga oshirish daraja agar (kalit == GLUT_KEY_RIGHT) rotate_y += 5; // Chap o'q - aylanishni 5 darajaga kamaytiring, agar (key == GLUT_KEY_LEFT) rotate_y - = 5; aks holda (key == GLUT_KEY_UP) rotate_x += 5; aks holda (key == GLUT_KEY_DOWN) rotate_x -= 5; // glutPostRedisplay () displeyini yangilashni so'rash; } // ----------------------------------------------- ----------- // main () funktsiyasi // ------------------------------- --------------------------- int main (int argc, char* argv ) {// GLUTni ishga tushiring va glutInit foydalanuvchi parametrlarini qayta ishlang (& argc, argv); // Z-buferli glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) bilan ikki buferli haqiqiy rangli oynani so'rash; // glutCreateWindow oynasini yarating ("Ajoyib kub"); // Z-bufer chuqurlik sinovini yoqish glEnable (GL_DEPTH_TEST); // Qayta qo'ng'iroq qilish funktsiyalari glutDisplayFunc (ko'rsatish); glutSpecialFunc (maxsus kalitlar); // glutMainLoop () hodisalari uchun boshqaruvni GLUT -ga o'tkazing; // OS ga qaytish 0 ga qaytish; }

Tavsiya: