![Conas ciúb a dhéanamh in OpenGL - Cumann Conas ciúb a dhéanamh in OpenGL - Cumann](https://a.vvvvvv.in.ua/society/kak-oformit-vozvrat-nds-na-priobretennij-tovar-v-tailande.webp)
Ábhar
- Céimeanna
- Cuid 1 de 3: Suiteáil Tosaigh
- Cuid 2 de 3: An Feidhm Taispeána ()
- Cuid 3 de 3: Idirghníomhaíocht an Chláir
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 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 Cruthaigh doiciméad. Cruthaigh comhad nua san eagarthóir cód is fearr leat agus sábháil é mar mycube.c
- 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 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 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 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 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.
- 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.
taispeáint neamhní () // Glan an Scáileán Agus Z Maolán glClear (GL_COLOR_BUFFER_BIT
Cuid 3 de 3: Idirghníomhaíocht an Chláir
- 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 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:
- 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.
// 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 ....
- 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 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 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