Jak udělat kostku v opengl
OpenGL je 3D programovací nástroj, který umožňuje vytvářet komplexní trojrozměrné snímky z jednoduchých formulářů. Z tohoto článku se naučíte, jak s ním kreslit, pomůže jednoduchou krychli, která může být otočena ve třech rozměrech!
Kroky
Část 1 z 3:
Počáteční instalacejeden. Instalace OpenGL. Start S OpenGL Instalační příručka na tvém počítači. Je-li OpenGL a kompilátor s vámi již máte, můžete tento krok přeskočit a jít na další.
2. Vytvořit dokument. Vytvořte nový soubor v oblíbeném editoru kódu a uložte jej jako mycube.C
3. Přidat #Includes. Zde je hlavní směrnicemi #Include, které potřebujete. Je důležité si uvědomit, že směrnice pro různé operační systémy jsou jiné, a proto je nutné zvolit vše, aby byl program univerzální a může být spuštěn v jakémkoli systému.
// zahrnuje # zahrnují#Zahrnout #Zahrnout #Define gl_gelxt_prototypes # ifdef __apple __ # zahrnovat # jinak # zahrnovat #endif
4. Přidejte funkční prototypy a globální proměnné. Dalším krokem bude deklarovat funkční prototypy.
// Funkční prototypesvoid displej () - Void speciallkeys () - // globální variaplydeble rotate_y = 0-double rotate_x = 0-
Pět. Nastavte hlavní () funkci ().
INT MAIN (INT ARGC, char * argv []) // inicializovat uživatelské parametry glid a procesu (a argc, argv) - // požádat o dvojité pufrovací okno, z-bufferizace a barevný schéma true colorglutinitdisplaymode (glut_double)
Část 2 z 3:
Funkce zobrazení ()jeden. Rozumět přiřazení funkce displeje (). Veškerá práce na kreslení Kuby padnou na křehké linie této funkce. Myšlenka obecně je následující: čerpáte šest oddělených tváří krychle a umístěte je do příslušných pozic.
- Pro každý obličej definujete čtyři úhel a OpenGL je spojuje s řádky a vyplní barvu, kterou si vyberete. Níže řeknete, jak to udělat.
2. Přidejte funkci glclear (). Nejprve pracují s touto funkcí, potřebujeme Vymazat barvu a vyrovnávací paměť. Bez toho, pod novým vzorem bude vidět starý, a objekty nakreslené programem budou uspořádány nesprávně.
Void display () gl_depth_buffer_bit)-
3. Přidat glbegin () a glend (). Objekty OpenGL jsou kombinací různých polygonů. tým glbegin () Dovolte nám, abychom s vámi nakreslili objekt - je to jako tužka, kterou nakreslete postavu, aniž byste ho odtrhli z papíru. Chcete-li roztrhnout tužku z listu a začněte kreslit něco nového, potřebujete tým Glend (). V tomto článku budeme používat gl_polygon, aby kresli každou okraj krychle, i když je možné použít jiné parametry, jako je gl_line, gl_quad nebo gl_triangle vytvořit jiné formuláře.
// Vícebarevná strana - frontglbegin (gl_polygon) - // verše Přidat do dalšího výkladu ()-
4. Přidat funkci glvertex3f (). Nyní, když jste vysvětlili program, který chcete začít kreslit mnohoúhelník, potřebujete Nastavit vrcholy Objekt. Funkce GLFERTEX má několik formulářů, jejichž použití závisí na tom, co máte v úmyslu s vaším objektem.
// Vícebarevná strana - Frontglbegin (GL_POLYGON) -GLERVERTEX3F (-0.padesáti.padesáti.5) - // p1glvertEx3f (-0.5.0.padesáti.5) - // p2glvertEx3f (0.5.0.padesáti.5) - // p3glvertEx3f (0.padesáti.padesáti.5) - // p4glend ()-
Pět. Přidat funkci glolor3f (). Glcolor působí mnoha způsoby podobným glvertexu. Body Můžete nastavit datové typy krátkých, celých čísel, dvojité nebo plovák. Každá barva má hodnotu od 0 do 1. Všechny nuly jsou černé, všechny jednotky - resp. Bílá. Obrázek 3 v glolor3f () označuje barevné schéma RGB bez alfa kanálu. Barvy alfa kanálu odpovídají za jeho transparentnost. Chcete-li změnit hodnotu alfa kanálu, použijte glolor4f () s posledním parametrem od 0 do 1, tj. Od neprůhledné k průhlednosti.
// Vícebarevná strana - Frontglbegin (GL_POLYGON) -GLOCCCOLOR3F (1).0, 0.0, 0.0)-gripvertEx3f (0.padesáti.padesáti.5) - // p1 redgolor3f (0.0, 1.0, 0.0)-gripvertEx3f (0.5.0.padesáti.5) - // p2 greenglcolor3f (0.0, 0.0, 1.0) -glotvertEx3f (-0.5.0.padesáti.5) - // p3 blumgolor3f (1.0, 0.0, 1.0) -glotvertEx3f (-0.padesáti.padesáti.5) - // p4 purpleglend ()-
6. Nakreslete jiné tváře Kuba. Lepší, samozřejmě, pokud vy sami najdete místo zbytku kostky a každého z vrcholů, ale pro jednoduchost jsme je vypočítali pro vás. Kód je uveden B Zobrazení finálního funkcí () níže.
// bílou stranu - zadníglbegin (gl_polygon) -gloccolor3f (1).0,1.0, 1.0)-gripvertEx3f (0.padesáti.padesáti.5)-gripvertEx3f (0.5.0.padesáti.5) -GrotvertEx3f (-0.5.0.padesáti.5) -GrotvertEx3f (-0.padesáti.padesáti.5) -Glend () - // fialová strana - Ruralglglbegin (gl_polygon) -glololor3f (1).0,0.0,1.0)-gripvertEx3f (0.padesáti.padesáti.5)-gripvertEx3f (0.5.0.padesáti.5)-gripvertEx3f (0.5.0.5.0.5)-gripvertEx3f (0.padesáti.5.0.5) -Glend () - // zelená strana - levicglbegin (gl_polygon) -glcolor3f (0).0,1.0,0.0) -glotvertEx3f (-0.padesáti.5.0.5) -GrotvertEx3f (-0.5.0.5.0.5) -GrotvertEx3f (-0.5.0.padesáti.5) -GrotvertEx3f (-0.padesáti.padesáti.5) -Glend () - // modrá strana - UPTERNGLBERBEGIN (GL_POLYGON) -GLOCCOLOR3F (0).0,0.0,1.0)-gripvertEx3f (0.5.0.5.0.5)-gripvertEx3f (0.5.0.padesáti.5) -GrotvertEx3f (-0.5.0.padesáti.5) -GrotvertEx3f (-0.5.0.5.0.5) -Glend () - // červená strana - nizhnyglbegin (gl_polygon) -glcolor3f (1).0,0.0,0.0)-gripvertEx3f (0.padesáti.padesáti.5)-gripvertEx3f (0.padesáti.5.0.5) -GrotvertEx3f (-0.padesáti.5.0.5) -GrotvertEx3f (-0.padesáti.padesáti.5) -Glend () - glflush () - glutswapbuffers ()-
Část 3 z 3:
Interaktivní programjeden. Přidat funkci specialkeys (). V zásadě je vše téměř připraveno, ale krychle je nakreslena a neotáčí. K tomu, vytvořit Funkce specialkeys (), který otáčí kostku stisknutím kláves se šipkami!
- Bylo to pro tuto funkci, že globální proměnné rotate_x a rotate_y byly oznámeny. Když stisknete klávesu "Left" a "Right" se šipkami, hodnota Rotate_Y zvýší nebo sníží o pět stupňů. Podobně změníme hodnotu rotate_x, ale již stisknete klávesy "nahoru" a dolů.
VOID SPECTILEDKEYS (INT Key Key, Int X, INT Y) {// Šipka vpravo - Zvýšení otáčení 5 stupňů (klíč == Glut_Key_Right) Rotate_y + = 5 - // Lehtová šipka - snížení otáčení 5 ° C-li (klíč == glut_key_left) rotate_y - = 5-else, pokud (klíč == glut_key_up) rotate_x + = 5-else, pokud (klíč == glut_key_down) rotate_x - = 5 - // Žádost o aktualizaci scénografie ScreenGlutPostredisplay () -}
2. Přidat glresate (). Poslední věc, kterou uděláme, je přidat řetězec, který nám umožní otočit objekt. Vrátit se do funkce ZOBRAZIT () A před popisem přední, přidejte:
// reset transformaceGledoadidentity () - // otáčení při změně hodnoty uživatele rotate_x a rotate_yglrotatef hodnoty (rotate_x, 1.0, 0.0, 0.0) -glrotatef (rotate_y, 0.0, 1.0, 0.0) - // Vícebarevná strana - přední....
3. Přidejte následující příkazy pro dvoučasové krychové škálování podél os X a Y, pro otočení krychle 180 stupňů podél osy osy, stejně jako pro pohyb krychle o 0,1 podél osy X. Zkontrolujte, zda jsou všechny příslušné příkazy, včetně dříve zadaných příkazů glrotate (), jsou zadány ve správném pořadí. Pokud se bojíte být mýlil, viz konečná verze programu na konci článku.
// Ostatní transformacegltranslatef (0.10.0, 0.0) -glrotatef (180, 0.0, 1.0, 0.0) -GLSCSCALEF (2.0, 2.0, 0.0)-
4. Kompilovat a spustit kód. Předpokládejme, že používáte GCC jako kompilátor, takže do terminálu zadejte následující příkazy:
Na Linuxu: GCC Cube.C -O CUBE -LGLLCL -LGL./ Mycuben mac: gcc -o foo foo.C -framework Glut -framework OpenGL./ MyCube Windows: GCC-Wall -Fooo foo.c -lglut32cu -lglu32 -lopengl32./ Mycube
Pět. Zkontrolujte konečný kód. Zde je konečný kód vytvořený autorem článku, ve kterém nebyly přeloženy komentáře.
//// // Soubor: mycube.C // Autor: Matt Daisley // Vytvořeno: 4/25 / 2012 // Projekt: Zdrojový kód pro výrobu krychle v OpenGL // Popis: Vytvoří okno OpenGL a kreslí 3D krychle // že uživatel se může otáčet pomocí tlačítka 3D Cube // Klávesy se šipkami // // Ovládací prvky: šipka vlevo - otočení vlevo // Šipka vpravo - Otočit vpravo // nahoru Šipka otočení nahoru // Šipka dolů- otočení dolů // -------------- -------------------------------------------- // zahrnuje // - --------------------------------------------------- -------- # zahrnovat#Zahrnout #Zahrnout #Define gl_gelxt_prototypes # ifdef __apple __ # zahrnovat # jinak # zahrnovat # endif // ----------------------------------- ------------------------- // Funkce prototypy // ------------------- ------------------------------------------------------ void displej () - neplatné speciální prostory () - // ------------------------------------------------- ------------- // Globální proměnné // ------------------------------- -------- ---------------------- Double rotate_y = 0-double rotate_x = 0 - // --------- -------- -------------------------------------------- / / Display () Funkce zpětného volání / / --------------------------------------------------------- -------- --------- Void display () // Vymazané obrazovky a z-bufferglclear (gl_color_buffer_bit // ------------------- -------- ---------------------------------- // Specialkeys () funkce zpětného volání // - -------- --------------------------------------------- ---------- Void speciallkeys (int klíč, int x, int y) {// vpravo šipka -Zvýšení rotace 5 Degreeif (key == glut_key_right) rotate_y + = 5 - // šipka doleva - Snížení otáčení 5 DEGREEELSE if (key == glut_key_left) rotate_y - = 5-Else if (key == glut_key_up) rotate_x + = 5 -ELSE if (key == glut_key_down) rotate_x - = 5 - // Request Display UpdateglutRodisplay () -} // ------------------------- --------------------------------- // Hlavní funkce // --------- ------------------------------------------------- INT hlavní (int argc, char * argv []) GLUT_DEPTH) - // Vytvoří windowglutCreateWindow ( "Super Cube") - // Povolení hloubky Z-buffer testglEnable (GL_DEPTH_TEST) - // Callback functionsglutDisplayFunc (displej) -glutSpecialFunc (specialKeys) - // předat řízení Glut pro eventsglutmainloop () - // návrat do Osreturn 0-