home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / VDF / VDF.H < prev    next >
C/C++ Source or Header  |  1994-11-21  |  6KB  |  270 lines

  1. /* VDF -- Virtual world Description Format */
  2.  
  3. /* 
  4.  *  This implementation written by:
  5.  *      Bernie Roehl (broehl@uwaterloo.ca)
  6.  *      November, 1994
  7.  *  Redistribute at will.
  8.  *
  9.  */
  10.  
  11. /* This first typedef may have to be changed on different platforms: */
  12.  
  13. typedef unsigned long VDF_32BIT;
  14.  
  15. typedef int VDF_INDEX;
  16. typedef int VDF_COUNT;
  17. typedef unsigned short VDF_BOOLEAN;
  18. typedef VDF_32BIT VDF_HANDLE;
  19. typedef VDF_32BIT VDF_IDENTIFIER;
  20. typedef float VDF_REAL;
  21. typedef float VDF_ANGLE;
  22.  
  23. typedef struct { VDF_REAL x, y, z; } VDF_VECTOR;
  24. typedef struct { VDF_REAL red, green, blue; } VDF_COLOR;
  25.  
  26. typedef enum
  27.     {
  28.     VDF_PROJ_PERSPECTIVE = 0, VDF_PROJ_PARALLEL
  29.     } VDF_PROJECTION_TYPE;
  30.  
  31. typedef enum
  32.     {
  33.     VDF_LIGHT_DIRECTIONAL = 0, VDF_LIGHT_POINT, VDF_LIGHT_SPOT
  34.     } VDF_LIGHT_TYPE;
  35.  
  36. typedef enum
  37.     {
  38.     VDF_RENDER_WIREFRAME = 0, VDF_RENDER_UNLIT, VDF_RENDER_FLAT,
  39.     VDF_RENDER_GOURAUD, VDF_RENDER_PHONG
  40.     } VDF_RENDER_MODE;
  41.  
  42. typedef struct _vdf_palette VDF_PALETTE;
  43. typedef struct _vdf_map VDF_MAP;
  44. typedef struct _vdf_material VDF_MATERIAL;
  45. typedef struct _vdf_material_table VDF_MATERIAL_TABLE;
  46. typedef struct _vdf_shape VDF_SHAPE;
  47. typedef struct _vdf_object VDF_OBJECT;
  48. typedef struct _vdf_camera VDF_CAMERA;
  49. typedef struct _vdf_light VDF_LIGHT;
  50. typedef struct _vdf_sound VDF_SOUND;
  51.  
  52. /* For details on what the various fields in the following structs mean,
  53.    see the VDF documentation */
  54.  
  55. typedef struct { VDF_INDEX lightest, darkest; } VDF_HUE_DESCRIPTOR;
  56.  
  57. struct _vdf_palette
  58.     {
  59.     VDF_COUNT ncolors;
  60.     VDF_COLOR *colors;
  61.     VDF_COUNT nhues;
  62.     VDF_HUE_DESCRIPTOR *hues;
  63.     };
  64.  
  65. struct _vdf_map
  66.     {
  67.     char *name;
  68.     char *filename;
  69.     VDF_MAP *next;
  70.     };
  71.  
  72. struct _vdf_material
  73.     {
  74.     char *name;
  75.     VDF_RENDER_MODE rendering_mode;
  76.     VDF_INDEX hue;
  77.     VDF_REAL albedo;
  78.     VDF_COLOR diffuse_color, ambient_color, transparency_color;
  79.     VDF_COLOR specular_color;
  80.     VDF_REAL specular_exponent;
  81.     VDF_REAL refractive_index;
  82.     char *texture_map, *bump_map, *opacity_map, *reflection_map;
  83.     VDF_REAL reflection_blur;
  84.     VDF_REAL transparency_falloff;
  85.     VDF_IDENTIFIER id;
  86.     VDF_MATERIAL *next;
  87.     };
  88.  
  89. struct _vdf_material_table
  90.     {
  91.     char *name;
  92.     VDF_HANDLE application_handle;
  93.     VDF_COUNT count;
  94.     VDF_MATERIAL **material_references;
  95.     VDF_COUNT n_used;
  96.     VDF_IDENTIFIER id;
  97.     VDF_MATERIAL_TABLE *next;
  98.     };
  99.  
  100. typedef struct _vdf_vertex
  101.     {
  102.     VDF_VECTOR vector;
  103.     VDF_VECTOR normal;
  104.     VDF_COLOR color;
  105.     VDF_HANDLE application_handle;    
  106.     } VDF_VERTEX;
  107.  
  108. typedef struct _vdf_point
  109.     {
  110.     VDF_INDEX vertnum;
  111.     } VDF_POINT;
  112.  
  113. typedef struct _vdf_facet VDF_FACET;
  114.  
  115. struct _vdf_facet
  116.     {
  117.     VDF_BOOLEAN is_doublesided, is_interior;
  118.     VDF_FACET *base_facet;
  119.     VDF_INDEX front_material, back_material;
  120.     VDF_VECTOR normal;
  121.     VDF_HANDLE application_handle;
  122.     VDF_COUNT n_used;
  123.     VDF_COUNT npoints;
  124.     VDF_POINT *points;
  125.     VDF_IDENTIFIER id;
  126.     };
  127.  
  128. struct _vdf_shape
  129.     {
  130.     char *name;
  131.     VDF_REAL lod_size;
  132.     VDF_SHAPE *replaces;
  133.     VDF_BOOLEAN is_convex;
  134.     VDF_HANDLE application_handle;
  135.     VDF_VECTOR bound_min, bound_max;
  136.     VDF_MATERIAL_TABLE *material_table;
  137.     VDF_COUNT nvertices;
  138.     VDF_VERTEX *vertices;
  139.     VDF_COUNT nfacets;
  140.     VDF_FACET *facets;
  141.     VDF_COUNT n_used;
  142.     VDF_IDENTIFIER id;
  143.     VDF_SHAPE *next;
  144.     };
  145.  
  146. struct _vdf_object
  147.     {
  148.     char *name;
  149.     VDF_SHAPE *shape;
  150.     VDF_VECTOR scaled_by;
  151.     VDF_MATERIAL_TABLE *material_table;
  152.     VDF_VECTOR location;
  153.     VDF_ANGLE rotx, roty, rotz;
  154.     VDF_OBJECT *parent;
  155.     VDF_OBJECT *container;
  156.     VDF_BOOLEAN is_invisible;
  157.     VDF_INDEX layer;
  158.     char *text;
  159.     VDF_FACET *facet_behind;
  160.     VDF_HANDLE application_handle;
  161.     VDF_COUNT n_used;
  162.     VDF_IDENTIFIER id;
  163.     VDF_OBJECT *next;
  164.     };
  165.  
  166. struct _vdf_camera
  167.     {
  168.     char *name;
  169.     VDF_HANDLE application_handle;
  170.     VDF_ANGLE field_of_view;
  171.     VDF_REAL aspect_ratio;
  172.     VDF_PROJECTION_TYPE projection_type;
  173.     VDF_OBJECT *associated_with;
  174.     VDF_CAMERA *next;
  175.     };
  176.  
  177. struct _vdf_light
  178.     {
  179.     char *name;
  180.     VDF_HANDLE application_handle;
  181.     VDF_LIGHT_TYPE type;
  182.     VDF_OBJECT *associated_with;
  183.     VDF_COLOR color;
  184.     VDF_ANGLE hotspot, falloff;
  185.     VDF_BOOLEAN is_on, casts_shadows;
  186.     VDF_LIGHT *next;
  187.     };
  188.  
  189. struct _vdf_sound
  190.     {
  191.     char *name;
  192.     VDF_HANDLE application_handle;
  193.     VDF_OBJECT *associated_with;
  194.     VDF_BOOLEAN is_on;
  195.     VDF_REAL volume;
  196.     char *sample_name;  /* name of entry in a VDF_MAP */
  197.     VDF_SOUND *next;
  198.     };
  199.  
  200. typedef struct
  201.     {
  202.     VDF_VECTOR gravity_vector;
  203.     VDF_COLOR ambient_light;
  204.     VDF_BOOLEAN has_horizon;
  205.     VDF_COLOR sky_color, ground_color, fog_color;
  206.     VDF_REAL scale;
  207.     } VDF_WORLD_ATTRIBUTES;
  208.  
  209. typedef struct _vdf_human_data VDF_HUMAN_DATA;
  210.  
  211. struct _vdf_human_data
  212.     {
  213.     char *person;
  214.     char *date;
  215.     char *time;
  216.     char *comment;
  217.     VDF_HUMAN_DATA *next;
  218.     };
  219.  
  220. typedef struct
  221.     {
  222.     VDF_PALETTE *palette;
  223.     VDF_MAP *maps;
  224.     VDF_MATERIAL *materials;
  225.     VDF_MATERIAL_TABLE *material_tables;
  226.     VDF_SHAPE *shapes;
  227.     VDF_OBJECT *objects;
  228.     VDF_CAMERA *cameras;
  229.     VDF_LIGHT *lights;
  230.     VDF_SOUND *sounds;
  231.     VDF_WORLD_ATTRIBUTES *world_attributes;
  232.     VDF_HUMAN_DATA *created;
  233.     VDF_HUMAN_DATA *modified;
  234.     char *copyright_message;
  235.     char *usage_restrictions;
  236.     char *title;
  237.     } VDF_DATA;
  238.  
  239. /* These are the two functions that interface to the parser;
  240.    vdf_readfile() returns NULL on failure, after which a call
  241.    to vdf_get_read_error() will return a pointer to an error message
  242.    string.
  243.  */
  244.  
  245. VDF_DATA *vdf_readfile(char *filename);
  246. char *vdf_get_read_error(void);
  247.  
  248. /* The next two functions are vdfwrite.c; vdf_writefile() returns non-zero
  249.    on failure, after which a call to vdf_get_write_error() will return a
  250.    pointer to an error message string.
  251.  */
  252.  
  253. int vdf_writefile(char *filename, VDF_DATA *ptr);
  254. char *vdf_get_write_error(void);
  255.  
  256. /* This next function helps in the mapping of material indices into
  257.    pointers to actual materials
  258.  */
  259.  
  260. VDF_MATERIAL *vdf_map_material(VDF_OBJECT *object, VDF_INDEX material_index);
  261.  
  262. /* The vdf_malloc() routine can be defined by the application; the
  263.    default version just calls malloc().  Same for vdf_free().
  264.  */
  265.  
  266. void *vdf_malloc(unsigned int nbytes);
  267. void vdf_free(void *data);
  268.  
  269. /* End of vdf.h */
  270.