00001
00002 #ifndef INCLUDED_LIB3DS_NODE_H
00003 #define INCLUDED_LIB3DS_NODE_H
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef INCLUDED_LIB3DS_TRACKS_H
00027 #include <lib3ds/tracks.h>
00028 #endif
00029
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033
00038 typedef struct Lib3dsAmbientData {
00039 Lib3dsRgb col;
00040 Lib3dsLin3Track col_track;
00041 } Lib3dsAmbientData;
00042
00047 typedef struct Lib3dsObjectData {
00048 Lib3dsVector pivot;
00049 char instance[64];
00050 Lib3dsVector bbox_min;
00051 Lib3dsVector bbox_max;
00052 Lib3dsVector pos;
00053 Lib3dsLin3Track pos_track;
00054 Lib3dsQuat rot;
00055 Lib3dsQuatTrack rot_track;
00056 Lib3dsVector scl;
00057 Lib3dsLin3Track scl_track;
00058 Lib3dsFloat morph_smooth;
00059 char morph[64];
00060 Lib3dsMorphTrack morph_track;
00061 Lib3dsBool hide;
00062 Lib3dsBoolTrack hide_track;
00063 } Lib3dsObjectData;
00064
00069 typedef struct Lib3dsCameraData {
00070 Lib3dsVector pos;
00071 Lib3dsLin3Track pos_track;
00072 Lib3dsFloat fov;
00073 Lib3dsLin1Track fov_track;
00074 Lib3dsFloat roll;
00075 Lib3dsLin1Track roll_track;
00076 } Lib3dsCameraData;
00077
00082 typedef struct Lib3dsTargetData {
00083 Lib3dsVector pos;
00084 Lib3dsLin3Track pos_track;
00085 } Lib3dsTargetData;
00086
00091 typedef struct Lib3dsLightData {
00092 Lib3dsVector pos;
00093 Lib3dsLin3Track pos_track;
00094 Lib3dsRgb col;
00095 Lib3dsLin3Track col_track;
00096 Lib3dsFloat hotspot;
00097 Lib3dsLin1Track hotspot_track;
00098 Lib3dsFloat falloff;
00099 Lib3dsLin1Track falloff_track;
00100 Lib3dsFloat roll;
00101 Lib3dsLin1Track roll_track;
00102 } Lib3dsLightData;
00103
00108 typedef struct Lib3dsSpotData {
00109 Lib3dsVector pos;
00110 Lib3dsLin3Track pos_track;
00111 } Lib3dsSpotData;
00112
00117 typedef union Lib3dsNodeData {
00118 Lib3dsAmbientData ambient;
00119 Lib3dsObjectData object;
00120 Lib3dsCameraData camera;
00121 Lib3dsTargetData target;
00122 Lib3dsLightData light;
00123 Lib3dsSpotData spot;
00124 } Lib3dsNodeData;
00125
00129 #define LIB3DS_NO_PARENT 65535
00130
00135 struct Lib3dsNode {
00136 Lib3dsUserData user;
00137 Lib3dsNode *next;
00138 Lib3dsNode *childs;
00139 Lib3dsNode *parent;
00140 Lib3dsNodeTypes type;
00141 Lib3dsWord node_id;
00142 char name[64];
00143 Lib3dsWord flags1;
00144 Lib3dsWord flags2;
00145 Lib3dsWord parent_id;
00146 Lib3dsMatrix matrix;
00147 Lib3dsNodeData data;
00148 };
00149
00154 typedef enum {
00155 LIB3DS_HIDDEN = 0x800
00156 } Lib3dsNodeFlags1;
00157
00162 typedef enum {
00163 LIB3DS_SHOW_PATH = 0x1,
00164 LIB3DS_SMOOTHING = 0x2,
00165 LIB3DS_MOTION_BLUR = 0x10,
00166 LIB3DS_MORPH_MATERIALS = 0x40
00167 } Lib3dsNodeFlags2;
00168
00169 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_ambient();
00170 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_object();
00171 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_camera();
00172 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_target();
00173 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_light();
00174 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_spot();
00175 extern LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node);
00176 extern LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, Lib3dsFloat t);
00177 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* name,
00178 Lib3dsNodeTypes type);
00179 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, Lib3dsWord node_id);
00180 extern LIB3DSAPI void lib3ds_node_dump(Lib3dsNode *node, Lib3dsIntd level);
00181 extern LIB3DSAPI Lib3dsBool lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);
00182 extern LIB3DSAPI Lib3dsBool lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);
00183
00184 #ifdef __cplusplus
00185 }
00186 #endif
00187 #endif
00188