Hogyan készítsünk egy kockát az opengl-ben
Az OpenGL egy 3D programozó eszköz, amely lehetővé teszi, hogy komplex háromdimenziós képeket hozzon létre az egyszerű formákból. Ebből a cikkből megtudhatja, hogyan kell felhívni, hogy segítsen egy egyszerű kocka, amely három dimenzióban forgatható!
Lépések
3. rész:
Kezdeti telepítésegy. Telepítse az OpenGL-t. START S OpenGL telepítési útmutatók a számítógépeden. Ha az OpenGL és a fordító már van, akkor kihagyhatja ezt a lépést, és megy a következőre.
2. Hozzon létre egy dokumentumot. Hozzon létre egy új fájlt a kedvenc kódszerkesztőben, és mentse el a MyCube-ként.C
3. Add #Includes. Itt vannak a szükséges #include irányelvek, amelyekre szüksége van. Fontos megjegyezni, hogy a különböző operációs rendszerekre vonatkozó irányelvek eltérőek, ezért mindent meg kell választani, hogy a program egyetemes legyen, és bármely rendszerben elindítható.
// tartalmazza a # tartalmazza#Inlude #Inlude #define gl_gelxt_prototypes # ifdef __apple __ # Tartalmazza #endif # mást #
4. A funkcionális prototípusok és a globális változók hozzáadása. A következő lépés funkcionális prototípusokat hirdet.
// Funkcionális prototípusokVoid kijelző () - Void specialKeys () - // Global VariablesDEBLE ROTATE_Y = 0-DOULT ROTATE_X = 0-
öt. Állítsa be a fő () funkciót.
INT FŐ (INT ARRGC, CHAR * ARGV []) // inicializálja a glut és a feldolgozási felhasználói paraméterekglutinit (& argc, argv) - // Dupla pufferablak, z-pufferizáció és színséma valódi colorglutinitdisplaymode (glut_double)
3. rész: 3:
Kijelző () funkcióegy. Értsd meg a kijelző () funkció hozzárendelését. A CUBA rajzon végzett munka a törékeny vonalakra esik. Az ötlet általában a következők: A kocka hat külön arcát húzza ki, és helyezze őket a megfelelő pozíciókba.
- Minden arcra négy szöget fog meghatározni, és az OpenGL vonalakkal csatlakozik, és kitölti a választott színt. Az alábbiakban elmondja, hogyan kell csinálni.
2. Adja hozzá a GLACleCle () funkciót. Először is, dolgozik ezzel a funkcióval, szükségünk van Tiszta szín és z puffer. Ennek nélkül, az új minta alatt öregszik, és a program által készített tárgyak helytelenül vannak elrendezve.
Void kijelző () gl_depth_buffer_bit)-
3. Adjunk hozzá Glbegin () és Mynend (). Az OpenGL objektumok különböző poligonok kombinációi. Csapat Glbegin () Engedjék meg, hogy egy tárgyat rajzoljunk veled - olyan, mint egy ceruza, amelyet rajzolsz, anélkül, hogy papírból szakadna. A ceruza elszakítása a lapról, és elkezd rajzolni valami újat, szüksége van egy csapatra Shend (). Ebben a cikkben a GL_POLYGON-ot a kocka minden szélét húzzuk, bár más paraméterek, például gl_line, gl_quad vagy gl_triangle használhatók más formák létrehozásához.
// Multicolor Side - FrontGlbegin (gl_polygon) - // versek Add hozzá a következő Stepglend ()-
4. Adja hozzá a glvertex3f () funkciót. Most, hogy elmagyarázta a programot, amelyet egy sokszög rajzolásához szeretne elkezdeni, szüksége van Állítsa be a csúcsokat Tárgy. A glvertex funkciónak számos formája van, amelynek alkalmazása attól függ, hogy mit akarsz tenni az objektumhoz.
// Multicolor Side - FrontGlbegin (GL_POLYGON) -GRVEX3F (-0.ötven.ötven.5) - // p1grvertex3f (-0.5.0.ötven.5) - // p2glvertex3f (0.5.0.ötven.5) - // p3grvertex3f (0.ötven.ötven.5) - // p4glend ()-
öt. Adja hozzá a GLCOLOR3F () funkciót. A GLCOLOR sokféleképpen működik a glvertexhez. Pontok A rövid, egész, dupla vagy úszó adattípusokat állíthat be. Minden szín értéke 0 és 1 között van. Minden nullusz fekete, minden egység -, fehér. 3. ábra A GLCOLOR3F () az RGB színsémát az alfa-csatorna nélkül jelöli. Az Alpha Channel színek felelősek az átláthatóságért. Módosításához alpha érték, felhasználása glcolor4f () az utolsó paraméter 0-tól 1, azaz, a átlátszatlan átláthatóság.
// Multicolor Side - FrontGlbegin (gl_polygon) -glcolor3f (1.0, 0.0, 0.0) -grvertex3f (0.ötven.ötven.5) - // p1 redglcolor3f (0.0, 1.0, 0.0) -grvertex3f (0.5.0.ötven.5) - // p2 GreenGlcolor3f (0.0, 0.0, 1.0) -gRVEREX3F (-0.5.0.ötven.5) - // p3 blueglcolor3f (1.0, 0.0, 1.0) -gRVEREX3F (-0.ötven.ötven.5) - // p4 Purpleglend ()-
6. Rajzoljon más arcokat kubai. Jobb, természetesen, ha magadnak találja meg a kocka hátralévő részét és a csúcsokat, hanem az egyszerűség kedvéért számítottuk őket. A kód B A végső funkció megjelenítése () lent.
// fehér oldal - hátsóglbegin (gl_polygon) -glcolor3f (1.0,1.0, 1.0) -grvertex3f (0.ötven.ötven.5) -GRVERTEX3F (0.5.0.ötven.5) -GRVEREX3F (-0.5.0.ötven.5) -GRVEREX3F (-0.ötven.ötven.5) -glend () - // Violet Side - RuralGlbegin (gl_polygon) -glcolor3f (1.0,0.0,1.0) -grvertex3f (0.ötven.ötven.5) -GRVERTEX3F (0.5.0.ötven.5) -GRVERTEX3F (0.5.0.5.0.5) -GRVERTEX3F (0.ötven.5.0.5) -glend () - // zöld oldal - balglbegin (gl_polygon) -glcolor3f (0.0,1.0,0.0) -gRVEREX3F (-0.ötven.5.0.5) -GRVEREX3F (-0.5.0.5.0.5) -GRVEREX3F (-0.5.0.ötven.5) -GRVEREX3F (-0.ötven.ötven.5) -glend () - // kék oldal - UpperGlbegin (gl_polygon) -glcolor3f (0.0,0.0,1.0) -grvertex3f (0.5.0.5.0.5) -GRVERTEX3F (0.5.0.ötven.5) -GRVEREX3F (-0.5.0.ötven.5) -GRVEREX3F (-0.5.0.5.0.5) -glend () - // piros oldal - Nizhnyglbegin (gl_polygon) -glcolor3f (1.0,0.0,0.0) -grvertex3f (0.ötven.ötven.5) -GRVERTEX3F (0.ötven.5.0.5) -GRVEREX3F (-0.ötven.5.0.5) -GRVEREX3F (-0.ötven.ötven.5) -Glend () - glefush () - glutswapbuffers ()-
3. rész: 3:
Interaktív programegy. Adja hozzá a specialKeys () funkciót. Elvileg minden szinte készen áll, de a kocka csak húzódik, és nem forog. Ehhez hozzon létre SpecialKeys () funkció, amely a nyílbillentyűk megnyomásával forgatja a kockát!
- Ez volt a funkció, hogy a globális változók Rotate_x és Rotate_y-t hirdették. Ha megnyomja a "Bal" és a "Jobb" nyílbillentyűket, a Rotate_y érték öt fokig növekszik vagy csökken. Hasonlóképpen megváltoztatjuk a ROTATE_X értékét, de már megnyomja a "UP" és a lefelé mutató nyílgombokat.
Void specialKeys (int billentyű, int x, int y) {// Jobb nyíl - 5 fokos fokozat növelése (billentyű == glut_key_right) Rotate_y + = 5 - // Bal nyíl - 5 fokos elforgatás csökkentése, ha (billentyű == glut_key_left) rotate_y - = 5-mesh, ha (billentyű == glut_key_up) rotate_x + = 5-más, ha (billentyű == glut_key_key_down) rotate_x - = 5 - // A screenGlutstredisplay () -} frissítés kérése
2. Add Glrotate (). Az utolsó dolog, amit meg fogunk tenni, hozzáadunk egy olyan stringet, amely lehetővé teszi számunkra, hogy forgassa az objektumot. Visszatérés a funkcióhoz Kijelző () És az elülső leírás előtt adjunk hozzá:
// Reset transzformationsglloadidentity () - // forgatás a felhasználó forgása_x és rotate_yglrotatef értékek (Rotate_X, 1.0, 0.0, 0.0) -glrotatef (Rotate_Y, 0.0, 1.0, 0.0) - // Multicolor Side - Front....
3. Adja hozzá a következő parancsokat a kétszoros kocka méretezéséhez az x és y tengelyek mentén, hogy egy kocka 180 fokot forgassa a tengely tengelye mentén, valamint a kocka áthelyezése 0,1-el az X tengely mentén. Győződjön meg róla, hogy az összes releváns parancs, beleértve a korábban megadott Glrotate () parancsokat, a megfelelő sorrendben van megadva. Ha félsz, hogy tévedjen, nézze meg a program végleges változatát a cikk végén.
// más transzformációkglonslatef (0.10.0, 0.0) -glrotatef (180, 0.0, 1.0, 0.0) -glscalef (2.0, 2.0, 0.0)-
4. Fordítsa el és futtassa a kódot. Tegyük fel, hogy a GCC-t fordítóként használja, ezért adja meg a következő parancsokat a terminálhoz:
Linux: GCC kocka.c -o kocka -lglut -lgl./ Mycuben Mac: gcc -o foo foo.C-Hajtás Glut -framework OpenGL./ MyCube Windows: gcc -wall -fooo foo.C-lglut32cu -lglu32 -lopengl32./ MyCube
öt. Ellenőrizze a végső kódot. Itt van a cikk szerzője által létrehozott záró kód, amelyben a megjegyzéseket nem fordították le.
//// fájl: MyCube.C // Szerző: Matt Daisley // Létrehozott: 4/25 / 2012 // Projekt: forráskód a kockára az OpenGL // Leírás: OpenGL ablakot hoz létre, és 3D-s kockát húz, hogy a felhasználó elforgathatja a Nyílbillentyűk // // Vezérlők: Balra nyíl-forgatás balra // Jobb nyíl - Forgassa jobbra // felfelé nyíl - Forgatás Up // Learrow - Forgatás le // -------------- -------------------------------------------- // magába foglalja // - -------------------------------------------------- - ------- # tartalmazza#Inlude #Inlude #Define gl_gelxt_prototypes # ifdef __apple __ # közé tartozik # más # # endif // ----------------------------- - ------------------------ // Funkció prototípusok // ------------------- --- -------------------------------------- Void kijelző () - Void SpecialKeys () - // ------------------------------------------- ----- -------- // globális változók // ------------------------------- ------- ---------------------- Double Rotate_Y = 0-Double Rotate_X = 0 - // ------- ------- ------------------------------------------ / / kijelző () visszahívási funkció / / -------------------------------------- ------- --------- Void kijelző () // Clear Screen és Z-Bufferglare (gl_color_buffer_bit // ------------------ ------- --------------------------------- // specialKeys () visszahívási funkció // - ------- ------------------------------------------- --------- Void specialKeys (INT KEY, INT X, INT Y) {// Jobb nyíl - növeli a forgatást 5 fokig (billentyű == glut_key_right) Rotate_y + = 5 - // Bal nyíl - csökkenti a forgatást 5 dipelíziával, ha (kulcs == glut_key_ Maradt) rotate_y - = 5-mesh, ha (billentyű == glut_key_up) rotate_x + = 5-más, ha (billentyű == glut_key_down) Rotate_x - = 5 - // kérés megjelenítése UpdEplutrodisplay () -} // ------ -------------------------------------------------- - - // Main () függvény // ----------------------------------- --- ------------------ INT Main (int Argc, Char * Argv []) glut_depth) - // Ablak bezárásaglutreewindow ("Félelmetes kocka") - // engedélyezése Z-Buffer Depth Testglenable (GL_DEPTH_TEST) - // Visszahívás FunctionsGlutdisplayFunc (Display) -GlutspecialFunc (SpecialKeys) - // Pass Control a Glut a eventsglutmainloop () - // Vissza Osreturn 0-