Paano Gumawa ng Cube sa OpenGL (may Mga Larawan)

Talaan ng mga Nilalaman:

Paano Gumawa ng Cube sa OpenGL (may Mga Larawan)
Paano Gumawa ng Cube sa OpenGL (may Mga Larawan)

Video: Paano Gumawa ng Cube sa OpenGL (may Mga Larawan)

Video: Paano Gumawa ng Cube sa OpenGL (may Mga Larawan)
Video: Paano mag install ng OS Windows 7, 8 clients at server sa virtual box machine | TAGALOG 2024, Abril
Anonim

Ang OpenGL ay isang malakas na tool sa pagprograma ng 3D na ginamit upang gumuhit ng mga kumplikadong three-dimensional na eksena mula sa mga simpleng primitibo. Ituturo sa iyo ng artikulong ito kung paano gumuhit ng isang simpleng kubo na maaari mong iikot upang matingnan sa tatlong sukat!

Para sa proyektong ito kakailanganin mo ang isang code editor at ilang kaalaman sa C program.

Mga hakbang

Bahagi 1 ng 3: Paunang Pag-set up

1994315 1 1
1994315 1 1

Hakbang 1. I-install ang OpenGL Upang simulang sundin ang mga hakbang na ito sa pag-install ng OpenGL sa iyong system

Kung mayroon ka nang OpenGL, pati na rin ang isang katugmang C compiler na naka-install, maaari mong laktawan ang hakbang na ito at pumunta sa susunod.

1994315 2 1
1994315 2 1

Hakbang 2. Lumikha ng dokumento

Lumikha ng isang bagong file sa iyong paboritong editor ng code at i-save ito bilang mycube.c

1994315 3 1
1994315 3 1

Hakbang 3. Magdagdag ng #includes

Ito ang pangunahing mga kasamang kakailanganin mo para sa iyong programa. Mahalagang mapagtanto na mayroong talagang magkakaibang mga kasamang kinakailangan para sa iba't ibang mga operating system. Tiyaking isama ang lahat ng ito upang matiyak na maraming nalalaman ang iyong programa at maaaring tumakbo para sa anumang gumagamit.

    // May kasamang #include #include #include #define GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #else #include #endif

1994315 4 1
1994315 4 1

Hakbang 4. Magdagdag ng mga prototype ng pag-andar at mga variable ng pandaigdigan

Ang iyong susunod na hakbang ay upang ideklara ang ilang mga prototype ng pag-andar.

    // Function Prototypes void display (); walang bisa mga specialKeys (); // Global Variables doble rotate_y = 0; doble paikutin_x = 0;

1994315 5 1
1994315 5 1

Hakbang 5. I-set up ang pangunahing () pagpapaandar

    int main (int argc, char * argv ) {// Initialize GLUT at iproseso ang mga parameter ng gumagamit glutInit (& argc, argv); // Humiling ng dobleng buffered totoong window ng kulay na may Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

  • Ang pahayag na ito ay nagtatakda ng iyong kapaligiran. Ang isang malaking bagay na dapat tandaan kapag nagsusulat ng mga programa ng OpenGL ay dapat mong tanungin ang lahat. Kinakailangan ka nitong magkaroon ng isang higit na pag-unawa sa kung paano gumagana ang iyong programa at kung ano ang kailangan mong isama upang makuha ang pag-andar na nais mo. Sa linyang ito, i-set up mo ang display na may dobleng buffering, kulay RGB, at isang Z-buffer.
  • Dobleng buffering ay isang diskarteng ginamit sa mga programang grapiko upang matanggal ang isang problemang lumitaw dahil sa kung paano iginuhit ang mga imahe sa screen. Sa bawat oras na muling ididraw mo ang eksena, dapat munang mabura ang display pagkatapos ay iguhit ang bagong impormasyon. Nang walang dobleng pag-buffer ay mapapansin mo ang isang kumikislap na epekto habang ang screen ay nabura at muling binabalik ulit.
  • Ang problemang ito ay naayos sa pamamagitan ng pagdaragdag ng isang pangalawang buffer upang gumuhit sa. Sa pamamaraang ito, ang isang imahe ay iginuhit sa unang buffer at ipinakita sa iyo ang buffer na iyon. Ang susunod na frame ay iguguhit sa pangalawang buffer at kapag tapos na iyon, ang dalawang buffer ay lilipat ng mga lugar. Makikita mo kaagad ang pangalawang buffer, ngunit, nakatago sa amin, ang unang buffer ay binubura at muling binabalik ng pangatlong frame na mapapalitan kapag natapos.
  • Nais mo ring paganahin ang Kulay ng RGB system sa iyong window.
  • Z-buffering ay kung paano mo makuha ang 3D effects na gusto mo. Gumagamit ang OpenGL ng isang three dimensional coordinate system na may x, y at z axes. Upang maibigay ang epekto na ang isang bagay ay mas malapit sa iyo ang posisyon nito sa z axis ay nadagdagan, gayunpaman, upang palabasin ito nang malayo ang posisyon nito sa z axis ay nabawasan.
1994315 6 1
1994315 6 1

Hakbang 6. Lumikha ng window

Ang susunod na hakbang ay upang lumikha ng window sa loob nito ay iguhit mo ang kubo. Sa tutorial na ito, ang window ay tinatawag na "Galing Cube".

    // Lumikha ng window glutCreateWindow ("Kahanga-hanga Cube");

1994315 7 1
1994315 7 1

Hakbang 7. Paganahin ang pagsubok sa lalim

Ang OpenGL ay isang mahigpit na wika na hindi nito ipinapalagay ang anumang mga espesyal na tampok na pinagana. Para maipakita nang maayos ang iyong programa sa 3-dimensyon gamit ang Z-buffer na tiningnan mo nang mas maaga, kailangan mo paganahin ang deep-test. Sa pagpapatuloy mong tuklasin ang OpenGL, madidiskubre mo ang maraming mga tampok na kakailanganin mong paganahin kabilang ang pag-iilaw, mga texture, nakaharap sa cull at marami pa.

    // Paganahin ang Z-buffer lalim na pagsubok na glEnable (GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

Hakbang 8. Magdagdag ng mga pagpapaandar sa callback

Narito ang mga function ng callback na isinulat mo ang mga prototype para sa mas maaga. Sa bawat oras sa pamamagitan ng pangunahing loop, ang mga pagpapaandar na ito ay tatawagin. Ang pagpapaandar ng display ay binabago muli ang eksena batay sa anumang mga pagbabago sa mga variable na ginawa mula noong nakaraang tawag. Pinapayagan kami ng pagpapaandar ng specialKeys na makipag-ugnay sa programa.

    // Callback function glutDisplayFunc (display); glutSpesyalFunc (specialKeys);

1994315 9 1
1994315 9 1

Hakbang 9. Simulan ang MainLoop

Maaalala nito ang pangunahing pagpapaandar hanggang sa isara mo ang programa upang payagan ang mga animasyon at pakikipag-ugnay ng gumagamit.

    // Pass control to GLUT para sa mga kaganapan glutMainLoop (); // Return to OS return 0; }

Bahagi 2 ng 3: Ang display () Pag-andar

1994315 10 1
1994315 10 1

Hakbang 1. Maunawaan ang layunin ng pagpapaandar na ito

Ang lahat ng mga gawain ng pagguhit ng iyong kubo ay magagawa sa pagpapaandar na ito. Ang pangkalahatang ideya sa likod ng iyong kubo ay upang iguhit ang lahat ng anim na panig nang isa-isa at ilagay ang mga ito sa naaangkop na posisyon.

Konseptwal, ang bawat panig ay iguguhit sa pamamagitan ng pagtukoy sa apat na sulok at hayaan ang OpenGL na ikonekta ang mga linya at punan ito ng isang kulay na tinukoy mo. Nasa ibaba ang mga hakbang sa paggawa nito

1994315 11 1
1994315 11 1

Hakbang 2. Magdagdag ng glClear ()

Ang unang hakbang na kailangan mong gawin sa pagpapaandar na ito ay upang limasin ang kulay at Z buffer. Kung wala ang mga hakbang na ito, maaaring makita pa rin ang mga lumang guhit sa ilalim ng mga bagong guhit at ang mga bagay na iginuhit ay wala sa tamang lokasyon sa screen.

    walang bisa ang pagpapakita () {// I-clear ang screen at Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

1994315 12 1
1994315 12 1

Hakbang 3. Magdagdag ng glBegin () at glEnd ()

Tinutukoy ng OpenGL ang mga bagay bilang mga kumbinasyon ng iba't ibang mga polygon. Gamit ang glBegin () utos, mabisa mong inilagay ang isang lapis na iguhit ang isang hugis. Upang iangat ang lapis at magsimula ng isang bagong hugis, dapat mong gamitin ang glEnd () utos Sa tutorial na ito gagamit ka ng GL_POLYGON upang iguhit ang bawat panig ng kubo ngunit posible na gumamit ng iba pang mga pagpipilian sa parameter tulad ng GL_LINE, GL_QUAD, o GL_TRIANGLE upang lumikha ng iba pang mga hugis.

  • Dito ka magsisimula sa harap ng iyong cube. Mamaya magdagdag ka ng kulay sa lahat ng 6 na panig.
  • // Multi-kulay na gilid - FRONT glBegin (GL_POLYGON); // Ang mga Vertice ay idaragdag sa susunod na hakbang glEnd ();

1994315 13 1
1994315 13 1

Hakbang 4. Magdagdag ng glVertex3f ()

Kapag naipahayag mo na nais mong simulan ang iyong polygon, kailangan mo tukuyin ang mga vertex ng bagay. Ang glVertex ay may maraming mga form depende sa kung ano ang nais mong gawin sa iyong object.

  • Ang una ay kung gaano karaming mga sukat ka nagtatrabaho. Ang 3 sa itaas sa glVertex3f ay nagsasabi na gumuhit ka sa 3 sukat. Posible ring magtrabaho sa 2 o 4 na sukat. Sinasabi ng f sa itaas sa glVertex3f na nagtatrabaho ka sa mga lumulutang na numero ng point. Maaari mo ring gamitin ang mga shorts, integer o doble.
  • Pansinin na ang mga puntong ito ay tinukoy sa a pakaliwa paraan Hindi ito gaanong mahalaga sa ngayon ngunit kapag nagsimula kang magtrabaho kasama ang pag-iilaw, pagkakayari, at nakaharap sa cull, ito ay magiging hindi kapani-paniwalang kahalagahan kaya ugaliing tukuyin ang iyong mga puntos nang pabaliktad sa ngayon.
  • Idagdag idagdag ang mga vertex sa pagitan ng mga linya ng glBegin () at glEnd ().
  • // Multi-kulay na gilid - 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

Hakbang 5. Magdagdag ng glColor3f ()

Gumagana ang glColor sa isang katulad na paraan sa glVertex. Maaari mong tukuyin ang mga puntos bilang shorts, integer, doble, o float. Ang bawat kulay ay may halaga mula 0 hanggang 1. Lahat ng 0 ay ginagawang itim ang puntong at lahat ng 1 ay magpaputi ng puntong. Ang 3 sa glColor3f () ay tumutukoy sa sistema ng kulay ng RGB na walang alpha channel. Ang alpha ng isang kulay ay tumutukoy sa transparency nito. Upang baguhin ang antas ng alpha, gamitin ang glColor4f () kasama ang huling parameter na isang halagang 0 hanggang 1 para sa opaque hanggang sa transparent.

  • Kapag tumawag ka sa glColor3f () bawat vertex na iginuhit mula sa puntong iyon ay magiging kulay na iyon. Samakatuwid, kung nais mong ang lahat ng apat na mga vertex ay pula, itakda lamang ang kulay minsan anumang oras bago ang mga glVertex3f () na utos at ang lahat ng mga vertex ay magiging pula.
  • Ang Front side na tinukoy sa ibaba ay nagpapakita kung paano tukuyin ang isang bagong kulay para sa bawat vertex. Kapag ginawa mo ito, maaari mong makita ang isang kagiliw-giliw na pag-aari ng mga kulay na OpenGL. Dahil ang bawat tuktok ng polygon ay may sariling kulay, awtomatikong ihalo ng OpenGL ang mga kulay! Ipapakita ng susunod na hakbang kung paano magtalaga ng apat na mga vertex na may parehong kulay.
  • // Multi-kulay na gilid - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 ay pulang glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 ay berde glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 ay asul na glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 ay lila glEnd ();

1994315 15 1
1994315 15 1

Hakbang 6. hawakan ang iba pang mga panig

Gawin kung ano ang lokasyon ng bawat tuktok para sa iba pang limang panig ng kubo ngunit para sa pagiging simple, ang mga ito ay nakalkula para sa iyo at kasama sa pangwakas na pagpapakita () na pagpapaandar sa ibaba.

    // White side - 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 (); // Lila na gilid - RIGHT 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 (); // Green side - Kaliwang 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 (); // Blue side - 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 (); // Red side - 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 (); }

  • Nais din naming idagdag sa dalawang huling linya ng code para sa pagpapaandar na ito. Ito ay glFlush ();

    at glutSwapBuffers ();

    na nagbibigay sa amin ng dobleng buffering effect na natutunan mo tungkol sa mas maaga.

Bahagi 3 ng 3: Pakikipag-ugnay ng User

1994315 16 1
1994315 16 1

Hakbang 1. Magdagdag ng mga specialKeys ()

Halos tapos ka na ngunit sa ngayon, maaari kang gumuhit ng isang kubo ngunit walang paraan upang paikutin ito. Upang gawin ito, gagawin mo lumikha ng isang espesyal naKeys () pagpapaandar upang payagan kaming pindutin ang mga arrow key at paikutin ang kubo!

  • Ang pagpapaandar na ito ay kung bakit mo idineklara ang mga pandaigdigang variable na paikutin_x at paikutin_y. Kapag pinindot mo ang kanan at kaliwang mga arrow key, ang rotate_y ay madagdagan o mababawasan ng 5 degree. Katulad nito, kapag pinindot mo ang pataas at pababang mga arrow key, ang rotate_x ay magbabago nang naaayon.
  • void specialKeys (int key, int x, int y) {// Kanang arrow - dagdagan ang pag-ikot ng 5 degree kung (key == GLUT_KEY_RIGHT) paikutin_y + = 5; // Kaliwang arrow - bawasan ang pag-ikot ng 5 degree iba pa kung (key == GLUT_KEY_LEFT) paikutin_y - = 5; kung hindi man kung (key == GLUT_KEY_UP) paikutin_x + = 5; kung hindi man (key == GLUT_KEY_DOWN) paikutin_x - = 5; // Humiling ng pag-update sa display glutPostRedisplay (); }

1994315 17 1
1994315 17 1

Hakbang 2. Magdagdag ng glRotate ()

Ang iyong huling pahayag ay upang idagdag ang pahayag na paikutin ang iyong object. Bumalik sa display na () function at bago ang harap na FRONT, idagdag ang mga linyang ito:

    // Reset transformations glLoadIdentity (); // Paikutin kapag binago ng gumagamit ang rotate_x at rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0); glRotatef (paikutin_y, 0.0, 1.0, 0.0); // Multi-kulay na gilid - FRONT….

  • Una pansinin na ang syntax ng glRotatef () ay katulad sa glColor3f () at glVertex3f () ngunit laging nangangailangan ng 4 na mga parameter. Ang unang parameter ay ang antas ng pag-ikot na ilalapat. Ang susunod na tatlong mga parameter ay tumutukoy sa aling axis ang paikutin tungkol sa unang pagiging x axis, pangalawa sa y axis, at pangatlo sa z axis. Sa ngayon kailangan mo lamang iikot ang tungkol sa x at y-axis.
  • Ang lahat ng mga pagbabago na isinusulat mo sa iyong programa ay nangangailangan ng mga linya na katulad nito. Konseptwal, maaari mong isipin ito bilang pag-ikot ng iyong object tungkol sa axis ng x sa pamamagitan ng halagang tinukoy ng rotate_x at pagkatapos ay umiikot sa paligid ng y axis ng rotate_y. Gayunpaman, pinagsasama ng OpenGL ang lahat ng mga pahayag na ito sa isang pagbabagong matrix. Sa tuwing tatawagin mo ang pagpapaandar ng display, bumubuo ka ng isang transformation matrix at glLoadIdentity () Tinitiyak na magsisimula ka sa isang bagong matrix sa bawat pass.
  • Ang iba pang mga pagpapaandar na pagbabago na maaari mong mailapat ay ang glTranslatef () at glScalef (). Ang mga pagpapaandar na ito ay katulad ng glRotatef () na may kataliwasan na kumukuha lamang sila ng 3 mga parameter, ang x, y, at mga halagang z upang isalin o sukatin ang bagay.
  • Upang makuha ang tamang epekto kapag naglalapat ng lahat ng tatlong mga pagbabago sa isang bagay, kailangan mong ilapat ang mga ito sa tamang pagkakasunud-sunod. Palaging isulat ang mga ito sa pagkakasunud-sunod glTranslate, glRotate, pagkatapos ay glScale. Mahalagang inilalapat ng OpenGL ang mga pagbabago sa isang ilalim na pamamaraan. Upang maunawaan ang pagsubok na ito na isipin kung ano ang magiging hitsura ng isang simpleng 1x1x1 cube sa mga pagbabago kung inilapat ito ng OpenGL mula sa itaas hanggang sa ibaba at kung inilapat ito ng OpenGL mula sa ibaba hanggang sa itaas.
1994315 18 1
1994315 18 1

Hakbang 3. Idagdag ang mga sumusunod na utos upang sukatin ang kubo ng 2 kasama ang x-axis, 2 kasama ang y-axis, paikutin ang kubo ng 180 degree tungkol sa y-axis, at isalin ang cube ng 0.1 kasama ang x-axis

Siguraduhin na ayusin ang mga ito pati na rin ang nakaraang mga utos ng glRotate () sa tamang pagkakasunud-sunod tulad ng inilarawan sa itaas. (Kung hindi ka sigurado, ginagawa ito sa huling code sa dulo ng tutorial.)

    // Other transformations 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

Hakbang 4. Compile at patakbuhin ang iyong code

Ipagpalagay na gumagamit ka ng gcc bilang iyong tagatala, patakbuhin ang mga utos na ito mula sa iyong terminal upang maipon at subukan ang iyong programa.

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

1994315 20 1
1994315 20 1

Hakbang 5. Suriin ang iyong kumpletong code

Dapat ganito:

    // // File: mycube.c // May-akda: Matt Daisley // Nilikha: 4/25/2012 // Project: Source code para sa Gumawa ng isang Cube sa OpenGL // Paglalarawan: Lumilikha ng isang window ng OpenGL at kumukuha ng isang 3D cube / / Na maaaring paikutin ng gumagamit gamit ang mga arrow key // // Mga Kontrol: Kaliwa Arrow - Paikutin Kaliwa // Kanang Arrow - Paikutin Kanang // Up Arrow - Paikutin // Down Arrow - Paikutin Down // ------ ---- - // May kasamang // ------------------------------------------- ---------------- -------------------------------------------- // Function Prototypes / / ----------------- --------- walang bisa ang pagpapakita (); walang bisa mga specialKeys (); // ----------------- ---------- // Mga Global Variable // ----------------- ----------------- doble paikutin_y = 0; doble paikutin_x = 0; // ----------------- ---------- // display () Callback function // ------------------------------- --------------------------- void display () {// I-clear ang screen at Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Reset transformations glLoadIdentity (); // Other Transformations // glTranslatef (0.1, 0.0, 0.0); // Hindi kasama // glRotatef (180, 0.0, 1.0, 0.0); // Hindi kasama // Paikutin kapag binago ng gumagamit ang rotate_x at rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0); glRotatef (paikutin_y, 0.0, 1.0, 0.0); // Other Transformations // glScalef (2.0, 2.0, 0.0); // Hindi kasama // Multi-kulay na gilid - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 ay pulang glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 ay berde glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 ay asul na glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 ay lila glEnd (); // White side - 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 (); // Lila na gilid - RIGHT 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 (); // Green side - Kaliwang 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 (); // Blue side - 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 (); // Red side - 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 () Callback Function // ------------------------------ ---------------------------- void specialKeys (int key, int x, int y) {// Kanang arrow - dagdagan ang pag-ikot ng 5 degree kung (key == GLUT_KEY_RIGHT) paikutin_y + = 5; // Kaliwang arrow - bawasan ang pag-ikot ng 5 degree iba pa kung (key == GLUT_KEY_LEFT) paikutin_y - = 5; kung hindi man kung (key == GLUT_KEY_UP) paikutin_x + = 5; kung hindi man kung (key == GLUT_KEY_DOWN) paikutin_x - = 5; // Humiling ng pag-update sa display glutPostRedisplay (); } // -------------------------------------------- ----------- // pangunahing () pagpapaandar // ----------------- --------------------------- int main (int argc, char * argv ) {// Simulan ang GLUT at iproseso ang mga parameter ng gumagamit glutInit (& argc, argv); // Humiling ng dobleng buffered totoong window ng kulay na may Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // Lumikha ng window glutCreateWindow ("Kahanga-hanga Cube"); // Paganahin ang Z-buffer lalim na pagsubok na glEnable (GL_DEPTH_TEST); // Callback function glutDisplayFunc (display); glutSpesyalFunc (specialKeys); // Pass control to GLUT para sa mga kaganapan glutMainLoop (); // Return to OS return 0; }

Inirerekumendang: