X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=libs%2Flib3ds%2Fnode.h;fp=libs%2Flib3ds%2Fnode.h;h=7021a10bcf5607c1b3d363549c06b6c590ad0f30;hb=6c322d339ec9c5063c8f47117633b46e2a8eafd0;hp=0000000000000000000000000000000000000000;hpb=787ad7856f5074db4fe805b15bfca61553895de1;p=summerhack diff --git a/libs/lib3ds/node.h b/libs/lib3ds/node.h new file mode 100644 index 0000000..7021a10 --- /dev/null +++ b/libs/lib3ds/node.h @@ -0,0 +1,188 @@ +/* -*- c -*- */ +#ifndef INCLUDED_LIB3DS_NODE_H +#define INCLUDED_LIB3DS_NODE_H +/* + * The 3D Studio File Format Library + * Copyright (C) 1996-2001 by J.E. Hoffmann + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: node.h,v 1.9 2004/12/31 16:17:15 reed Exp $ + */ + +#ifndef INCLUDED_LIB3DS_TRACKS_H +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/*! + * Scene graph ambient color node data + * \ingroup node + */ +typedef struct _Lib3dsAmbientData { + Lib3dsRgb col; + Lib3dsLin3Track col_track; +} Lib3dsAmbientData; + +/*! + * Scene graph object instance node data + * \ingroup node + */ +typedef struct _Lib3dsObjectData { + Lib3dsVector pivot; + char instance[64]; + Lib3dsVector bbox_min; + Lib3dsVector bbox_max; + Lib3dsVector pos; + Lib3dsLin3Track pos_track; + Lib3dsQuat rot; + Lib3dsQuatTrack rot_track; + Lib3dsVector scl; + Lib3dsLin3Track scl_track; + Lib3dsFloat morph_smooth; + char morph[64]; + Lib3dsMorphTrack morph_track; + Lib3dsBool hide; + Lib3dsBoolTrack hide_track; +} Lib3dsObjectData; + +/*! + * Scene graph camera node data + * \ingroup node + */ +typedef struct _Lib3dsCameraData { + Lib3dsVector pos; + Lib3dsLin3Track pos_track; + Lib3dsFloat fov; + Lib3dsLin1Track fov_track; + Lib3dsFloat roll; + Lib3dsLin1Track roll_track; +} Lib3dsCameraData; + +/*! + * Scene graph camera target node data + * \ingroup node + */ +typedef struct _Lib3dsTargetData { + Lib3dsVector pos; + Lib3dsLin3Track pos_track; +} Lib3dsTargetData; + +/*! + * Scene graph light node data + * \ingroup node + */ +typedef struct _Lib3dsLightData { + Lib3dsVector pos; + Lib3dsLin3Track pos_track; + Lib3dsRgb col; + Lib3dsLin3Track col_track; + Lib3dsFloat hotspot; + Lib3dsLin1Track hotspot_track; + Lib3dsFloat falloff; + Lib3dsLin1Track falloff_track; + Lib3dsFloat roll; + Lib3dsLin1Track roll_track; +} Lib3dsLightData; + +/*! + * Scene graph spotlight target node data + * \ingroup node + */ +typedef struct _Lib3dsSpotData { + Lib3dsVector pos; + Lib3dsLin3Track pos_track; +} Lib3dsSpotData; + +/*! + * Scene graph node data union + * \ingroup node + */ +typedef union _Lib3dsNodeData { + Lib3dsAmbientData ambient; + Lib3dsObjectData object; + Lib3dsCameraData camera; + Lib3dsTargetData target; + Lib3dsLightData light; + Lib3dsSpotData spot; +} Lib3dsNodeData; + +/*! + * \ingroup node + */ +#define LIB3DS_NO_PARENT 65535 + +/*! + * Scene graph node + * \ingroup node + */ +struct _Lib3dsNode { + Lib3dsUserData user; + Lib3dsNode *next;\ + Lib3dsNode *childs;\ + Lib3dsNode *parent;\ + Lib3dsNodeTypes type;\ + Lib3dsWord node_id;\ + char name[64];\ + Lib3dsWord flags1;\ + Lib3dsWord flags2;\ + Lib3dsWord parent_id; + Lib3dsMatrix matrix; + Lib3dsNodeData data; +}; + +/*! + * Node flags + * \ingroup node + */ +typedef enum { + LIB3DS_HIDDEN = 0x800 +} Lib3dsNodeFlags1; + +/*! + * Node flags + * \ingroup node + */ +typedef enum { + LIB3DS_SHOW_PATH = 0x1, + LIB3DS_SMOOTHING = 0x2, + LIB3DS_MOTION_BLUR = 0x10, + LIB3DS_MORPH_MATERIALS = 0x40 +} Lib3dsNodeFlags2; + +extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_ambient(); +extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_object(); +extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_camera(); +extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_target(); +extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_light(); +extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_spot(); +extern LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node); +extern LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, Lib3dsFloat t); +extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* name, + Lib3dsNodeTypes type); +extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, Lib3dsWord node_id); +extern LIB3DSAPI void lib3ds_node_dump(Lib3dsNode *node, Lib3dsIntd level); +extern LIB3DSAPI Lib3dsBool lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io); +extern LIB3DSAPI Lib3dsBool lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io); + +#ifdef __cplusplus +} +#endif +#endif +