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és
egy. 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.
  • Kezdje el a kocka elejét. Később hozzáadjuk a színt a hat arc mindegyikéhez.
  • // 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.
  • Először - hány mérés fog működni? A Glvvertex3F 3. ábra három dimenziót jelez. Mindazonáltal 2-ben és 4 mérésben dolgozhat. Az F betű viszont azt jelzi, hogy úszó pontosvolonokkal dolgozunk. Itt azonban egész számot, kettős vagy rövid típusokat használhat.
  • Ne feledje, hogy minden pont van beállítva óramutató járásával ellentétes irányban nyilak. Bár nem túl fontos, de amikor elkezdi dolgozni a világítás, a texturálás, a nem tarifális arcok kezelésére, a szokás, hogy minden az óramutató járásával ellentétes irányban nagyon hasznos legyen az Ön számára.
  • Adja hozzá a csúcokat a Glbegin () és a Glend () vonalak között.


  • // 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.
  • A GLCOLOR3F () hívás, az egyes csúcsokat a megadott ponton a megadott színben adjuk meg. Más szóval, ha mind a négy csúcsnak pirosnak kell lennie, akkor csak egyetlen alkalommal állítsa be a színértéket, mielőtt felhívja a glvertex3f parancsokat (), és mindannyian pirosak lesznek.
  • Az alábbi elülső rész példáján láthatja, hogyan van beállítva az egyes csúcsok új színe. Amikor megteszed, megismerheted a virágok érdekes funkcióját. Mivel a poligon minden egyes csípése saját színével rendelkezik, az OpenGL automatikusan összekeveri a színeket! Az elhelyezett kód megmutatja, hogyan lehet négy csúcsot létrehozni ugyanolyan színű.
  • // 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 ()-
  • Figyeljen az utolsó két sorra. Ezek a funkciók gleflush ()- és glutswapbuffers ()-, A kettős pufferelés hatását adva, amelyet a fentieknek mondtak.
  • 3. rész: 3:
    Interaktív program
    egy. 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....
  • Ne feledje, hogy szintaxis glrotatef (), amely hasonló a glccolor3f () és a glvertex3f () szintaxisához, de mindig négy paraméter jelzését igényli. Először is - a forgásszög fokokban. A következő három tengely, amelyre forgatás történik, az X, Y, Z sorrendben. Eddig el kell forgatnunk a kockát két tengelyre, x és u.
  • Minden olyan átalakításhoz, amelyet megadunk a programot, hasonló vonalak szükségesek. Valójában az objektum elforgatását az X tengely mentén a Rotate_x érték megváltoztatja, és a tengely tengelyének forgása - a forgási érték értékének változásaként. Az OpenGL azonban egyesíti az egyik átalakítási mátrixba. Függetlenül attól, hogy hívja a kijelző funkciót, létrehoz egy átalakítási mátrixot és Gloadidentity () lehetővé teszi, hogy minden alkalommal új mátrixgal induljon meg.
  • Egyéb transzformációs funkciók, amelyeket használhat, a GLTRANSLATEF () és a GLCALEF (). Hasonlóak a glrotatef ()hez, kivéve, hogy csak három paraméter szükséges: az X, Y és Z értékek az objektum megváltoztatásához és méretezéséhez.
  • Annak érdekében, hogy minden rendben jelenjen meg, ha mindhárom átalakulást egy objektumra alkalmazzák, be kell állítania az átalakításokat a megfelelő sorrendben, nevezetesen Gltranslate, Glrotate, Glscale - és soha nem. Az OpenGL egy objektumot átalakít az alulról felfelé. Ahhoz, hogy jobban megértsük, képzeljük el, hogy az 1x1x1 kocka az összes átalakítás után fog megjelenni, ha az OpenGL a megrendeléshez (felülről lefelé), majd azt gondolja, hogy az OpenGL kezeli a kockát, az utasításokat az alulról felfelé olvasva.
  • 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-
  • Hasonló publikációk