Kaip sukurti kubą „OpenGL“(su nuotraukomis)

Turinys:

Kaip sukurti kubą „OpenGL“(su nuotraukomis)
Kaip sukurti kubą „OpenGL“(su nuotraukomis)

Video: Kaip sukurti kubą „OpenGL“(su nuotraukomis)

Video: Kaip sukurti kubą „OpenGL“(su nuotraukomis)
Video: How To Install Windows XP In Virtual Box - 2023 2024, Balandis
Anonim

„OpenGL“yra galingas 3D programavimo įrankis, naudojamas sudėtingoms trimatėms scenoms piešti iš paprastų primityvų. Šis straipsnis išmokys jus piešti paprastą kubą, kurį galėsite sukdami peržiūrėti trimis matmenimis!

Šiam projektui jums reikės kodų redaktoriaus ir tam tikrų žinių apie C programavimą.

Žingsniai

1 dalis iš 3: Pradinė sąranka

1994315 1 1
1994315 1 1

1 veiksmas. „OpenGL“diegimas Norėdami pradėti, atlikite šiuos veiksmus, kad įdiegtumėte „OpenGL“savo sistemoje

Jei jau turite „OpenGL“ir suderinamą C kompiliatorių, galite praleisti šį veiksmą ir pereiti prie kito.

1994315 2 1
1994315 2 1

Žingsnis 2. Sukurkite dokumentą

Sukurkite naują failą savo mėgstamiausiame kodo redaktoriuje ir išsaugokite jį kaip mycube.c

1994315 3 1
1994315 3 1

3 veiksmas. Pridėkite #Include

Tai yra pagrindiniai dalykai, kurių jums reikės jūsų programai. Svarbu suvokti, kad skirtingoms operacinėms sistemoms iš tikrųjų reikalingi skirtingi priedai. Būtinai įtraukite visa tai, kad jūsų programa būtų universali ir galėtų veikti bet kuriam vartotojui.

    // Apima #įtraukimą #įtraukimą #įtraukimą #define GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #else #include #endif

1994315 4 1
1994315 4 1

Žingsnis 4. Pridėkite funkcijų prototipus ir globalius kintamuosius

Kitas žingsnis yra paskelbti kai kuriuos funkcijų prototipus.

    // Funkcija Prototipai void display (); void specialKeys (); // Visuotiniai kintamieji dvigubas rotate_y = 0; dvigubas sukimas_x = 0;

1994315 5 1
1994315 5 1

Žingsnis 5. Nustatykite pagrindinę () funkciją

    int main (int argc, char* argv ) {// Inicijuoti GLUT ir apdoroti vartotojo parametrus glutInit (& argc, argv); // Prašyti dvigubo buferinio tikrojo spalvų lango su Z-buferiu glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

  • Šis teiginys sukuria jūsų aplinką. Rašant „OpenGL“programas reikia nepamiršti, kad turite paprašyti visko. Tam reikia geriau suprasti, kaip veikia jūsų programa ir ką turite įtraukti, kad gautumėte norimą funkcionalumą. Šioje eilutėje nustatysite ekraną su dvigubu buferiu, RGB spalva ir Z buferiu.
  • Dvigubas buferis yra technika, naudojama grafikos programose, siekiant pašalinti problemą, kuri atsiranda dėl to, kaip vaizdai traukiami prie ekrano. Kiekvieną kartą perbraižant sceną, pirmiausia reikia ištrinti ekraną, tada bus nupiešta nauja informacija. Be dvigubo buferio matysite mirgėjimo efektą, kai ekranas trinamas ir pakartotinai piešiamas.
  • Ši problema išspręsta pridedant antrą buferį, prie kurio reikia piešti. Taikant šį metodą, vaizdas patraukiamas į pirmąjį buferį ir tas buferis parodomas jums. Kitas kadras bus įtrauktas į antrąjį buferį, o kai tai bus padaryta, abu buferiai pasikeis vietomis. Jūs iškart pamatysite antrąjį buferį, tačiau, paslėptas nuo mūsų, pirmasis buferis bus ištrintas ir perbraižytas trečiuoju kadru, kuris bus pakeistas, kai baigsite.
  • Taip pat norite įjungti RGB spalva sistema jūsų lange.
  • Z-buferis taip gausite norimus 3D efektus. „OpenGL“naudoja trimatę koordinačių sistemą su x, y ir z ašimis. Kad objektas būtų arčiau jūsų, jo padėtis z ašyje padidinama, tačiau, kad jis atrodytų toliau, jo padėtis z ašyje sumažėja.
1994315 6 1
1994315 6 1

Žingsnis 6. Sukurkite langą

Kitas žingsnis yra sukurti langą per kurią nupiešite kubą. Šioje pamokoje langas vadinamas „Nuostabus kubas“.

    // Sukurti langą glutCreateWindow ("Nuostabus kubas");

1994315 7 1
1994315 7 1

Žingsnis 7. Įjunkite gylio bandymą

„OpenGL“yra griežta kalba, nes ji nereikalauja jokių specialių funkcijų įjungimo. Kad jūsų programa būtų tinkamai rodoma trimis matmenimis naudojant Z-buferį, į kurį žiūrėjote anksčiau, turite tai padaryti įgalinti gylio bandymą. Toliau tyrinėdami „OpenGL“, atrasite daugybę funkcijų, kurias turėsite įgalinti, įskaitant apšvietimą, tekstūrą, apipjaustymą ir daug daugiau.

    // Įgalinti Z-buferio gylio testą glEnable (GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

Žingsnis 8. Pridėkite atgalinio ryšio funkcijas

Čia yra atgalinio ryšio funkcijos, kurioms anksčiau parašėte prototipus. Kiekvieną kartą per pagrindinę kilpą šios funkcijos bus iškviestos. Rodymo funkcija perbraižo sceną, atsižvelgdama į visus kintamųjų pakeitimus, atliktus po ankstesnio skambučio. SpecialKeys funkcija leidžia mums bendrauti su programa.

    // Atšaukimo funkcijos glutDisplayFunc (ekranas); glutSpecialFunc (specialKeys);

1994315 9 1
1994315 9 1

Žingsnis 9. Paleiskite „MainLoop“

Tai primins pagrindinę funkciją, kol uždarysite programą, kad būtų galima animacija ir vartotojo sąveika.

    // Perduoti valdymą GLUT įvykiams glutMainLoop (); // Grįžti į OS return 0; }

2 dalis iš 3: Ekrano () funkcija

1994315 10 1
1994315 10 1

Žingsnis 1. Supraskite šios funkcijos paskirtį

Visas kubo piešimo darbas bus atliktas naudojant šią funkciją. Pagrindinė jūsų kubo idėja yra piešti visas šešias kraštines atskirai ir sudėti jas į reikiamą vietą.

Konceptualiai kiekviena pusė bus nupiešta apibrėžiant keturis kampus ir leidžiant „OpenGL“sujungti linijas ir užpildyti ją jūsų apibrėžta spalva. Žemiau pateikiami žingsniai, kaip tai padaryti

1994315 11 1
1994315 11 1

2 veiksmas. Pridėkite „glClear“()

Pirmiausia turite atlikti šią funkciją išvalykite spalvą ir Z buferį. Be šių veiksmų senieji brėžiniai vis tiek gali būti matomi po naujais brėžiniais, o nupiešti objektai nebus tinkamoje ekrano vietoje.

    void display () {// Išvalyti ekraną ir Z-buferį glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

1994315 12 1
1994315 12 1

Žingsnis 3. Pridėkite glBegin () ir glEnd ()

„OpenGL“objektus apibrėžia kaip skirtingų daugiakampių derinius. Naudojant glBegin () komandą, jūs veiksmingai padėjote pieštuką, kuris nupieš formą. Norėdami pakelti pieštuką ir pradėti naują formą, turite naudoti glEnd () komandą. Šioje pamokoje jūs naudosite GL_POLYGON, kad pieštumėte kiekvieną kubo pusę, tačiau kitoms formoms kurti galite naudoti kitas parametrų parinktis, pvz., GL_LINE, GL_QUAD arba GL_TRIANGLE.

  • Čia jūs pradėsite nuo savo kubo priekio. Vėliau spalvą pridėsite prie visų 6 pusių.
  • // Daugiaspalvė pusė - FRONT glBegin (GL_POLYGON); // Viršūnės bus pridėtos kitame žingsnyje glEnd ();

1994315 13 1
1994315 13 1

Žingsnis 4. Pridėkite glVertex3f ()

Kai pareiškėte, kad norite pradėti daugiakampį, turite tai padaryti apibrėžti viršūnes nuo objekto. „glVertex“turi keletą formų, priklausomai nuo to, ką norite daryti su savo objektu.

  • Pirmasis yra tai, kiek matmenų dirbate. 3 aukščiau esančiame „glVertex3f“sakoma, kad piešiate 3 matmenis. Taip pat galima dirbti 2 ar 4 matmenimis. F viršuje glVertex3f sako, kad dirbate su slankiojo kablelio skaičiais. Taip pat galite naudoti šortus, sveikus skaičius ar dvigubas.
  • Atkreipkite dėmesį, kad šie taškai yra apibrėžti a prieš laikrodžio rodyklę būdas. Šiuo metu tai nėra labai svarbu, tačiau kai pradėsite dirbti su apšvietimu, tekstūra ir apipjaustymu, tai taps neįtikėtinai svarbu, todėl dabar įpratę apibrėžti savo taškus prieš laikrodžio rodyklę.
  • Pridėti pridėkite viršūnes tarp glBegin () ir glEnd () eilučių.
  • // Daugiaspalvė pusė - 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 veiksmas. Pridėkite glColor3f ()

„glColor“veikia panašiai kaip „glVertex“. Taškus galite apibrėžti kaip šortus, sveikus skaičius, dvigubus arba plūdinius. Kiekvienos spalvos reikšmė yra nuo 0 iki 1. Visi 0 reiškia, kad taškas yra juodas, o visi 1 - tašką. 3 „glColor3f“() reiškia RGB spalvų sistemą be alfa kanalo. Spalvos alfa apibrėžia jos skaidrumą. Norėdami pakeisti alfa lygį, naudokite glColor4f (), o paskutinis parametras turi būti nuo 0 iki 1, kad matinis būtų skaidrus.

  • Kai skambinate glColor3f (), kiekviena viršūnė, nubrėžta nuo to taško, bus tos spalvos. Todėl, jei norite, kad visos keturios viršūnės būtų raudonos, tiesiog nustatykite spalvą bet kuriuo metu prieš „glVertex3f ()“komandas ir visos viršūnės bus raudonos.
  • Žemiau apibrėžta priekinė pusė rodo, kaip kiekvienai viršūnei apibrėžti naują spalvą. Kai tai padarysite, pamatysite įdomią „OpenGL“spalvų savybę. Kadangi kiekviena daugiakampio viršūnė turi savo spalvą, „OpenGL“automatiškai sumaišys spalvas! Kitas žingsnis parodys, kaip priskirti keturias tos pačios spalvos viršūnes.
  • // Daugiaspalvė pusė - FRONT glBegin (GL_POLYGON); glColor3f (1,0, 0,0, 0,0); glVertex3f (0,5, -0,5, -0,5); // P1 yra raudona glColor3f (0.0, 1.0, 0.0); glVertex3f (0,5, 0,5, -0,5); // P2 yra žalia glColor3f (0.0, 0.0, 1.0); glVertex3f (-0,5, 0,5, -0,5); // P3 yra mėlyna glColor3f (1,0, 0,0, 1,0); glVertex3f (-0,5, -0,5, -0,5); // P4 yra violetinė glEnd ();

1994315 15 1
1994315 15 1

Žingsnis 6. Tvarkykite kitas puses

Išsiaiškinkite, kokia bus kiekvienos viršūnės vieta kitose penkiose kubo pusėse, tačiau paprastumo dėlei jie buvo apskaičiuoti jums ir yra įtraukti į galutinio rodymo () funkcija žemiau.

    // Baltoji pusė - 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 (); // Violetinė pusė - DEŠINĖ 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 (); // Žalia pusė - 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 (); // Mėlyna pusė - 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 (); // Raudona pusė - 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 (); }

  • Taip pat norime pridėti dvi paskutines šios funkcijos kodo eilutes. Šitie yra glFlush ();

    ir glutSwapBuffers ();

    kurie suteikia mums dvigubo buferio efektą, apie kurį sužinojote anksčiau.

3 dalis iš 3: Vartotojo interaktyvumas

1994315 16 1
1994315 16 1

1 veiksmas. Pridėkite specialKeys ()

Jūs beveik baigėte, bet šiuo metu galite piešti kubą, bet negalite jo pasukti. Norėdami tai padaryti, jūs padarysite sukurti specialų raktą () funkcija, leidžianti mums paspausti rodyklių klavišus ir pasukti kubą!

  • Dėl šios funkcijos pasaulinius kintamuosius paskelbėte rotate_x ir rotate_y. Paspaudus rodyklių dešinę ir kairę klavišus rotate_y bus padidintas arba sumažintas 5 laipsniais. Panašiai, kai paspausite rodyklių aukštyn ir žemyn klavišus, rotate_x atitinkamai pasikeis.
  • void specialKeys (int klavišas, int x, int y) {// Rodyklė į dešinę - padidinti sukimąsi 5 laipsniais, jei (klavišas == GLUT_KEY_RIGHT) rotate_y += 5; // Rodyklė į kairę - sumažinkite sukimąsi 5 laipsniais, jei (klavišas == GLUT_KEY_LEFT) rotate_y - = 5; else if (raktas == GLUT_KEY_UP) rotate_x += 5; else if (raktas == GLUT_KEY_DOWN) rotate_x -= 5; // Pateikti ekrano atnaujinimo užklausą glutPostRedisplay (); }

1994315 17 1
1994315 17 1

2 veiksmas. Pridėkite „glRotate“()

Paskutinis jūsų teiginys yra pridėti teiginį, kuris pasuks jūsų objektą. Grįžkite prie ekrano () funkcijos ir priešais priekinę pusę pridėkite šias eilutes:

    // Iš naujo nustatyti transformacijas glLoadIdentity (); // Pasukti, kai vartotojas keičia rotate_x ir rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0); glRotatef (pasukti_y, 0,0, 1,0, 0,0); // Daugiaspalvė pusė - PRIEKINIS….

  • Pirmasis pastebėjimas, kad sintaksė glRotatef () yra panašus į glColor3f () ir glVertex3f (), bet visada reikalauja 4 parametrų. Pirmasis parametras yra sukimosi laipsnis. Kiti trys parametrai apibrėžia, apie kurią ašį reikia suktis: pirmoji yra x ašis, antroji - y ašis, o trečioji - z ašis. Šiuo metu jums reikia tik pasukti apie x ir y ašį.
  • Visoms transformacijoms, kurias rašote savo programoje, reikia panašių eilučių. Konceptualiai galite tai įsivaizduoti taip, kad objektą pasukate apie x ašį pagal rotate_x apibrėžtą kiekį, o paskui aplink y ašį - rotate_y. Tačiau „OpenGL“sujungia visus šiuos teiginius į vieną matricos transformaciją. Kiekvieną kartą, kai iškviečiate ekrano funkciją, sukuriate transformacijos matricą ir glLoadIdentity () užtikrina, kad kiekviename pravažiavime pradėsite nuo naujos matricos.
  • Kitos transformacijos funkcijos, kurias galėtumėte taikyti, yra glTranslatef () ir glScalef (). Šios funkcijos yra panašios į „glRotatef“(), išskyrus tai, kad objektui išversti ar pakeisti reikia tik 3 parametrų - x, y ir z.
  • Norėdami gauti teisingą efektą, kai taikote visas tris transformacijas vienam objektui, turite jas pritaikyti teisinga tvarka. Visada rašykite juos eilės tvarka glTranslate, glRotate, tada glScale. „OpenGL“iš esmės taiko transformacijas iš apačios į viršų. Norėdami tai suprasti, pabandykite įsivaizduoti, kaip atrodytų paprastas 1x1x1 kubas su transformacijomis, jei „OpenGL“juos pritaikytų iš viršaus į apačią, o jei „OpenGL“- iš apačios į viršų.
1994315 18 1
1994315 18 1

Žingsnis 3. Pridėkite šias komandas, kad mastelis kubeliu padidėtų 2 išilgai x ašies, 2 išilgai y ašies, pasukite kubą 180 laipsnių aplink y ašį ir išverskite kubą 0,1 išilgai x ašies

Būtinai sutvarkykite šias ir ankstesnes „glRotate“() komandas teisinga tvarka, kaip aprašyta aukščiau. (Jei nesate tikri, tai daroma galutiniame kode pamokos pabaigoje.)

    // Kitos transformacijos 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

Žingsnis 4. Surinkite ir paleiskite savo kodą

Darant prielaidą, kad kompiliatoriumi naudojate gcc, paleiskite šias komandas iš savo terminalo, kad sudarytumėte ir išbandytumėte savo programą.

    „Linux“: gcc cube.c -o kubas -lglut -lGL./ mycube „Mac“: gcc -o foo foo.c -framework GLUT -framework OpenGL./ mycube „Windows“: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32./ mycube

1994315 20 1
1994315 20 1

Žingsnis 5. Patikrinkite visą kodą

Tai turėtų būti taip:

    // Failas: mycube.c // Autorius: Matt Daisley // Sukurta: 2012.04.25 // Projektas: „Open agl“kubo kūrimo šaltinio kodas // Aprašymas: sukuria „OpenGL“langą ir piešia 3D kubą/ / Kad vartotojas galėtų pasukti naudodami rodyklių klavišus // // Valdikliai: rodyklė į kairę -pasukti į kairę // rodyklė į dešinę -pasukti į dešinę // rodyklė aukštyn -pasukti aukštyn // rodyklė žemyn -pasukti žemyn // ------ -------------------------------------------------- -- // Apima // ------------------------------------------- --------------- #include #include #include #define GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #else #include #endif // ------------- -------------------------------------------- // Funkcijų prototipai / / ------------------------------------------------- --------- tuščias ekranas (); void specialKeys (); // ------------------------------------------------ ---------- // Pasauliniai kintamieji // ---------------------------------- ------------------------ dvigubas sukimas_y = 0; dvigubas sukimas_x = 0; // ------------------------------------------------ ---------- // display () atgalinio ryšio funkcija // ------------------------------- --------------------------- void display () {// Clear screen and Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Iš naujo nustatyti transformacijas glLoadIdentity (); // Kitos transformacijos // glTranslatef (0,1, 0,0, 0,0); // neįtrauktas // glRotatef (180, 0,0, 1,0, 0,0); // Neįtraukta // Pasukti, kai vartotojas keičia rotate_x ir rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0); glRotatef (pasukti_y, 0,0, 1,0, 0,0); // Kitos transformacijos // glScalef (2.0, 2.0, 0.0); // Neįtraukta // Daugiaspalvė pusė - FRONT glBegin (GL_POLYGON); glColor3f (1,0, 0,0, 0,0); glVertex3f (0,5, -0,5, -0,5); // P1 yra raudona glColor3f (0.0, 1.0, 0.0); glVertex3f (0,5, 0,5, -0,5); // P2 yra žalia glColor3f (0.0, 0.0, 1.0); glVertex3f (-0,5, 0,5, -0,5); // P3 yra mėlyna glColor3f (1,0, 0,0, 1,0); glVertex3f (-0,5, -0,5, -0,5); // P4 yra violetinė glEnd (); // Baltoji pusė - 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 (); // Violetinė pusė - DEŠINĖ 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 (); // Žalia pusė - 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 (); // Mėlyna pusė - 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 (); // Raudona pusė - 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 () atgalinio ryšio funkcija // ------------------------------ ---------------------------- void specialKeys (int klavišas, int x, int y) {// rodyklė į dešinę-padidinti sukimąsi 5 laipsnis, jei (raktas == GLUT_KEY_RIGHT) pasukti_y += 5; // Rodyklė į kairę - sumažinkite sukimąsi 5 laipsniais, jei (klavišas == GLUT_KEY_LEFT) rotate_y - = 5; else if (raktas == GLUT_KEY_UP) rotate_x += 5; else if (raktas == GLUT_KEY_DOWN) rotate_x -= 5; // Pateikti ekrano atnaujinimo užklausą glutPostRedisplay (); } // ----------------------------------------------- ----------- // pagrindinė () funkcija // ------------------------------- --------------------------- int main (int argc, char* argv ) {// Inicijuoti GLUT ir apdoroti vartotojo parametrus glutInit (& argc, argv); // Prašyti dvigubo buferinio tikrojo spalvų lango su Z-buferiu glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // Sukurti langą glutCreateWindow ("Nuostabus kubas"); // Įgalinti Z-buferio gylio testą glEnable (GL_DEPTH_TEST); // Atšaukimo funkcijos glutDisplayFunc (ekranas); glutSpecialFunc (specialKeys); // Perduoti valdymą GLUT įvykiams glutMainLoop (); // Grįžti į OS return 0; }

Rekomenduojamas: