Az OpenGL - Gyorsindítás

2.1 OpenGL Set

Kezdjük a legfontosabb, telepítse a szükséges szoftvert. Azt feltételezik, hogy a Windows már telepítve van és fut, különben megvette a rossz könyv. Először állítsuk MSVisualC ++ 6.0 és jdk113 vagy nagyobb, ha azt szeretné tudni írásban Java-kisalkalmazások OpenGL. De csak akkor kell egy java a hetedik fejezetben. Másodszor, meg kell a végrehajtása a OpenGL könyvtárban. Benne van a Windows95 / NT - ez opengl32.dll könyvtár glu32.dll. Azt is figyelembe az OpenGL könyvtár a Silicon Graphics. Szerelési utasításokat is. Meg kell másolni és opengl.dll glu.dll a windows \ system, és tegye opengl.lib, glu.lib a lib alkönyvtárban, ahol telepítette MSVisualC ++. Harmadszor, meg kell négy az én sablon program, amely a kezdeti csontváz, hogy akkor majd töltse funkciót. Hol kap OpenGL a Silicon Graphics, Magician, JDK és a programom sablonok, lásd az „A” alkalmazást.

2.2 Nézzük jelentenek valamit

A legegyszerűbb tárgyat, amely lehetővé teszi, hogy a teljes erejét az OpenGL, egy gömb. Nézzük próbálja ábrázolni azt. Ehhez hozzon létre egy új projektet VisualC ++, kövesse az alábbi lépéseket:

  1. Kezdés MSVisualC ++ 6.0
  2. Kattintson a menü Fájl-> Új-> Win32 konzol alkalmazás.
  3. Válassza ki a könyvtárat és a projekt nevét, Enter - gömb, majd az OK gombra.

Folyton valamennyi projekt a D meghajtót a projektek könyvtárban. Projektek elágazások további alkönyvtárak adatbázisokkal, közművek, grafikákat és Java-alkalmazásokat. Általánosságban véve, próbálja hozzárendelni ésszerű nevek és készítsen egy ésszerű könyvtár struktúrát. Ez egy nagyon komoly probléma.

  • Válasszon egy üres Project, kattintson a Befejezés gombra.
  • A könyvtárat másolja a projekthez glaux.c én sablont, és nevezd sphere.c
  • Csatolja a projekt. Projekt-> Hozzáadás a Projekt-> Files
  • Kattintson BuildService> Set Active Configuration, és állítsa be a projekt típusa szférában - Win32 Release
  • Ezután kattints a Projekt-> Beállítások-> összekötőcsoport-> Object / Library modulok és add opengl32.lib, glu32.lib és glaux.lib
  • Helyezze be a funkció megjeleníti a következő kódot:
  • Most lefordítani és futtatni a programot.
    Menü BuildService> Execute Sphere.exe
  • Hogyan tegye OpenGL

    A forrás fájl itt. Végrehajtható itt.

    Most pedig azt a célt a két funkció beszrt 9. bekezdésben glColor3d függvény beállítja az aktuális szín, ami levonható formák. Itt meg kell magyarázni, hogyan kell beállítani a szín és az általános filozófia OpenGL funkció neve. Szín beállítása négy paraméter: piros, kék, zöld és átlátszó. Ezek a paraméterek tartományban változhat nullától egy. A negyedik paraméter, már nincs szükség, így hívtuk glColor három paramétert. Ebben az esetben a negyedik paraméter, az átláthatóság, az alapértelmezett feltételezzük, hogy egység, azaz a teljesen átlátszatlan, zero - lesz teljesen átlátszó. Mivel a C nyelv nem túlterhelt függvények, a következő szintaxist hívni funkciók - FuncionName [n = paraméterek száma] [típus] lehetőséget. A következő típusok:

    • b - GLbyte bájt
    • s - GLshort rövid egész
    • i - Glint egész
    • f - GLfloat frakcionált
    • d - GLdouble frakcionált kétszeres pontosságú
    • ub - GLubyte előjel nélküli byte
    • nekünk - GLushort unsigned short integer
    • ui - GLuint aláíratlan
    • v - n paraméterek egy tömbben az ilyen típusú

    Esetünkben - glColor3d - azt jelenti, hogy a függvény három paramétert GLdouble típusát. Ez is okozhat glColor3i, azaz Három paramétert Glint típusát. Ha a paraméter típusú rövid egész, egész szám, vagy a bájt hosszú, a szín komponenst adni a [0,1] tartományban. Hoz ez a tartomány végezzük a következő módon. Abban az esetben, előjel nélküli típus a lehető legnagyobb értéke az egységbe, nulla, nulla. Ha a jel a legnagyobb érték az egység vagy mínusz egység, mínusz egy és csökken az egység. Wise, és csak nem értem. A gyakorlatban, akkor használja a három esetben le az alábbi példát. Például, egy előjel nélküli bájt csökkentést szerint végezzük, a következő képlet: znachenie_peremennoy_hranimoy_v_bayte / 255, hiszen A maximális száma 255, tárolt egy bájt. GlColor3dv funkció azt jelenti, hogy a paraméterek továbbított GLdouble tömb három elemet. Például:

    auxSolidSphere funkció - hívja fel a gömb a származási és a készülék méretét. Világítás, ami lámpák és telepítése kamera helyzetét figyelembe vesszük később, de most nézzük már elsajátította a jobb, és úgy érzi, hogy minden egyszerű. az én irányba, az első program, amit már írtam. Most követi független gyakorlatokat.

    2.3 Feladat: „háromdimenziós alakzatok”

    AuxSolidSphere Cserélje funkció függvénye az alábbi megfelelő paraméterekkel. A paraméter értékek sorrendjének beállításához egy - 0,5-1,7. Ha megad egy mérete túl kicsi, ez a szám lesz nehéz észrevenni; ha túl nagy, akkor lesz csonka. Ez annak a ténynek köszönhető, hogy a széle, mert jön ki a monitort.

    • auxSolidCube (szélesség) // kocka
    • auxSolidBox (szélesség, magasság, mélység) // box
    • auxSolidTorus (R, R) // Torr
    • auxSolidCylinder (R, magasság) // henger
    • auxSolidCone (R, magasság) // kúp
    • auxSolidIcosahedron (szélesség) // poliéderek
    • auxSolidOctahedron (szélesség)
    • auxSolidTetrahedron (szélesség)
    • auxSolidDodecahedron (szélesség)
    • auxSolidTeapot (szélesség) // felhívja Maker

    A fenti funkciók, akkor dolgozzon egy szilárd forma. Ha kell felhívni a huzal írása helyett tömör huzal.

    2.4 Az átmenet az új koordinátákat

    Továbbra is felhívni háromdimenziós alakzatokat. Az előző részben megtanultuk, hogyan kell felhívni a primitív háromdimenziós tárgyakat. De a probléma az, hogy dolgozzák csak a származás, azaz a (0,0,0). Annak érdekében, hogy ábrázolja a hatálya alá a pont (X0, Y0, Z0), szükséges, hogy mozog a származási, hogy a pontos, azaz meg kell menni az új koordinátákat. Ez az eljárás meglehetősen gyakori programozási grafika és animáció. Gyakran előfordul, hogy nagyon kényelmes, hogy eltolja a koordinátáit egy új pontot, és kapcsolja őket a kívánt szögbe, és a számítások jelentősen leegyszerűsödik. Egy konkrét példa az alábbiakban bemutatjuk, amikor megtudjuk, programozni animáció. És amíg megtanulják, hogyan kell mozgatni az új koordinátákat. Mozgatni az új koordinátákat OpenGL két funkciója van:

    Az első funkció eltolja az eredete a koordináta-rendszer (D x, D y, D z). Második - j forog szögben az óramutató járásával ellentétes körül a vektor (x0, y0, z0). Most azt kell mondani, körülbelül két nagyon fontos funkciója van:

    Ezek célja, hogy megőrizze és visszaállítja a jelenlegi helyzethez képest. Én nem itt, hogy egy példát, hogyan kényelmetlen áthelyezni egyik koordináta rendszerből a másikba, és emlékszik minden konverzió. Sokkal könnyebb a segítségével glPushMatrix (), hogy mentse az aktuális helyét, majd mozgassa, spin, ahogy tetszik, majd hívja glPopMatrix menjen vissza a régi koordinátákat. Tehát, itt az ideje, hogy a kísérlet. Hozzon létre egy új projektet az elõzõ lépések alatt 2.2. Csak nevezd meg sphere2. Először is vizsgáljuk meg a váltás a koordinátákat. Helyezze be a funkció megjeleníti a következő kódot:

    Most lefordítani és futtatni a programot.
    Menü BuildService> Execute Sphere.exe

    Hogyan tegye OpenGL

    A forrás fájl itt. Végrehajtható itt.

    2.5 Feladat: „Sorolja fel a háromdimenziós alakzatok”

    A szolgáltatások listája a korábbi gyakorlat, felhívni a számok két oszlopot. Bal vezetéket. Jobb szilárd.

    Megjegyzés: Szeretném itt megjegyezni, hogy a verzió a Microsoft glaux.lib már a következő hiba: henger és kúp dolgozzák mindig vagy vezetékes vagy szilárd. Ha Ön az első henger / kúp egy programban húzott huzal, akkor továbbra is az összes henger / kúp fog kiosztani. Ennek megfelelően, ha az első volt egy szilárd alak, akkor minden lesz további szilárd. Ezért, ne ess kétségbe. A Microsoft bug. Azt is tetszik, az alábbiakban megmutatom, hogyan lehet megkerülni ezt a problémát.

    Hogyan tegye OpenGL

    A forrás fájl itt. Végrehajtható itt.

    2.6 forgó koordináta

    Most tekintsük a forgatás koordináták. Hozzon létre egy új projektet hívott Forgatás. Nevezze glaux.c a rotate.c A kijelző funkció, illessze be a következő kódot:

    Mint látható, a kúp van kapcsolva abszolút koordinátákkal. Így annak érdekében, hogy felhívja a forma nem a származás, szükség van:

    1. menteni az aktuális tartózkodási helyét
    2. mozgatni (glTranslated), forgassa (glRotated)
    3. felhívni, amit akartak
    4. menj vissza a régi koordináta

    GlPushMatrixglPopMatrix hívások ágyazhatók, azaz

    Természetesen a hívások száma glPopMatrix meg kell egyeznie a számot glPushMatrix hívást, különben elrepül a jelenet egy ismeretlen irányba. A maximális megengedhető mélysége fészkelő glPushMatrix / glPopMatrix meghatározása a következő:

    OpenGL-szabvány, hogy a mélység a verem nem lehet kevesebb, mint 32.

    2.7 Feladat: „Hóember”

    Funkció használatával glRotate, rajzoljon egy hóember. Három szféra sapka - kúp orr - a kúpot is, a szem - egy terület a száj is, hogy egy tér - glBox.

    Hogyan tegye OpenGL

    A forrás fájl itt. Végrehajtható itt.

    Megjegyzés: Van egy másik hiba glaux.lib a Microsoft. Úgy tűnik, az utolsó, amit találtam. Funkció aux [Szilárd / Wire] Henger festés előtt henger váltások és forog koordinátákat. Tehát, ha már eltolódott, és megfordult a helyzet, a hengert húzott nem hol várható. A felhasználók a Microsoft, természetesen, akkor biztosítani kell, hogy ezt a funkciót, és felajánlja, hogy töltse le a rendszeres ServicePack. ;-) Az alábbi I. mondani, hogyan lehet több helyes felhívni hengerek és kúpok. Ha nem tud várni, a következő a korrigált kód ezeket a funkciókat. A legtöbb, amit most hagyja ki és lépni a következő nagyon érdekes rész - „Animáció”. És ez jobb. A hiba kijavítására ad vissza, ha a kis mester. De úgy döntöttem, hogy a kód egy Microsoft hibajavítások itt. Akkor újjáépíteni glaux.lib helyett a megfelelő kódot shapes.c fájlt. Hol találok a forráskódot, lásd az „A” alkalmazást. Véleményem azok az MSDN.

    2.8 animáció

    Nézzük feléleszteni a hóember, és adjunk hozzá az interaktivitás. Ehhez felhívni keretek és reagálni a külső eseményekre a billentyűzet vagy az egér. Felhívni a személyzet kell valahogy megkülönböztetni. Ehhez mutatunk be változó funkció megjelenítési idő int típusú a módosító statikus. Hozzon létre egy új projektet a kijelzőn, írja be az alábbi függvényt: „static int time = 0;”. Módosítót statikus azt jelenti, hogy a változót tároló, ha a funkció. A kezdeti érték, akkor nullázódik. Ha a kijelző nem függ az időtől, a keret számláló nem tud lépést tartani. Most adjuk hozzá a következő sorokat:

    Az alkalmazás futtatása, látni fogja, hogy hóember bejárt az X tengely mentén Ez hogyan lehet csinálni animáció. Ie Most a koordinátákat a tárgyak számítják az idő függvényében. Adtam egy egyszerű példát. Általánosságban elmondható, hogy a komplex grafikai programozás, akkor kell koordinátáinak kiszámításához az egyes objektumok alapján az idő.

    Hogyan tegye OpenGL

    A forrás fájl itt. Végrehajtható itt.

    Annak érdekében, hogy válaszoljon a billentyűzet vagy az egér, meg kell határozni, hogy a funkció kerül meghívásra, amikor az események láncolatába a billentyűzet vagy az egér. A billentyűk definiál függvényt a következő prototípus void CALLBACK FunctionName (void), és telepítse a felvezető egy adott gomb - auxKeyFunc (key_code, FunctionName); key_code látni glaux.h. Példa: auxKeyFunc (AUX_LEFT, FunctionName) Itt állítsa be FunctionName függvényében, hogy fogják hívni, ha megnyomja a billentyűzeten „felfelé nyíl” gombot.

    Egér telepítése egér eseménykezelő függvényt hívja auxMouseFunc (int gombot, int akció, AUXMOUSEPROC). Változtatható gomb lehet állítani, hogy - AUX_LEFTBUTTON, AUX_MIDDLEBUTTON, AUX_RIGHTBUTTON. Változó cselekmény a következő értékek - AUX_MOUSEDOWN, AUX_MOUSEUP, AUX_MOUSELOC. AUXMOUSEPROC funkciót kell egy prototípus - void CALLBACK FunctionName (AUX_EVENTREC * esemény), amely a meghatározás szerint AUX_EVENTREC

    További információkért tekintse meg a referencia kézikönyvek és forráskódját OpenGL Kiegészítő Könyvtár. Ez a könyv arról szól, OpenGL inkább programozás felhasználói felületeket. Ezért az ilyen jellegű információkat akkor kell menni a megfelelő referencia kézikönyvben Win API, MFC, Java, stb

    A FunctionName nem változtathatja meg a globális változó, és ennek megfelelően kijelző funkció levonja keretek függően változó.

    2.9 Feladat: "Arkanoid"

    Írja játék „Arconoid” - egy repülő labdát, alsó pad, a felhasználó a nyilakkal vagy az egér állvány, és elriasztja a labdát.

    Hogyan tegye OpenGL

    A forrás fájl itt. Végrehajtható itt.

    2.10 Összefoglaló

    Ebben a könyvben, ez a fejezet vége. Megtanultuk, hogyan kell felhívni a háromdimenziós tárgyakat és nem interaktív animációk segítségével ezeket az objektumokat. Ez általában elég, hogy írjon egy primitív programokat. A következő fejezetben fogunk tanulni, hogyan kell felhívni primitív tárgyak: pontok, vonalak, vonalláncok és sokszögek.