2010. március 16., kedd

Tao Start 07 - Textúrázás alapfokon (II.)

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.

OGL Textúrázás, második felvonás

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