Az obj file formátum

A obj egy nagyon egyszerű, szöveges file formátum 3D-s modellek tárolására.

Szinte minden 3D szerkesztő/modellező porogram tud ebbe a formátumba exportálni.

Egy egyszerű obj file szerkezete

# Blender3D v248 OBJ File: 
# www.blender3d.org
v 1.000000 -0.000000 -1.000000
v 1.000000 0.000000 1.000000
v -1.000000 0.000000 1.000000
v -1.000000 -0.000000 -1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vn 0.000000 1.000000 -0.000000
usemtl (null)
s off
f 1/1/1 4/2/1 3/3/1 2/4/1

Ez a model egy textúrázott négyzetet ír le.

A v sorok vertex-eket definiálnak, automatikusan sorszámozva 1-től, a vt sorok textúra koordinátákat, a vn sorok pedig felületi normál vektorokat.

A tényeges felület darabokat az f sorok határozzák meg, amit whitespace-szel elválasztva számcsoportok követnek. Egy-egy csoport a felület egy csúcsát adja. (Egy f sor megadhat szakaszt, háromszöget vagy négyszöget is)

A számcsoportok szerkezete: v/vt/vn, amiből csak a v a kötelező. Ezek sorra:

Ha a vt vagy a vn tagokat elhagyjuk, a formátum a következő példa szerint alakul:

# csak textura
f 1/1 4/2 3/3 2/4
# csak normalis
f 1//1 4//1 3//1 2//1

Az első példát kirajzoló OpenGL kód a következő:

void square(void)
{
    static float v[][3] = {
        1.000000f, -0.000000f, -1.000000f,
        1.000000f, 0.000000f, 1.000000f,
        -1.000000f, 0.000000f, 1.000000f,
        -1.000000f, -0.000000f, -1.000000f,
    };
    static float vt[][2] = {
        0.000000f, 0.000000f,
        1.000000f, 0.000000f,
        1.000000f, 1.000000f,
        0.000000f, 1.000000f,
    };
    static float vn[][3] = {
        0.000000f, 1.000000f, -0.000000f,
    };

    glBegin(GL_QUADS);
        glTexCoord2fv(vt[1-1]);
        glNormal3fv(vn[1-1]);
        glVertex3fv(v[1-1]);

        glTexCoord2fv(vt[2-1]);
        glNormal3fv(vn[1-1]);
        glVertex3fv(v[4-1]);

        glTexCoord2fv(vt[3-1]);
        glNormal3fv(vn[1-1]);
        glVertex3fv(v[3-1]);

        glTexCoord2fv(vt[4-1]);
        glNormal3fv(vn[1-1]);
        glVertex3fv(v[2-1]);
    glEnd();
}

További anyagok

Teljes leírás a formátumról: http://local.wasp.uwa.edu.au/~pbourke/dataformats/obj/

Különféle eszközök és könyvátrak OBJ file-okhoz: http://people.sc.fsu.edu/~burkardt/data/obj/obj.html