-
Notifications
You must be signed in to change notification settings - Fork 4
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];
};