Ako urobiť kocku v opengl

OpenGL je 3D programovací nástroj, ktorý vám umožní vytvoriť komplexné trojrozmerné obrazy z jednoduchých foriem. Z tohto článku sa dozviete, ako kresliť s ním pomôže jednoduchú kocku, ktorá sa môže otáčať v troch dimenziách!

Kroky

Časť 1 z 3:
Počiatočná inštalácia
jeden. Nainštalujte OpenGL. Štart S Návody na inštaláciu OpenGL V počítači. Ak OpenGL a kompilátor s vami už máte, môžete tento krok preskočiť a prejsť na nasledujúci.
  • 2. Vytvorte dokument. Vytvorte nový súbor do svojho obľúbeného editora kódu a uložte ho ako mycube.C
  • 3. Pridať #incluscons. Tu sú hlavné #include smernice, ktoré potrebujete. Je dôležité si uvedomiť, že smernice pre rôzne operačné systémy sú odlišné, a preto je potrebné si vybrať všetko, takže program je univerzálny a môže byť spustený v akomkoľvek systéme.
    // zahŕňa # zahŕňa #Include #Include #Define gl_gelxt_prototypy # Ifdef __Apple __ # Zahrnúť # inde # Zahrnúť #endif
  • 4. Pridajte funkčné prototypy a globálne premenné. Ďalší krok vyhlási funkčné prototypy.
    // Funkčné prototypesvoid Display () - Void SpecialKeysEysEysDoble rotate_y = 0-Double Rotate_X = 0-
  • päť. Nastavte hlavnú () funkciu.
    Int Hlavný (INT ARGC, CHAR * ARGV []) // Inicializácia ParametersGlutsGlutinit (& Argc, ARGV) - // Žiadosť o okno s dvojitým pufrovaním, Z-Buffererization a farebná schéma TRUE COLORGLUTINITDISTRIKA 
  • Časť 2 z 3:
    Funkcia zobrazenia ()
    jeden. Pochopiť priradenie funkcie displeja (). Všetky práce na kreslení Kuby padnú na krehké čiary tejto funkcie. Myšlienka vo všeobecnosti je nasledovná: Nakreslite šesť samostatných tvárí kocky a umiestnite ich do príslušných pozícií.
    • Pre každú tvár definujete štyri uhol a OpenGL ich pripojí s riadkami a vyplňte farbu, ktorú si vyberiete. Nižšie povie, ako to urobiť.
  • 2. Pridajte funkciu GLCLER (). V prvom rade pracuje s touto funkciou, potrebujeme Clear Color a Z Buffer. Bez toho, pod novým vzorom bude vidieť starý a objekty čerpané programom budú usporiadané nesprávne.
    Displej () GL_DEPTH_BUFFER_BIT)-
  • 3. Pridajte glbegin () a Glend (). OpenGL objekty sú kombinácie rôznych polygónov. Tím glbegin () Dovoľte nám kresliť objekt s tebou - je to ako ceruzka, ktorú nakreslíte obrázok bez toho, aby ste ho roztrhli z papiera. Na roztrhnutie ceruzky z listu a začať čať niečo nové, potrebujete tím Glend (). V tomto článku použijeme GL_Polygon, aby sme nakreslime každý okraj kocky, hoci je možné použiť iné parametre, ako je GL_LINE, GL_QUAD alebo GL_TRIANGLE, aby ste vytvorili iné formuláre.
  • Začnite s prednou časťou kocky. Neskôr pridáme farbu na každú zo šiestich tvárí.
  • // Multicolor Side - FrontGLBEGIN (GL_POLYGON) - // Verše Pridajte ďalšie krokglend ()-
  • 4. Pridajte funkciu glvertex3f (). Teraz, keď ste vysvetlili program, ktorý chcete začať kresliť polygón, potrebujete Nastavte vrcholy Objekt. Funkcia Glvertex má niekoľko foriem, ktorého použitie závisí od toho, čo chcete robiť s vaším objektom.
  • Najprv - koľko meraní budete pracovať? Obrázok 3 v glvertex3f indikuje tri rozmery. Môžete však pracovať v 2 a v 4 meraniach. List F, zase, naznačuje, že pracujeme s plávajúcimi bodkočiarmi. Tu však môžete použiť celé číslo, dvojité alebo krátke typy.
  • Všimnite si, že sú stanovené všetky body proti smeru hodinových ručičiek šípky. Aj keď to nie je veľmi dôležité, ale keď začnete pracovať na osvetlení, textúrovaní, liečbe non-tarify, zvyk predpísania všetkého proti smeru hodinových ručičiek bude pre vás veľmi užitočné.
  • Pridajte čiary GLBEGIN () a GLEND ().


  • // Multicolor Side - FrontGLBEGIN (GL_POLYGON) -GLVERTEX3F (-0.päťdesiat.päťdesiat.5) - // P1GlVERTEX3F (-0.5.0.päťdesiat.5) - // P2GlVERTEX3F (0.5.0.päťdesiat.5) - // P3GlVERTEX3F (0.päťdesiat.päťdesiat.5) - // P4Glend ()-
  • päť. Pridajte funkcie glcolor3f (). Glcolor pôsobí v mnohých ohľadoch podobné glvertex. Body môžete nastaviť dátové typy krátkych, Integer, Double alebo Float. Každá farba má hodnotu od 0 do 1. Všetky nuly sú čierne, všetky jednotky - v tomto poradí, biela. Obrázok 3 v glcolor3f () znamená, farebnú schému RGB bez alfa kanálu. Farby Alpha kanál je zodpovedný za jeho transparentnosť. Pre zmenu hodnoty alfa kanálu, použitie glcolor4f () s posledný parameter od 0 do 1, ktorá je, z matný až transparentnosti.
  • Volanie glcolor3f (), môžeme poskytnúť každý vrchol zo zadaného bodu v zadanej farbe. Inými slovami, ak všetky štyri vrcholy napríklad červená, potom už len jeden jediný okamih, nastavte hodnotu farby pred volaním príkazov glvertex3f () a že všetko bude červená.
  • Na príklade prednej časti nižšie môžete vidieť, ako je nastavená nová farba každého vrcholu. Keď to urobíte, môžete sa zoznámiť so zaujímavou funkciou kvetov OpenGL. Pretože každá štipka polygónu má svoju vlastnú farbu, OpenGL automaticky mieša farby! Kód umiestniť na ukazuje, ako vytvoriť štyri vrcholy s rovnakou farbou.
  • // multicolor strana - FrontGlbegin (GL_POLYGON) -GlColor3F (1.0, 0.0, 0.0) -glvertex3f (0.päťdesiat.päťdesiat.5) - // P1 redglcolor3f (0.0, 1.0, 0.0) -glvertex3f (0.5.0.päťdesiat.5) - // P2 greenGLColor3F (0.0, 0.0, 1.0) -glvertex3f (-0.5.0.päťdesiat.5) - // P3 blueGLColor3F (1.0, 0.0, 1.0) -glvertex3f (-0.päťdesiat.päťdesiat.5) - // P4 purpleglend ()-
  • 6. Čerpať ďalšie tváre Kuba. Lepšie, samozrejme, ak si sami nájsť umiestnenie zvyšok kocky a každý z vrcholov, ale pre jednoduchosť sme vypočítali je pre vás. Kód je uvedený B Konečný zobrazenie funkcie () nižšie.
    // biela strana - rearGlbegin (GL_POLYGON) -GlColor3F (1.0.1.0, 1.0) -glvertex3f (0.päťdesiat.päťdesiat.5) -GlVERTEX3F (0.5.0.päťdesiat.5) -glvertex3f (-0.5.0.päťdesiat.5) -glvertex3f (-0.päťdesiat.päťdesiat.5) -Glend () - // Violet Side - RuralGlbegin (GL_POLYGON) -GlColor3F (1.0,0.0.1.0) -glvertex3f (0.päťdesiat.päťdesiat.5) -GlVERTEX3F (0.5.0.päťdesiat.5) -GlVERTEX3F (0.5.0.5.0.5) -GlVERTEX3F (0.päťdesiat.5.0.5) -Glend () - // Green side - leftglbegin (GL_POLYGON) -GlColor3F (0.0.1.0,0.0) -glvertex3f (-0.päťdesiat.5.0.5) -glvertex3f (-0.5.0.5.0.5) -glvertex3f (-0.5.0.päťdesiat.5) -glvertex3f (-0.päťdesiat.päťdesiat.5) -glend () - // Modrá Side - UpperGlbegin (GL_POLYGON) -GlColor3F (0.0,0.0.1.0) -glvertex3f (0.5.0.5.0.5) -GlVERTEX3F (0.5.0.päťdesiat.5) -glvertex3f (-0.5.0.päťdesiat.5) -glvertex3f (-0.5.0.5.0.5) -Glend () - // Red Side - Nizhnyglbegin (GL_POLYGON) -GlColor3F (1.0,0.0,0.0) -glvertex3f (0.päťdesiat.päťdesiat.5) -GlVERTEX3F (0.päťdesiat.5.0.5) -glvertex3f (-0.päťdesiat.5.0.5) -glvertex3f (-0.päťdesiat.päťdesiat.5) -Glend () - glflush () - glutswapbuffers ()-
  • Dávajte pozor na posledné dva riadky. Jedná sa o funkcie glflush ()- a glutswapbuffers ()-, Poskytujúce efekt dvojité ukladanie do vyrovnávacej pamäte, ktoré bolo povedané vyššie.
  • Časť 3 z 3:
    interaktívny program
    jeden. Pridajte SpecialKeys function (). V zásade platí, všetko je takmer pripravený, ale kocka je koncipovaný len orientačná a neotáča. Ak to chcete urobiť, vytvorte SpecialKeys funkcie (), ktorý bude otáčať kocky stlačením kurzorových klávesov!
    • Bolo to pre túto funkciu, že globálne premenné Rotate_x a Rotate_y boli oznámené. Ak stlačíte "ľavica" a "pravý" kurzorových klávesov, bude hodnota ROTATE_Y zvýši alebo zníži o päť stupňov. Rovnako tak budeme meniť hodnotu Rotate_x, ale už stlačení tlačidla "nahor" a dole šípkami.
    Void SpecialKeys (int kľúč, int x, int y) {// Šípka vpravo - zvýšenie rotácie 5 degreesif (kľúč == glut_key_right) rotate_y + = 5 - // ľavá šípka - Zníženie otáčania 5 degreeselse ak (kľúčových == glut_key_left) Rotate_Y - = 5-else if (key == glut_key_up) rotate_x + = 5-else if (key == glut_key_down) rotate_x - = 5 - // Žiadosť o aktualizácii ScreenGlutpostredisplay () -}
  • 2. Pridajte GLROTATE (). Posledná vec, ktorú budeme robiť, je pridať reťazec, ktorý nám umožní ak objekt otočiť. Návrat do funkcie DISPLAY () A pred popisujúce predné, pridajte:
    // reset transformationsGlloadidentity () - // Rotácia pri zmene Rotate_x a Rotate_YGLROTATEF hodnoty používateľa (Rotate_x, 1.0, 0.0, 0.0) -glrotatef (Rotate_y, 0.0, 1.0, 0.0) - // viacfarebná strana - Predný....
  • Všimnite si, že syntax glrotatef (), ktorá je podobná syntax glcolor3f () a glvertex3f (), ale vždy vyžaduje označenie štyroch parametrov. Prvá - uhol natočenia v stupňoch. Nasledujúce tri - osi, pre ktoré otáčanie ide, v poradí, x, y, z. Zatiaľ musíme otočiť kocku v dvoch osiach, x a y.
  • Pri všetkých transformácií, ktoré uvedieme program, je potrebná podobné linky. V skutočnosti sme predstavujú natočenie objektu pozdĺž osi x ako zmeny hodnoty Rotate_x a otáčanie osi osi - ako zmena hodnoty Rotate_Y. Avšak, OpenGL integrujúci všetko do jednej transformačnej matice. Či volanie funkcie DISPLAY, budete vytvárať transformačné matice a GlLoadIdentity () vám umožní spustiť zakaždým s novou matricou.
  • Iné transformačné funkcie, ktoré by ste mohli použiť, je gltranslatef () a glcalef (). Sú podobné glrotatef (), s výnimkou, že iba tri parametre vyžadujú: Hodnoty x, y a z pre zmenu a úpravu veľkosti objektu.
  • Takže všetko, čo je zobrazovaný správne, keď sú všetky tri transformácie aplikované na jeden objekt, je potrebné nastaviť transformáciou v príslušnom poradí, a to GLTRANSLATE, GLROTATE, GLSCALE - a nikdy inak. OpenGL transformuje objekt čítanie program zdola nahor. Aby sme lepšie pochopili, predstavte si, ako bude 1x1x1m kocky starať o všetkých transformáciou, ak OpenGL aplikovať ich v poradí, ako boli uvedené (od zhora nadol), a potom premýšľať o tom, ako OpenGL lieči kocky, čítanie pokynov zdola nahor.
  • 3. Pridať nasledujúce príkazy pre škálovanie kocky dvojnásobný pozdĺž osí x a y, otočiť kocku o 180 ° pozdĺž osi osi, ako aj pre pohyb kocky o 0,1 pozdĺž osi x. Uistite sa, že všetky príslušné príkazy, vrátane vopred určeného GLROTATE () príkazy, sú uvedené v správnom poradí. Ak ste sa bojí, aby sa mýliť, pozri finálnu verziu programu na konci článku.
    // Ďalšie transformationsGltranslatef (0.10.0, 0.0) -glrotatef (180, 0.0, 1.0, 0.0) -GlScalef (2.0, 2.0, 0.0)-
  • 4. Kompilácia a spustenie kódu. Predpokladajme, že používate GCC ako kompilátor, takže zadajte nasledujúce príkazy do terminálu:
    V systéme Linux: GCC Cube.c -o kocka -lglut -lgl./ MYCUBEN MAC: GCC -O FOO FOO.C -Framework Glut -Framework OpenGL./ Mycube Windows: GCC -Wall -FoOo Foo.c -lglut32cu -lglu32 -lopengl32./ Mycube
  • päť. Skontrolujte finálnej kód. Tu je finálna kód vytvorený autorom článku, v ktorom pripomienky boli neprekladá.
    //// súboru: Mycube.C // Autor: Matt Daisley // Založená: 4/25 / 2012 // projektu: Zdrojový kód pre Make Cube na OpenGL // Popis: Vytvorí OpenGL okno a Kreslí 3D Cube // že používateľ sa môže otáčať pomocou šípkami // // Ovládanie: Ľavá Arrow- Rotate Left // šípka doprava - Otočiť doprava // Up Arrow- otáčať až // DOWN Arrow- Rotate Down // -------------- -------------------------------------------- // // zahŕňa - -------------------------------------------------- - ------- # include #Include #Include #Define gl_gelxt_prototypy # IFDEF __Apple __ # Zahrnúť # inde # Zahrnúť # ENDIF // ----------------------------------- -------------------------- // Funkcia prototypov //--------------- ------------------------------------------ Vlastné zobrazenie () - Void SpecialKeys () - // ----------------------------------------------- ----- - -------- // globálne premenné //---------------------------- ------------------------------- Double Rotate_y = 0-Double Rotate_X = 0 - //--------- --------------------------------------------------- / Zobrazenie () Funkcia spätného volania / /---------------------------------------- ----------------- Vlastne Display () // Vymazať obrazovku a Z-BubufrgLClear (GL_COLOR_BUFFER_BIT //--------------------- --------- ---------------------------------- // SpecialKeys () Funkcia spätného volania / --------------------------------------------------- ---------- Void SpecialKeys (Int Key, Int X, Int Y) {// šípka doprava - zvýšenie rotácie o 5 stupnica (kľúč == glut_key_right) rotate_y + = 5 - // // šípka ľavá O 5 stupňovitých, ak (key == glut_key_ Vľavo) Rotate_y - = 5-inak, ak (key == glut_key_up) rotate_x + = 5-inak, ak (tlačidlo == glut_key_down) rotate_x - = 5 - // požiadavka Display UpdateAteglutrodisplay () -} //------- ----------------------------------------------------- - - // hlavné () funkcia //------------------------------------ --- -------------------- INT hlavné (INT ARGC, Char * ARGV []) glut_depth) - // Vytvorte oknoCLOCLUTCATEWINDOWINOW ("Awesome Cube") - // Povolenie hĺbky Z-Buffer Testghnuble (GL_DEPTH_TEST) - // Callback FunctionGlutdisplayfunc (Display) -GlutspecialFUNC (špecialské zásy) - // Pass Control pre GULTH pre EventsGlutMainLop () - // Return do Osreturn 0-
  • Podobné publikácie