Skip to content

Formato O3D

Vii edited this page Jun 30, 2019 · 1 revision
// de struct.hpp

struct bbox {
    float   x1, y1, z1;
    float   x2, y2, z2;
};

struct tape {
    int     obj1, vert1;
    int     obj2, vert2;
    int     linkMode;
};

typedef float[4][4] matrix;

// de complex.hpp

struct vertex {
    float   x, y, z;            // Posición del vértice
    float   nx, ny, nz;         // Normal
    float   u, v;               // UV
};

struct face {
    short   a, b, c;            // Vértices
    short   matidx;             // Material
}

struct object {
    short   nVertices;          // Número de vértices
    short   nFaces;             // Número de caras
    short   matindex;           // Material usado
    char    name[20];           // Nombre del objeto
    bbox    bbox;               // Bounding box
    vertex  vertices[nVertices];
    face    faces[nFaces];
};

enum MapType {
    WIRE    = 0,
    FLAT    = 1,
    GOURAUD = 2,
    PHONG   = 3,
    METAL   = 4
};

struct material {
    float   dr, dg, db;         // RGB difuso
    float   ar, ag, ab;         // RGB ambiente
    float   sr, sg, sb;         // RGB especular
    int     transp;
    char    textura[16];        // Puede ser "NULL" o el nombre de un PCX (sin extensión)
    MapType map_type;
};

struct O3D {
  char      cControl[4];        // "O3D\0"
  short     version;            // 102 (no se comprueba)
  short     nObjects;           // Número de objetos que componen el modelo (máximo 128)
  short     nMaterials;         // Número de materiales
  short     nDummies;           // Número de dummies
  short     nTapes;             // Número de cintas
  short     nFrames;            // Número de animaciones
  int       OffsetObjs;         // Offset a los objetos
  int       OffsetMats;         // Offset a los materiales
  int       OffsetDummies;      // Offset a los dummies
  int       OffsetTapes;        // Offset a las cintas
  int       OffsetAnms;         // Offset a las animaciones
  float     bx1, by1, bz1;      // no se usan?
  float     bx2, by2, bz2;
  object    objects[nObjects];
  material  materials[nMaterials];
  bbox      dummies[nDummies];
  tape      tapes[nTapes];
  matrix    anims[nFrames*nObjects];
};
Clone this wiki locally