Kako napraviti kocku u opengl-u
OpenGL je 3D program za programiranje koji vam omogućava da stvorite složene trodimenzionalne slike iz jednostavnih oblika. Iz ovog člana naučit ćete kako crtati s njim će pomoći jednostavnoj kocki koja se može rotirati u tri dimenzije!
Korake
Dio 1 od 3:
Početna instalacijajedan. Instalirajte OpenGL. Start S OpenGL instalacijski vodiči na vašem računaru. Ako je OpenGL i prevodilac s vama već, možete preskočiti ovaj korak i preći na sljedeću.
2. Kreirajte dokument. Kreirajte novu datoteku u vašem uređivaču omiljenog koda i sačuvajte je kao Mycube.C
3. Dodaj #includes. Evo glavnih #include direktiva koje su vam potrebne. Važno je zapamtiti da su direktive za različite operativne sisteme različite, pa je potrebno odabrati sve tako da je program univerzalan i može se pokrenuti u bilo kojem sistemu.
// uključuje # uključuje#Include #Include #Define gl_gelxt_prototipes # ifdef __apple __ # uključuje # drugo # uključuje #ENDIF
4. Dodajte funkcionalne prototipove i globalne varijable. Sljedeći korak će proglasiti funkcionalne prototipove.
// Funkcionalni prototipesvoidni prikaz () - praznini specijalnike () - // Globalna varijableDeble rotate_y = 0-dvostruki rotate_x = 0-
pet. Podesite glavnu () funkciju.
Int main (int argc, char * argv []) // paralizirati korisnički parametriglutinit (& argc, argv) - // Zatražite dvostruko pufering prozor, z-shema boja i boja True ColorlutinitDisplaymode (glut_double)
Dio 2 od 3:
Funkcija ekrana ()jedan. Shvatite zadatak funkcije zaslona (). Svi radovi na crtanju Kube pasti će na krhke linije ove funkcije. Ideja općenito je sljedeća: izvlačite šest zasebnih lica kocke i stavite ih u odgovarajuće pozicije.
- Za svako lice definirate se četiri ugla, a OpenGl ih povezuje sa linijama i ispunite boju koju odaberete. Ispod će reći kako to učiniti.
2. Dodajte funkciju GLCLear (). Prije svega, radeći s ovom funkcijom, potrebni smo Jasna boja i z tampon. Bez toga, pod novim uzorkom bit će viđen stari, a objekti koji su izvučeni programom bit će dogovoreni pogrešno.
Void displej () gl_depth_buffer_bit)-
3. Dodaj Glbegin () i Glet (). OpenGL predmeti su kombinacije različitih poligona. Timu Glbegin () Dopustite nam da nacrtamo objekt s vama - to je poput olovke, koju nacrtate figuru, a da ga ne suvite iz papira. Da otkinu olovku sa lista i počnite crtati nešto novo, treba vam tim Glet (). U ovom ćemo članku koristiti GL_POlygon da nacrtamo svaku ivicu kocke, iako je moguće koristiti druge parametre poput GL_LINE, GL_QUAD ili GL_TRIANGLE za stvaranje drugih oblika.
// Multicolor Side - Frontglbegin (GL_Polygon) - // Verse dodaju u sljedećem Stepglend ()-
4. Dodajte funkciju glvertex3f (). Sad kad ste objasnili program koji želite započeti crtanje poligona, trebate Podesite vrhove Objekt. Funkcija GLVERTEX ima nekoliko oblika, čija upotreba ovisi o tome što namjeravate učiniti sa svojim objektom.
// Multicolor Side - Frontglbegin (GL_Polygon) -glvertex3f (-0.pedeset.pedeset.5) - // P1GLVERTEX3F (-0.5.0.pedeset.5) - // P2GLVERTEX3F (0.5.0.pedeset.5) - // P3GLVERTEX3F (0.pedeset.pedeset.5) - // P4Glend ()-
pet. Dodajte funkciju GLCOLOR3F (). GlColor djeluje na više načina slično glvertex. Bodovi Možete postaviti vrste podataka kratkih, cijeli broj, dvostruki ili plov. Svaka boja ima vrijednost od 0 do 1. Sve nule su crne, sve jedinice - respektivno, bijelo. Slika 3 u GlColor3F () označava RGB shemu boja bez alfa kanala. ALPHA CHANL CANLES odgovorne su za njegovu transparentnost. Da biste promijenili alfa kanapnu vrijednost, koristite GLCOLOR4F () s posljednjim parametrom od 0 do 1, odnosno iz neprozirne do transparentnosti.
// Multicolor Side - Frontglbegin (GL_POLYGON) -GLCOLOR3F (1.0, 0.0, 0.0) -glvertex3f (0.pedeset.pedeset.5) - // P1 RedglColor3F (0.0, 1.0, 0.0) -glvertex3f (0.5.0.pedeset.5) - // P2 GreenGLColor3f (0.0, 0.0, 1.0) -glvertex3f (-0.5.0.pedeset.5) - // P3 BlueglColor3F (1.0, 0.0, 1.0) -glvertex3f (-0.pedeset.pedeset.5) - // P4 PurpleGledlend ()-
6. Nacrtajte drugu licu Kubu. Bolje, naravno, ako sami pronađete lokaciju ostatka kocke i svaku od vrhova, ali radi jednostavnosti izračunali smo ih za vas. Kod je dat B Završni prikaz funkcije () ispod.
// Bijela strana - Rearglbegin (GL_POLIGON) -GLCOLOR3F (1.0.1.0, 1.0) -glvertex3f (0.pedeset.pedeset.5) -glvertex3f (0.5.0.pedeset.5) -glvertex3f (-0.5.0.pedeset.5) -glvertex3f (-0.pedeset.pedeset.5) -Glend () - // ljubičasta strana - ruralglbegin (gl_polygon) -glcolor3f (1.0,0.0.1.0) -glvertex3f (0.pedeset.pedeset.5) -glvertex3f (0.5.0.pedeset.5) -glvertex3f (0.5.0.5.0.5) -glvertex3f (0.pedeset.5.0.5) -Glend () - // Zelena strana - lijeviBegin (gl_polygon) -glcolor3f (0.0.1.0,0.0) -glvertex3f (-0.pedeset.5.0.5) -glvertex3f (-0.5.0.5.0.5) -glvertex3f (-0.5.0.pedeset.5) -glvertex3f (-0.pedeset.pedeset.5) -Glend () - // Blue Side - Gornjegbegin (GL_POLYGON) -GLCOLOR3F (0.0,0.0.1.0) -glvertex3f (0.5.0.5.0.5) -glvertex3f (0.5.0.pedeset.5) -glvertex3f (-0.5.0.pedeset.5) -glvertex3f (-0.5.0.5.0.5) -Glend () - // Crvena strana - Nižbyglbegin (GL_POLYGON) -GLCOLOR3F (1.0,0.0,0.0) -glvertex3f (0.pedeset.pedeset.5) -glvertex3f (0.pedeset.5.0.5) -glvertex3f (-0.pedeset.5.0.5) -glvertex3f (-0.pedeset.pedeset.5) -Glend () - GLFLUSH () - GlutswapBuffers ()-
Dio 3 od 3:
Interaktivni programjedan. Dodajte funkciju Speciackeys (). U principu je sve gotovo spremno, ali kocka je samo izvučena i ne rotira se. Da biste to učinili, stvorite Funkcija specijalista (), koji će zakretati kocku pritiskom na tipke sa strelicama!
- Bilo je za ovu funkciju da su najavljene globalne varijable rotate_x i rotate_y. Kada pritisnete "lijevo" i "desno" tipke sa strelicama, rotate_y vrijednost će se povećati ili smanjiti za pet stepeni. Slično tome, promijenit ćemo vrijednost rotate_x, ali već pritiskom na tipke sa strelicama "gore" i dolje.
Praznine specijalce (Int tipka, INT X, INT Y) {// Strelica u desnoj strani - Povećanje rotacije od 5 stepeni (tipka == GLUT_KEY_Right) Rotate_y + = 5 - // Lijeva strelica - Smanjenje rotacije od 5 stepeni (tipka == GLUT_KEY_LEFT) ROTATE_Y - = 5-ALTE IF (tipka == GLUT_KEY_UP) ROTATE_X + = 5-ALTE IF (tipka == GLUT_KEY_DOWN) ROTATE_X - = 5 - // Zahtjev za ažuriranje ScreeglatPostEdPlay () -}
2. Dodajte Glotate (). Posljednje što ćemo učiniti je dodati niz koji će nam omogućiti da rotimo objekt. Povratak na funkciju Prikaz () I prije nego što opisuje prednju, dodajte:
// resetiranje transformacijaGloadidentnost () - // rotacija prilikom promjene korisničkih rotate_x i rotate_yglorotatef vrijednosti (rotate_x, 1.0, 0.0, 0.0) -glrotatef (rotate_y, 0.0, 1.0, 0.0) - // višebojna strana - prednji....
3. Dodajte sljedeće naredbe za dvokračno skaliranje kocke uz osi x i y, da biste rotirali kocku 180 stepeni duž osi osi, kao i za pomicanje kocke za 0,1 duž X osi x. Provjerite jesu li sve relevantne naredbe, uključujući prethodno navedene Glrotate () naredbe, navedene u ispravnom redoslijedu. Ako se plašite da se pogriješite, pogledajte konačnu verziju programa na kraju članka.
// Ostale transformacijeGltranslatef (0.10.0, 0.0) -glrotatef (180, 0).0, 1.0, 0.0) -glscalef (2.0, 2.0, 0.0)-
4. Sastavite i pokrenite kod. Pretpostavimo da koristite GCC kao kompajler, pa unesite sljedeće naredbe na terminal:
Na Linuxu: GCC kocka.C -O Cube -LGLUT -LGL./ Mycuben Mac: GCC -O foo foo.C -Framework Glut -Framework OpenGL./ Mycube Windows: GCC -Wall -Fooo foo.C -LGLUT32CU -LGLU32 -LOPENGL32./ Mycube
pet. Provjerite završni kod. Evo konačnog koda koje je autor kreirao autor članka u kojem komentari nisu prevedeni.
//// datoteka: mycube.C // Autor: Matt Daisley // Kreirano: 4/25 / 2012 // Projekt: Izvorni kod za čišćenje kocke u OpenGL // Opis: Stvara OpenGL prozor i crta 3D kocku // koju se korisnik može okretati pomoću Kontrole sa strelicama // // Kontrole: Levo strelica - Rotirajte lijevo // DESNO strelica - Zakrenite desno // Up strelica- Rotirajte dolje // -------------- -------------------------------------------- // uključuje // - - -------------------------------------------------- - ------- # uključite#Include #Include #Define gl_gelxt_prototipes # IFDEF __apple __ # uključuje # drugo # uključuje # endif // --------------------------------- - ------------------------ // Funkcijski prototipi // ------------------- --- -------------------------------------- VOOD ekran () - praznini Speciackeys () - // ----------------------------------------------- ----- ---------- // Globalne varijable // ------------------------------- ------- ---------------------- Dvostruki rotate_y = 0-dvostruki rotate_x = 0 - // --------- ------- ------------------------------------------ / / Display () Funkcija povratnog poziva / / ------------------------------------------ ------- --------- Voidni prikaz () // Clear ekrana i Z-Buffergclear (GL_COLOR_BUFFER_BIT // ------------------ ------- --------------------------------- // Specialeys () funkcija povratnog poziva // - - ------- ------------------------------------------- -------- Vučni specijalci (Int tipka, INT X, INT Y) {// DESNO strelica - povećajte rotaciju za 5 stepeni (tipka == GLUT_KEY_Right) Rotate_y + = 5 - // Lijeva strelica - Smanjenje rotacije Do 5 detela ako (ključ == glut_key_ Lijevo) Rotate_y - = 5-drugo ako (tipka == GLUT_KEY_UP) ROTATE_X + = 5-ALTE IF (tipka == GLUT_KEY_DOWN) Rotate_X - = 5 - // Zahtev za prikaz () -} // ------ / -------------------------------------------------- - - // Funkcija glavne () // --------------------------------------- --- ------------------ INT glavna (int argc, char * argv []) glut_depth) - // Kreirajte prozorGlutcreatewindow ("Awesome kocke") - // Omogući z-pufer dubinu testGlable (gl_depth_test) - // povratni functsGlutDisplayFunc (displej) -Glutspecialfunc (specijalce) - // Kontrola prolaska na glut za događanja - // Povratak na OSRETURN 0-