Conas ciúb a dhéanamh in OpenGL

Údar: Gregory Harris
Dáta An Chruthaithe: 12 Mí Aibreáin 2021
An Dáta Nuashonraithe: 1 Iúil 2024
Anonim
Conas ciúb a dhéanamh in OpenGL - Cumann
Conas ciúb a dhéanamh in OpenGL - Cumann

Ábhar

Is uirlis ríomhchlárúcháin 3D é OpenGL a ligeann duit íomhánna casta 3D a chruthú ó chruthanna simplí. San alt seo, foghlaimeoidh tú conas ciúb simplí is féidir a rothlú i dtrí thoise a tharraingt lena chabhair!

Céimeanna

Cuid 1 de 3: Suiteáil Tosaigh

  1. 1 Suiteáil OpenGL. Tosaigh le rang teagaisc ar conas OpenGL a shuiteáil ar do ríomhaire. Má tá OpenGL agus tiomsaitheoir C agat cheana féin, is féidir leat an chéim seo a scipeáil agus dul ar aghaidh go dtí an chéad chéim eile.
  2. 2 Cruthaigh doiciméad. Cruthaigh comhad nua san eagarthóir cód is fearr leat agus sábháil é mar mycube.c
  3. 3 Cuir #includes leis. Seo iad na treoracha bunúsacha #include a bheidh uait. Tá sé tábhachtach a mheabhrú go bhfuil na treoracha do chórais oibriúcháin éagsúla difriúil, agus dá bhrí sin ní mór duit gach rud a roghnú ionas go mbeidh an clár uilíoch agus gur féidir é a reáchtáil ar aon chóras.

      // San áireamh #include stdio.h> #include stdarg.h> #include math.h> #define GL_GLEXT_PROTOTYPES #ifdef __APPLE__ #include GLUT / glut.h> #else #include GL / glut.h> #endif

  4. 4 Cuir fréamhshamhlacha feidhmiúla agus globals leis. Is é an chéad chéim eile fréamhshamhlacha feidhmiúla a dhearbhú.

      // Fréamhshamhlacha feidhmiúla taispeáint neamhní (); neamhní specialKeys (); // Athróga domhanda dúbailte rotate_y = 0; rothlú dúbailte_x = 0;

  5. 5 Sainmhínigh an phríomhfheidhm ().

      int main (int argc, char * argv []) // Tús a chur le GLUT agus paraiméadair shaincheaptha glutInit a phróiseáil (& argc, argv); // Iarr Fuinneog le Tacaíocht Do Mhaolú Dúbailte, Z-Buffering agus True Colour glutInitDisplayMode (GLUT_DOUBLE

Cuid 2 de 3: An Feidhm Taispeána ()

  1. 1 Tuig cuspóir na feidhme taispeána (). Is ar línte leochaileacha na feidhme seo a thitfidh an obair go léir ar an gciúb a thabhairt. Is é an smaoineamh ginearálta é seo: tarraingeoidh tú sé aghaidh ar leithligh den chiúb agus cuirfidh tú iad ina suíomhanna faoi seach.
    • Maidir le gach aghaidh, saineoidh tú ceithre choirnéal, agus nascfaidh OpenGL iad le línte agus líonfaidh siad iad leis an dath atá roghnaithe agat. Míneofar thíos conas é seo a dhéanamh.
  2. 2 Cuir feidhm glClear () leis. Ar dtús, agus muid ag obair leis an bhfeidhm seo, caithfimid dath soiléir agus z-maolán... Gan é seo, beidh an seancheann le feiceáil faoin bpictiúr nua, agus beidh na rudaí a tharraingeoidh an clár suite go mícheart.

      taispeáint neamhní () // Glan an Scáileán Agus Z Maolán glClear (GL_COLOR_BUFFER_BIT

    • Tabhair aird ar an dá líne dheireanacha. Seo iad na feidhmeanna glFlush (); agus glutSwapBuffers ();, ag tabhairt éifeacht maolán dúbailte, a thuairiscítear thuas.

Cuid 3 de 3: Idirghníomhaíocht an Chláir

  1. 1 Cuir an fheidhm specialKeys () leis. I bprionsabal, tá gach rud beagnach réidh, ach ní dhéantar an ciúb a tharraingt ach ní rothlú. Chun seo a dhéanamh, ní mór duit a chruthú an fheidhm specialKeys (), a ligfidh duit an ciúb a rothlú trí na saigheadeochracha a bhrú!
    • Is don fheidhm seo a dearbhaíodh na hathróga domhanda rotate_x agus rotate_y. Nuair a bhrúlann tú na saigheadeochracha clé agus deas, méadóidh nó laghdóidh an luach rotate_y cúig chéim. Athróidh luach rotate_x ar an mbealach céanna, ach an uair seo trí na saigheadeochracha suas agus síos a bhrú.
    • neamhní specialKeys (eochair int, int x, int y) {// Saighead cheart - méadaigh an rothlú 5 céim más rud é (eochair == GLUT_KEY_RIGHT) rothlú_y + = 5; // Saighead Clé - Laghdaigh an Rothlú Faoi 5 Chéim eile más rud é (eochair == GLUT_KEY_LEFT) rothlú_y - = 5; eile más rud é (eochair == GLUT_KEY_UP) rotate_x + = 5; eile más rud é (eochair == GLUT_KEY_DOWN) rotate_x - = 5; // Iarraidh Athnuachan Scáileáin glutPostRedisplay (); }

  2. 2 Cuir glRotate () leis. Is é an rud deireanach a dhéanfaimid ná líne a chur leis a ligfidh dúinn an réad a rothlú. Fill ar ais ar an bhfeidhm taispeáint () agus roimh an gcur síos ar thaobh FRONT cuir:

      // Athshocraigh Athraigh glLoadIdentity (); // Rothlaigh Nuair a Athraíonn an Úsáideoir Na luachanna rotate_x agus rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0); glRotatef (rotate_y, 0.0, 1.0, 0.0); // Taobh multicolor - FRONT ....

    • Tabhair faoi deara go bhfuil an chomhréir glRotatef ()atá cosúil le comhréir glColor3f () agus glVertex3f (), ach a éilíonn ceithre pharaiméadar i gcónaí. Is é an chéad cheann an uillinn rothlaithe i gcéimeanna. Is iad na trí cinn eile na haiseanna ar a dtarlaíonn an rothlú, san ord x, y, z. Go dtí seo, caithfimid an ciúb a rothlú feadh dhá aiseanna, x agus y.
    • Teastaíonn línte comhchosúla ó gach claochlú a shainmhínímid sa chlár. Go bunúsach, léirímid rothlú réad feadh an x-ais mar athrú ar luach rotate_x, agus rothlú feadh an y-ais mar athrú ar luach rotate_y. Mar sin féin, cuirfidh OpenGL gach rud le chéile i maitrís claochlaithe amháin. Gach uair a ghlaonn tú taispeáint, cruthóidh tú maitrís claochlaithe, agus glLoadIdentity () ligfidh tú duit tosú le maitrís nua gach uair.
    • Is iad na feidhmeanna claochlaithe eile a d’úsáid tú ná glTranslatef () agus glScalef (). Tá siad cosúil le glRotatef (), ach amháin nach dteastaíonn ach trí pharaiméadar uathu: na luachanna x, y, agus z chun an réad a athrú agus a scála.
    • Chun gach rud a thaispeáint i gceart nuair a chuirtear na trí chlaochlú i bhfeidhm ar réad amháin, ní mór duit claochluithe a shocrú san ord cuí, eadhon glTranslate, glRotate, glScale - agus riamh a mhalairt. Athraíonn OpenGL an réad tríd an gclár a léamh ó bhun go barr. Chun é seo a thuiscint níos fearr, samhlaigh conas a thabharfadh an ciúb 1x1x1 aire do na claochluithe go léir dá gcuirfeadh OpenGL iad i bhfeidhm san ord a thaispeántar (ó bhun go barr), agus ansin smaoineamh ar an gcaoi a ndéanfadh OpenGL an ciúb a phróiseáil trí na treoracha ó bhun go barr a léamh.
  3. 3 Cuir na horduithe seo a leanas leis an gciúb a scála faoi dhó sna treoracha x agus y, chun an ciúb a rothlú 180 céim san ais y, agus chun an ciúb 0.1 a bhogadh san ais x. Déan cinnte go bhfuil gach ordú ábhartha, lena n-áirítear na horduithe glRotate () a tugadh roimhe seo, san ord ceart. Má tá eagla ort botún a dhéanamh, féach an leagan deiridh den chlár ag deireadh an ailt.

      // Tuilleadh Trasfhoirmithe glTranslatef (0.1, 0.0, 0.0); glRotatef (180, 0.0, 1.0, 0.0); glScalef (2.0, 2.0, 0.0);

  4. 4 An cód a thiomsú agus a rith. Ligean le rá go bhfuil gcc á úsáid agat mar do thiomsaitheoir, mar sin cuir na horduithe seo a leanas isteach i do chríochfort:

      Ar Linux: gcc ciúb.c -o ciúb -lglut -lGL ./ mycube Ar Mac: gcc -o foo foo.c -framework GLUT -framework OpenGL ./ mycube Ar Windows: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32 ./ mycube

  5. 5 Seiceáil an cód deiridh. Seo an cód deiridh a chruthaigh údar an ailt, nach n-aistríonn na tráchtanna.

      // // File: mycube.c // Údar: Matt Daisley // Cruthaithe: 4/25/2012 // Tionscadal: Cód foinse le haghaidh Déan Ciúb in OpenGL // Cur síos: Cruthaíonn fuinneog OpenGL agus tarraingíonn ciúb 3D / / Gur féidir leis an úsáideoir rothlú ag úsáid na saigheadeochracha // // Rialuithe: Saighead Clé - Rothlaigh ar chlé // Saighead Ceart - Rothlaigh Ar dheis // Suas Arrow - Rothlaigh Suas // Down Arrow - Rothlaigh Síos // ------ ---------------------------------------------- - // San áireamh // ------------------------------------------- - -------------- #include stdio.h> #include stdarg.h> #include math.h> #define GL_GLEXT_PROTOTYPES #ifdef __APPLE__ #include GLUT / glut.h> #else # include GL / glut.h> #endif // --------------------------------------- - ------------------ // Fréamhshamhlacha Feidhm // ------------------------- - -------------------------------- taispeáint neamhní (); neamhní specialKeys (); // ------------------------------------------------ ---------- // Athróga Domhanda // ---------------------------------- ------------------------ dúbailte rotate_y = 0; rothlú dúbailte_x = 0; // ------------------------------------------------ ---------- // taispeáint () Feidhm aisghlao // ------------------------------- --------------------------- taispeáint neamhní () // Scáileán soiléir agus glClear Z-maolán (GL_COLOR_BUFFER_BIT // ------ ---------------------------------------------- - // specialKeys () Feidhm Glaonna ar ais // --------------------------------------- - ------------------ neamhní specialKeys (eochair int, int x, int y) {// Saighead cheart - rothlú a mhéadú 5 céim más rud é (eochair == GLUT_KEY_RIGHT) rothlú_y + = 5; // Saighead ar chlé - laghdaigh an rothlú 5 céim eile más rud é (eochair == GLUT_KEY_LEFT) rothlú_y - = 5; eile más rud é (eochair == GLUT_KEY_UP) rothlú_x + = 5; eile más rud é (eochair == GLUT_KEY_DOWN) rothlú_x - = 5; // Iarr nuashonrú taispeána glutPostRedisplay ();} // ----------------------------------- - ---------------------- // príomh () feidhm // ------------------- - -------------------------------------- int main (int argc, char * argv [] ) GLUT_RGB