home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Virtual Reality Zone
/
VRZONE.ISO
/
mac
/
PC
/
VDF
/
VDF.H
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-21
|
6KB
|
270 lines
/* VDF -- Virtual world Description Format */
/*
* This implementation written by:
* Bernie Roehl (broehl@uwaterloo.ca)
* November, 1994
* Redistribute at will.
*
*/
/* This first typedef may have to be changed on different platforms: */
typedef unsigned long VDF_32BIT;
typedef int VDF_INDEX;
typedef int VDF_COUNT;
typedef unsigned short VDF_BOOLEAN;
typedef VDF_32BIT VDF_HANDLE;
typedef VDF_32BIT VDF_IDENTIFIER;
typedef float VDF_REAL;
typedef float VDF_ANGLE;
typedef struct { VDF_REAL x, y, z; } VDF_VECTOR;
typedef struct { VDF_REAL red, green, blue; } VDF_COLOR;
typedef enum
{
VDF_PROJ_PERSPECTIVE = 0, VDF_PROJ_PARALLEL
} VDF_PROJECTION_TYPE;
typedef enum
{
VDF_LIGHT_DIRECTIONAL = 0, VDF_LIGHT_POINT, VDF_LIGHT_SPOT
} VDF_LIGHT_TYPE;
typedef enum
{
VDF_RENDER_WIREFRAME = 0, VDF_RENDER_UNLIT, VDF_RENDER_FLAT,
VDF_RENDER_GOURAUD, VDF_RENDER_PHONG
} VDF_RENDER_MODE;
typedef struct _vdf_palette VDF_PALETTE;
typedef struct _vdf_map VDF_MAP;
typedef struct _vdf_material VDF_MATERIAL;
typedef struct _vdf_material_table VDF_MATERIAL_TABLE;
typedef struct _vdf_shape VDF_SHAPE;
typedef struct _vdf_object VDF_OBJECT;
typedef struct _vdf_camera VDF_CAMERA;
typedef struct _vdf_light VDF_LIGHT;
typedef struct _vdf_sound VDF_SOUND;
/* For details on what the various fields in the following structs mean,
see the VDF documentation */
typedef struct { VDF_INDEX lightest, darkest; } VDF_HUE_DESCRIPTOR;
struct _vdf_palette
{
VDF_COUNT ncolors;
VDF_COLOR *colors;
VDF_COUNT nhues;
VDF_HUE_DESCRIPTOR *hues;
};
struct _vdf_map
{
char *name;
char *filename;
VDF_MAP *next;
};
struct _vdf_material
{
char *name;
VDF_RENDER_MODE rendering_mode;
VDF_INDEX hue;
VDF_REAL albedo;
VDF_COLOR diffuse_color, ambient_color, transparency_color;
VDF_COLOR specular_color;
VDF_REAL specular_exponent;
VDF_REAL refractive_index;
char *texture_map, *bump_map, *opacity_map, *reflection_map;
VDF_REAL reflection_blur;
VDF_REAL transparency_falloff;
VDF_IDENTIFIER id;
VDF_MATERIAL *next;
};
struct _vdf_material_table
{
char *name;
VDF_HANDLE application_handle;
VDF_COUNT count;
VDF_MATERIAL **material_references;
VDF_COUNT n_used;
VDF_IDENTIFIER id;
VDF_MATERIAL_TABLE *next;
};
typedef struct _vdf_vertex
{
VDF_VECTOR vector;
VDF_VECTOR normal;
VDF_COLOR color;
VDF_HANDLE application_handle;
} VDF_VERTEX;
typedef struct _vdf_point
{
VDF_INDEX vertnum;
} VDF_POINT;
typedef struct _vdf_facet VDF_FACET;
struct _vdf_facet
{
VDF_BOOLEAN is_doublesided, is_interior;
VDF_FACET *base_facet;
VDF_INDEX front_material, back_material;
VDF_VECTOR normal;
VDF_HANDLE application_handle;
VDF_COUNT n_used;
VDF_COUNT npoints;
VDF_POINT *points;
VDF_IDENTIFIER id;
};
struct _vdf_shape
{
char *name;
VDF_REAL lod_size;
VDF_SHAPE *replaces;
VDF_BOOLEAN is_convex;
VDF_HANDLE application_handle;
VDF_VECTOR bound_min, bound_max;
VDF_MATERIAL_TABLE *material_table;
VDF_COUNT nvertices;
VDF_VERTEX *vertices;
VDF_COUNT nfacets;
VDF_FACET *facets;
VDF_COUNT n_used;
VDF_IDENTIFIER id;
VDF_SHAPE *next;
};
struct _vdf_object
{
char *name;
VDF_SHAPE *shape;
VDF_VECTOR scaled_by;
VDF_MATERIAL_TABLE *material_table;
VDF_VECTOR location;
VDF_ANGLE rotx, roty, rotz;
VDF_OBJECT *parent;
VDF_OBJECT *container;
VDF_BOOLEAN is_invisible;
VDF_INDEX layer;
char *text;
VDF_FACET *facet_behind;
VDF_HANDLE application_handle;
VDF_COUNT n_used;
VDF_IDENTIFIER id;
VDF_OBJECT *next;
};
struct _vdf_camera
{
char *name;
VDF_HANDLE application_handle;
VDF_ANGLE field_of_view;
VDF_REAL aspect_ratio;
VDF_PROJECTION_TYPE projection_type;
VDF_OBJECT *associated_with;
VDF_CAMERA *next;
};
struct _vdf_light
{
char *name;
VDF_HANDLE application_handle;
VDF_LIGHT_TYPE type;
VDF_OBJECT *associated_with;
VDF_COLOR color;
VDF_ANGLE hotspot, falloff;
VDF_BOOLEAN is_on, casts_shadows;
VDF_LIGHT *next;
};
struct _vdf_sound
{
char *name;
VDF_HANDLE application_handle;
VDF_OBJECT *associated_with;
VDF_BOOLEAN is_on;
VDF_REAL volume;
char *sample_name; /* name of entry in a VDF_MAP */
VDF_SOUND *next;
};
typedef struct
{
VDF_VECTOR gravity_vector;
VDF_COLOR ambient_light;
VDF_BOOLEAN has_horizon;
VDF_COLOR sky_color, ground_color, fog_color;
VDF_REAL scale;
} VDF_WORLD_ATTRIBUTES;
typedef struct _vdf_human_data VDF_HUMAN_DATA;
struct _vdf_human_data
{
char *person;
char *date;
char *time;
char *comment;
VDF_HUMAN_DATA *next;
};
typedef struct
{
VDF_PALETTE *palette;
VDF_MAP *maps;
VDF_MATERIAL *materials;
VDF_MATERIAL_TABLE *material_tables;
VDF_SHAPE *shapes;
VDF_OBJECT *objects;
VDF_CAMERA *cameras;
VDF_LIGHT *lights;
VDF_SOUND *sounds;
VDF_WORLD_ATTRIBUTES *world_attributes;
VDF_HUMAN_DATA *created;
VDF_HUMAN_DATA *modified;
char *copyright_message;
char *usage_restrictions;
char *title;
} VDF_DATA;
/* These are the two functions that interface to the parser;
vdf_readfile() returns NULL on failure, after which a call
to vdf_get_read_error() will return a pointer to an error message
string.
*/
VDF_DATA *vdf_readfile(char *filename);
char *vdf_get_read_error(void);
/* The next two functions are vdfwrite.c; vdf_writefile() returns non-zero
on failure, after which a call to vdf_get_write_error() will return a
pointer to an error message string.
*/
int vdf_writefile(char *filename, VDF_DATA *ptr);
char *vdf_get_write_error(void);
/* This next function helps in the mapping of material indices into
pointers to actual materials
*/
VDF_MATERIAL *vdf_map_material(VDF_OBJECT *object, VDF_INDEX material_index);
/* The vdf_malloc() routine can be defined by the application; the
default version just calls malloc(). Same for vdf_free().
*/
void *vdf_malloc(unsigned int nbytes);
void vdf_free(void *data);
/* End of vdf.h */