Háromdimenziós grafika saját kezűleg, a PC World, kiadói „nyitott rendszer”

ARUBA INSTANT WI-FI: egyszerű, hatékony, olcsó

Információ a könyvtár működését
OpenGL könyvtár lehet úgy, mint egy robot, amely egy időben az egyes állami és elvégzi a beérkezett kérelmek alapján vele. Más szóval, a könyvtár egy sor belső változókat, amelyek hívtuk funkcióit. Az e változók értékeit meg lehet változtatni, és ezzel elérni a kívánt hatást, a megfelelő funkciót. Például, az eljárás

változtatni a jelenlegi kékre. Miután ezt a parancsot, az összes objektum jön létre a kék szín.
Annak érdekében, hogy a hatás az animáció, vagyis A tárgyak mozgása, és változtatni a tulajdonságait, folyamatosan végezzük frissített képeket. A sebesség újrarajzoláskor a jelenet (száma másodpercenként) elsősorban attól függ a teljesítmény a grafikus processzor és természetesen, a rábízott feladatokat. Ennek megfelelően, a lejátszási sebesség változik. Annak érdekében, hogy egységes video lejátszás, akkor a frissítést, hogy mesterségesen lassítani, kötötte az óra.
Frissítési mechanizmus a ciklusban valósul használata négy funkciója van:
érvényteleníti init (void); - ez a végrehajtott műveleteket előre kezdete előtt a fő hurok, például inicializálás változók, paraméterek beállítása;
void alakíts (int, int); - ez a kapcsolódó műveletek méretezés a jelenetet, elkövetett, amikor az ablak átméretezése;
void kijelző (void); - a fő része, rajz összes objektumát a helyszínre;
void idle (void); - a funkciót aktiválja minden szakaszában a ciklus. Jellemző, hogy a probléma - a növekedés a számláló, amely egyenértékű az idő és a hívás jelenik meg.
Ezután átadjuk a könyvtár mutató ezeket a funkciókat, és futtassa a fő hurok.
projekt fájlok és a kód magam (file OpenGLSample.cpp) megtalálja a csatolt magazin „PC World-ROM-on.”

Nyomtató alapvető formák
Először hozzon létre az eget és a földet.
Ehhez használjuk a módszer segítségével grafikus primitívek a set-top. Koordinátái csúcsok meghatározott eljárás
glVertex3d (GLdouble x, GLdouble y, GLdouble z),
ahol GLdouble - típusú, és alakítjuk a kettős vissza.
A csúcsokat egyesítjük egy objektum által a szerkezet:
glBegin (GLenum mód);
glVertex3d (x1, y1, z1);
.
glVertex3d (xn, yn, zn);
kéreg ();

Itt a mode paraméter határozza meg, hogy milyen az értelmezés a vertex listán. Íme néhány értékét:
GL_POINTS - hozott létre, pont;
GL_TRIANGLES - háromágyas csúcsok meghatározni az egyéni háromszögek;
GL_QUADS - négy csúcsa egy adott egyén quadok.

Megjegyzés koordináta
Nem kötődünk elmélethez, azt mondhatjuk, hogy valóban törődnek az abszolút koordináta értékeket és szignifikáns összefüggés a kettő között. Tervezési szakaszban lehet bármely legkényelmesebb számokat. Állítsa be a kamera pozíció segít glViewPort () eljárást.
Föld lesz egy téglalap síkjában fekvő y = 0, szükségünk van az ég, mint két téglalap - az egyik a síkban z = papírhossz, a másik vízszintes síkban z = magassága. Így

érvényteleníti DrawGround () glColor3f (1.0,1.0,1.0);
glBegin (GL_QUADS);
glVertex3d (szélesség, -1.0, hosszúság);
glVertex3d (szélesség, -1.0, papírhossz);
glVertex3d (-width, -1.0, papírhossz);
glVertex3d (-width, -1.0, hosszúság);

glVertex3d (szélesség, -1.0, papírhossz);
glColor3f (0.10,0.20,0.30);
glVertex3d (szélesség, magasság, papírhossz);
glVertex3d (-width, magasság, papírhossz);
glColor3f (0.35,0.65,0.99);
glVertex3d (-width, -1.0, papírhossz);

glColor3f (0.10,0.20,0.30);
glVertex3d (szélesség, magasság, papírhossz);
glVertex3d (-width, magasság, papírhossz);
glVertex3d (-width, magasság, hosszúság);
glVertex3d (szélesség, magasság, hosszúság);
kéreg ();
>
Itt, a szín van megadva RGB formátumban valós számok a [0,1] intervallumban. Amikor egy összehasonlító szín átláthatóság a RGBA formátumban eljárások alkalmazásával glColor4d (R, G, B, alfa).
Valójában ezt az elvet - a csúcsok halmaza és vertex csoportok megértéséhez, hogy egyes objektumok - és modellezés alapú grafikus. Hogy az összetett objektumok, például a modell az emberek, felhők, fű, meg kell kérdezni egy csomó (néha csillagászati) a csúcsok száma, és a számítás koordináta manuálisan történik. De ne ess kétségbe, mert az automatizálás fejlődésének ez a folyamat megindult.

világítás
Megvilágítás alá színváltozás utal festés a tárgy, attól függően, hogy helyét képest a fényforrást. Alapértelmezésben van egy forrás a szórt fény, és felveheti újak a helyzetüket, a szórási szög, szín, és egyéb paramétereket. Világítás eljárás tartalmazza glEnable (GL_LIGHTING) be és ki glDisable (GL_LIGHTING).
A megvilágítás a tárgy, a típus leadta az árnyékok és a saját árnyékolás függ az irányt a merőlegesek a magasba, valamint a tárgy anyagától.
Normals glNormal3d eljárás set (x, y, z), arra használjuk, hogy glVertex3d ().
Rendelni a tárgy anyaga előtt szükséges rajz csúcsok esetén az alábbi eljárás szerint:

GLfloat emittáló [4] = <0.0f,0.0f,0.0f,0.0f>;
GLfloat diffúz [4] = <0.98f,0.836f,0.35f,1.0f>;
GLfloat specular [4] = <0.0f,0.0f,0.0f,0.0f>;
GLfloat környezeti [4] = <0.98f,0.836f,0.35f,1.0f>;
glMaterialfv (GL_FRONT_AND_BACK, GL_EMISSION, kibocsátóréteg);
glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE, diffúz);
glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, tükröződő);
glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT, környezeti);
glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 10);
glEnable (GL_COLOR_MATERIAL);

Miután rajz egy tárgyat ki kell kapcsolnia az opciót:

Ha OpenGL könyvtárakat kell követni egy egyszerű szabályt -, hogy visszatérjen minden megváltozott jellemzőit a kiindulási állapotban közvetlenül használat után. Ez takarít meg sok időt és energiát, és optimalizálása és eltávolítja a felesleges parancsokat, amit tehetünk az utolsó szakaszban, amikor az bizonyos, hogy bármilyen változás a projekt nem kerül sor.

állományjavító
Textúraleképezés teszi egy tárgy reális és színes, hanem lehetővé teszi, hogy elérni valamilyen speciális effektusok. Mint egy textúra, akkor használhatja a képek BMP formátumban. Fogjuk alkalmazni a textúra betöltés funkció, amelynek végrehajtása látható BmpLoad.cpp fájlt. Íme a munkát végzik a textúra:

  1. Egy tömb textúrák [ntext] GLuint típusú értékek, amennyiben keresztül glGenTextures eljárás (ntext, textúrák) azonosítók rögzített. Rájuk a későbbiekben a „kapcsolt” őket textúra.
  2. A bájttömböt olvasható fájl tartalmát, majd a tömböt tölt be egy olyan belső erőforrás-könyvtár (lásd. OpaqTexture eljárás), az utóbbi kapcsolatot létesít a kiválasztott azonosító értékét id textúra.
  3. Amikor hívja glBindTexture (GL_TEXTURE_2D, id); aktuális könyvtár készletet a textúra objektumot.

A földet a sivatagban.
Van egy BMP-fájlt képpel homok. Betölteni azt a fentiek szerint algoritmus és a „nyújtsd a” téglalap a földön. Ahhoz, hogy ezzel az eljárással glTexCoord2d (i, j), ahol i és j - textúra koordinátákat, textúrát mutatja a négyzet [0,1] x [0,1]. Ezután meg kell hívni glVertex, és a tetejére kerül „csuklós” textúra pontot. Ezután fokozatosan „maszatos” egy nagy téglalap. De meg kell győződnünk arról, hogy a textúra többször megszorozva az egész földön. Ehhez, rajzoljon egy téglalapot a talaj nem szilárd, és a mátrix formájában amely a kis téglalapok, amelyek mindegyike „feszített” textúra. Bemutatjuk téglalapok sávbeállító GL_QUAD_ szalag glBegin. Ez a művelet egyesíti egy pár pontot a szegmensben tulajdonít nekik, hogy az előző pár, és kezeli mind a négy, mint egy négyszög, majd csatlakozik hozzá a következő pár stb Az eredmény egy sávban.
Leírása a föld olyan, mint a következő:

glNormal3d (0.0, 1.0, 0.0);
int k = (int) (szélesség / hosszúság);
glBindTexture (GL_TEXTURE_2D, textúrák [0]);
(int i = 0; i Elhelyezkedés szükséges fájlokat a rendszer

Kapcsolódó cikkek