Az előző textúrázási OGL példában a kockánk minden oldalára ugyanazt a textúrát feszítettük fel. Sokszor viszont az a feladat, hogy egy bitmap bizonyos részét használjuk csak fel. A most következő példa nagyon egyszerű, textúraként egy olyan bitmap-et használunk amely négy kisebb részből áll. Akkor most csináljuk azt, hogy a kocka két oldalára a teljes képet, a másik négy oldalára pedig csak a textúránk egy-egy negyedét húzzuk rá, így 4 oldalon különböző képeket kapunk.
A következő kódot kaphatjuk:
Annyi csak a baj, hogy a képek fordítva vannak. Ezen úgy segíthetünk, hogy a pontok kirajzolását megfordítjuk (1.2.3.4 helyett 4.3.2.1), vagy pedig a textúra koordinátákat x, y irányban megcseréljük, de ezt már mindenki állítsa be magának! Ugye milyen egyszerű?
A példa teljes forrása itt tölthető le:
A fenti tutorial PowR által írt a http://free-pascal.extra.hu/ oldalon megtalálható OGL tutorial alapján készült el. Köszönet érte PowR-nek, valamint Kuba Attila - OGL Programozása jegyzetének!
A következő kódot kaphatjuk:
private void DrawCube() { Gl.glEnable(Gl.GL_TEXTURE_2D); Gl.glBindTexture(Gl.GL_TEXTURE_2D, texId); Gl.glBegin(Gl.GL_QUADS); { // A "piros" oldal Gl.glTexCoord2f(0f, 0f); Gl.glVertex3f(-0.5f, +0.5f, -0.5f); Gl.glTexCoord2f(0.5f, 0f); Gl.glVertex3f(+0.5f, +0.5f, -0.5f); Gl.glTexCoord2f(0.5f, 0.5f); Gl.glVertex3f(+0.5f, -0.5f, -0.5f); Gl.glTexCoord2f(0f, 0.5f); Gl.glVertex3f(-0.5f, -0.5f, -0.5f); // A "zöld" oldal Gl.glTexCoord2f(0.5f, 0f); Gl.glVertex3f(-0.5f, +0.5f, +0.5f); Gl.glTexCoord2f(1, 0); Gl.glVertex3f(+0.5f, +0.5f, +0.5f); Gl.glTexCoord2f(1f, 0.5f); Gl.glVertex3f(+0.5f, -0.5f, +0.5f); Gl.glTexCoord2f(0.5f, 0.5f); Gl.glVertex3f(-0.5f, -0.5f, +0.5f); // A "kék" oldal Gl.glTexCoord2f(0f, 0.5f); Gl.glVertex3f(-0.5f, +0.5f, +0.5f); Gl.glTexCoord2f(0.5f, 0.5f); Gl.glVertex3f(-0.5f, +0.5f, -0.5f); Gl.glTexCoord2f(0.5f, 1f); Gl.glVertex3f(-0.5f, -0.5f, -0.5f); Gl.glTexCoord2f(0, 1); Gl.glVertex3f(-0.5f, -0.5f, 0.5f); // A "lila" oldal Gl.glTexCoord2f(0.5f, 0.5f); Gl.glVertex3f(+0.5f, +0.5f, +0.5f); Gl.glTexCoord2f(1f, 0.5f); Gl.glVertex3f(+0.5f, +0.5f, -0.5f); Gl.glTexCoord2f(1, 1); Gl.glVertex3f(+0.5f, -0.5f, -0.5f); Gl.glTexCoord2f(0.5f, 1f); Gl.glVertex3f(+0.5f, -0.5f, +0.5f); // A "sárga" oldal Gl.glTexCoord2f(0, 0); Gl.glVertex3f(-0.5f, +0.5f, +0.5f); Gl.glTexCoord2f(1, 0); Gl.glVertex3f(+0.5f, +0.5f, +0.5f); Gl.glTexCoord2f(1, 1); Gl.glVertex3f(+0.5f, +0.5f, -0.5f); Gl.glTexCoord2f(0f, 1f); Gl.glVertex3f(-0.5f, +0.5f, -0.5f); // A "cián" oldal Gl.glTexCoord2f(0, 0); Gl.glVertex3f(-0.5f, -0.5f, 0.5f); Gl.glTexCoord2f(1, 0); Gl.glVertex3f(+0.5f, -0.5f, 0.5f); Gl.glTexCoord2f(1f, 1f); Gl.glVertex3f(+0.5f, -0.5f, -0.5f); Gl.glTexCoord2f(0, 1); Gl.glVertex3f(-0.5f, -0.5f, -0.5f); } Gl.glEnd(); Gl.glDisable(Gl.GL_TEXTURE_2D); }Ha lefuttatjuk, látjuk, hogy valóban négy oldalra kirakott 4 különböző képet.
Annyi csak a baj, hogy a képek fordítva vannak. Ezen úgy segíthetünk, hogy a pontok kirajzolását megfordítjuk (1.2.3.4 helyett 4.3.2.1), vagy pedig a textúra koordinátákat x, y irányban megcseréljük, de ezt már mindenki állítsa be magának! Ugye milyen egyszerű?
A példa teljes forrása itt tölthető le:
A fenti tutorial PowR által írt a http://free-pascal.extra.hu/ oldalon megtalálható OGL tutorial alapján készült el. Köszönet érte PowR-nek, valamint Kuba Attila - OGL Programozása jegyzetének!
0 megjegyzés :
Megjegyzés küldése