2 #ifndef INCLUDED_LIB3DS_NODE_H
3 #define INCLUDED_LIB3DS_NODE_H
5 * The 3D Studio File Format Library
6 * Copyright (C) 1996-2001 by J.E. Hoffmann <je-h@gmx.net>
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU Lesser General Public License as published by
11 * the Free Software Foundation; either version 2.1 of the License, or (at
12 * your option) any later version.
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17 * License for more details.
19 * You should have received a copy of the GNU Lesser General Public License
20 * along with this program; if not, write to the Free Software Foundation,
21 * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 * $Id: node.h,v 1.9 2004/12/31 16:17:15 reed Exp $
26 #ifndef INCLUDED_LIB3DS_TRACKS_H
27 #include <lib3ds/tracks.h>
35 * Scene graph ambient color node data
38 typedef struct _Lib3dsAmbientData {
40 Lib3dsLin3Track col_track;
44 * Scene graph object instance node data
47 typedef struct _Lib3dsObjectData {
50 Lib3dsVector bbox_min;
51 Lib3dsVector bbox_max;
53 Lib3dsLin3Track pos_track;
55 Lib3dsQuatTrack rot_track;
57 Lib3dsLin3Track scl_track;
58 Lib3dsFloat morph_smooth;
60 Lib3dsMorphTrack morph_track;
62 Lib3dsBoolTrack hide_track;
66 * Scene graph camera node data
69 typedef struct _Lib3dsCameraData {
71 Lib3dsLin3Track pos_track;
73 Lib3dsLin1Track fov_track;
75 Lib3dsLin1Track roll_track;
79 * Scene graph camera target node data
82 typedef struct _Lib3dsTargetData {
84 Lib3dsLin3Track pos_track;
88 * Scene graph light node data
91 typedef struct _Lib3dsLightData {
93 Lib3dsLin3Track pos_track;
95 Lib3dsLin3Track col_track;
97 Lib3dsLin1Track hotspot_track;
99 Lib3dsLin1Track falloff_track;
101 Lib3dsLin1Track roll_track;
105 * Scene graph spotlight target node data
108 typedef struct _Lib3dsSpotData {
110 Lib3dsLin3Track pos_track;
114 * Scene graph node data union
117 typedef union _Lib3dsNodeData {
118 Lib3dsAmbientData ambient;
119 Lib3dsObjectData object;
120 Lib3dsCameraData camera;
121 Lib3dsTargetData target;
122 Lib3dsLightData light;
129 #define LIB3DS_NO_PARENT 65535
140 Lib3dsNodeTypes type;\
145 Lib3dsWord parent_id;
155 LIB3DS_HIDDEN = 0x800
163 LIB3DS_SHOW_PATH = 0x1,
164 LIB3DS_SMOOTHING = 0x2,
165 LIB3DS_MOTION_BLUR = 0x10,
166 LIB3DS_MORPH_MATERIALS = 0x40
169 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_ambient();
170 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_object();
171 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_camera();
172 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_target();
173 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_light();
174 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_spot();
175 extern LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node);
176 extern LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, Lib3dsFloat t);
177 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* name,
178 Lib3dsNodeTypes type);
179 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, Lib3dsWord node_id);
180 extern LIB3DSAPI void lib3ds_node_dump(Lib3dsNode *node, Lib3dsIntd level);
181 extern LIB3DSAPI Lib3dsBool lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);
182 extern LIB3DSAPI Lib3dsBool lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);