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:
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