Home | API | File List | Examples | Download

lib3ds.h

00001 /* -*- c -*- */
00002 #ifndef INCLUDED_LIB3DS_H
00003 #define INCLUDED_LIB3DS_H
00004 /*
00005     Copyright (C) 1996-2008 by Jan Eric Kyprianidis <www.kyprianidis.com>
00006     All rights reserved.
00007     
00008     This program is free  software: you can redistribute it and/or modify 
00009     it under the terms of the GNU Lesser General Public License as published 
00010     by the Free Software Foundation, either version 2.1 of the License, or 
00011     (at your option) any later version.
00012 
00013     Thisprogram  is  distributed in the hope that it will be useful, 
00014     but WITHOUT ANY WARRANTY; without even the implied warranty of 
00015     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
00016     GNU Lesser General Public License for more details.
00017     
00018     You should  have received a copy of the GNU Lesser General Public License
00019     along with  this program; If not, see <http://www.gnu.org/licenses/>. 
00020  */
00021 
00025 #include <stddef.h>
00026 
00027 #ifndef LIB3DSAPI
00028     #ifdef _MSC_VER
00029         #ifdef LIB3DS_EXPORTS
00030             #define LIB3DSAPI __declspec(dllexport)
00031         #else               
00032             #define LIB3DSAPI __declspec(dllimport)
00033         #endif           
00034     #else
00035         #define LIB3DSAPI
00036     #endif
00037 #endif
00038 
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042 
00047 typedef enum Lib3dsIoSeek {
00048     LIB3DS_SEEK_SET     = 0,
00049     LIB3DS_SEEK_CUR     = 1,
00050     LIB3DS_SEEK_END     = 2
00051 } Lib3dsIoSeek;
00052 
00053 typedef enum Lib3dsLogLevel {
00054     LIB3DS_LOG_ERROR    = 0,
00055     LIB3DS_LOG_WARN     = 1,
00056     LIB3DS_LOG_INFO     = 2,
00057     LIB3DS_LOG_DEBUG    = 3
00058 } Lib3dsLogLevel;
00059 
00060 typedef struct Lib3dsIo {
00061     void*   impl;
00062     void*   self;
00063     long    (*seek_func) (void *self, long offset, Lib3dsIoSeek origin);
00064     long    (*tell_func) (void *self);
00065     size_t  (*read_func) (void *self, void *buffer, size_t size);
00066     size_t  (*write_func)(void *self, const void *buffer, size_t size);
00067     void    (*log_func)  (void *self, Lib3dsLogLevel level, int indent, const char *msg);
00068 } Lib3dsIo;
00069 
00070 /* Atmosphere settings */
00071 typedef struct Lib3dsAtmosphere {
00072     int         use_fog;
00073     float       fog_color[3];
00074     int         fog_background;
00075     float       fog_near_plane;
00076     float       fog_near_density;
00077     float       fog_far_plane;
00078     float       fog_far_density;
00079     int         use_layer_fog;
00080     unsigned    layer_fog_flags;
00081     float       layer_fog_color[3];
00082     float       layer_fog_near_y;
00083     float       layer_fog_far_y;
00084     float       layer_fog_density;
00085     int         use_dist_cue;
00086     int         dist_cue_background;     /* bool */
00087     float       dist_cue_near_plane;
00088     float       dist_cue_near_dimming;
00089     float       dist_cue_far_plane;
00090     float       dist_cue_far_dimming;
00091 } Lib3dsAtmosphere;
00092 
00093 /* Background settings */
00094 typedef struct Lib3dsBackground {
00095     int         use_bitmap;
00096     char        bitmap_name[64];
00097     int         use_solid;
00098     float       solid_color[3];
00099     int         use_gradient;
00100     float       gradient_percent;
00101     float       gradient_top[3];
00102     float       gradient_middle[3];
00103     float       gradient_bottom[3];
00104 } Lib3dsBackground;
00105 
00107 typedef struct Lib3dsShadow {
00108     short       map_size;           
00109     float       low_bias;           
00110     float       hi_bias;            
00111     float       filter;             
00112     float       ray_bias;           
00113 } Lib3dsShadow;
00114 
00115 /* Layout view types */
00116 typedef enum Lib3dsViewType {
00117     LIB3DS_VIEW_NOT_USED   = 0,
00118     LIB3DS_VIEW_TOP        = 1,
00119     LIB3DS_VIEW_BOTTOM     = 2,
00120     LIB3DS_VIEW_LEFT       = 3,
00121     LIB3DS_VIEW_RIGHT      = 4,
00122     LIB3DS_VIEW_FRONT      = 5,
00123     LIB3DS_VIEW_BACK       = 6,
00124     LIB3DS_VIEW_USER       = 7,
00125     LIB3DS_VIEW_SPOTLIGHT  = 18,
00126     LIB3DS_VIEW_CAMERA     = 65535
00127 } Lib3dsViewType;
00128 
00129 /* Layout styles */
00130 typedef enum Lib3dsLayoutStyle {
00131     LIB3DS_LAYOUT_SINGLE                    = 0,
00132     LIB3DS_LAYOUT_TWO_PANE_VERT_SPLIT       = 1,
00133     LIB3DS_LAYOUT_TWO_PANE_HORIZ_SPLIT      = 2,
00134     LIB3DS_LAYOUT_FOUR_PANE                 = 3,
00135     LIB3DS_LAYOUT_THREE_PANE_LEFT_SPLIT     = 4,
00136     LIB3DS_LAYOUT_THREE_PANE_BOTTOM_SPLIT   = 5,
00137     LIB3DS_LAYOUT_THREE_PANE_RIGHT_SPLIT    = 6,
00138     LIB3DS_LAYOUT_THREE_PANE_TOP_SPLIT      = 7,
00139     LIB3DS_LAYOUT_THREE_PANE_VERT_SPLIT     = 8,
00140     LIB3DS_LAYOUT_THREE_PANE_HORIZ_SPLIT    = 9,
00141     LIB3DS_LAYOUT_FOUR_PANE_LEFT_SPLIT      = 10,
00142     LIB3DS_LAYOUT_FOUR_PANE_RIGHT_SPLIT     = 11
00143 } Lib3dsLayoutStyle;
00144 
00145 /* Layout view settings */
00146 typedef struct Lib3dsView {
00147     int         type;
00148     unsigned    axis_lock;
00149     short       position[2];
00150     short       size[2];
00151     float       zoom;
00152     float       center[3];
00153     float       horiz_angle;
00154     float       vert_angle;
00155     char        camera[11];
00156 } Lib3dsView;
00157 
00158 #define LIB3DS_LAYOUT_MAX_VIEWS 32
00159 
00160 /* Viewport and default view settings */
00161 typedef struct Lib3dsViewport {
00162     int             layout_style;
00163     int             layout_active;
00164     int             layout_swap;
00165     int             layout_swap_prior;
00166     int             layout_swap_view;
00167     unsigned short  layout_position[2];
00168     unsigned short  layout_size[2];
00169     int             layout_nviews;
00170     Lib3dsView      layout_views[LIB3DS_LAYOUT_MAX_VIEWS];
00171     int             default_type;
00172     float           default_position[3];
00173     float           default_width;
00174     float           default_horiz_angle;
00175     float           default_vert_angle;
00176     float           default_roll_angle;
00177     char            default_camera[64];
00178 } Lib3dsViewport;
00179 
00180 /* Material texture map flags */
00181 typedef enum Lib3dsTextureMapFlags {
00182     LIB3DS_TEXTURE_DECALE       = 0x0001,
00183     LIB3DS_TEXTURE_MIRROR       = 0x0002,
00184     LIB3DS_TEXTURE_NEGATE       = 0x0008,
00185     LIB3DS_TEXTURE_NO_TILE      = 0x0010,
00186     LIB3DS_TEXTURE_SUMMED_AREA  = 0x0020,
00187     LIB3DS_TEXTURE_ALPHA_SOURCE = 0x0040,
00188     LIB3DS_TEXTURE_TINT         = 0x0080,
00189     LIB3DS_TEXTURE_IGNORE_ALPHA = 0x0100,
00190     LIB3DS_TEXTURE_RGB_TINT     = 0x0200
00191 } Lib3dsTextureMapFlags;
00192 
00193 /* Material texture map */
00194 typedef struct Lib3dsTextureMap {
00195     unsigned    user_id;
00196     void*       user_ptr;
00197     char        name[64];
00198     unsigned    flags;
00199     float       percent;
00200     float       blur;
00201     float       scale[2];
00202     float       offset[2];
00203     float       rotation;
00204     float       tint_1[3];
00205     float       tint_2[3];
00206     float       tint_r[3];
00207     float       tint_g[3];
00208     float       tint_b[3];
00209 } Lib3dsTextureMap;
00210 
00211 /* Auto reflection texture map flags */
00212 typedef enum Lib3dsAutoReflMapFlags {
00213     LIB3DS_AUTOREFL_USE                     = 0x0001,
00214     LIB3DS_AUTOREFL_READ_FIRST_FRAME_ONLY   = 0x0004,
00215     LIB3DS_AUTOREFL_FLAT_MIRROR             = 0x0008 
00216 } Lib3dsAutoReflMapFlags;
00217 
00218 /* Material shading type */
00219 typedef enum Lib3dsShading {
00220     LIB3DS_SHADING_WIRE_FRAME = 0,
00221     LIB3DS_SHADING_FLAT       = 1, 
00222     LIB3DS_SHADING_GOURAUD    = 2, 
00223     LIB3DS_SHADING_PHONG      = 3, 
00224     LIB3DS_SHADING_METAL      = 4
00225 } Lib3dsShading; 
00226 
00228 typedef struct Lib3dsMaterial {
00229     unsigned            user_id;
00230     void*               user_ptr;
00231     char                name[64];           /* Material name */
00232     float               ambient[3];         /* Material ambient reflectivity */
00233     float               diffuse[3];         /* Material diffuse reflectivity */
00234     float               specular[3];        /* Material specular reflectivity */
00235     float               shininess;          /* Material specular exponent */
00236     float               shin_strength;
00237     int                 use_blur;
00238     float               blur;
00239     float               transparency;
00240     float               falloff;
00241     int                 is_additive;
00242     int                 self_illum_flag; /* bool */
00243     float               self_illum;
00244     int                 use_falloff;
00245     int                 shading;
00246     int                 soften;         /* bool */
00247     int                 face_map;       /* bool */
00248     int                 two_sided;      /* Material visible from back */
00249     int                 map_decal;      /* bool */
00250     int                 use_wire;
00251     int                 use_wire_abs;
00252     float               wire_size;
00253     Lib3dsTextureMap    texture1_map;
00254     Lib3dsTextureMap    texture1_mask;
00255     Lib3dsTextureMap    texture2_map;
00256     Lib3dsTextureMap    texture2_mask;
00257     Lib3dsTextureMap    opacity_map;
00258     Lib3dsTextureMap    opacity_mask;
00259     Lib3dsTextureMap    bump_map;
00260     Lib3dsTextureMap    bump_mask;
00261     Lib3dsTextureMap    specular_map;
00262     Lib3dsTextureMap    specular_mask;
00263     Lib3dsTextureMap    shininess_map;
00264     Lib3dsTextureMap    shininess_mask;
00265     Lib3dsTextureMap    self_illum_map;
00266     Lib3dsTextureMap    self_illum_mask;
00267     Lib3dsTextureMap    reflection_map;
00268     Lib3dsTextureMap    reflection_mask;
00269     unsigned            autorefl_map_flags;
00270     int                 autorefl_map_anti_alias;  /* 0=None, 1=Low, 2=Medium, 3=High */
00271     int                 autorefl_map_size;
00272     int                 autorefl_map_frame_step;
00273 } Lib3dsMaterial;
00274 
00276 typedef enum Lib3dsObjectFlags {
00277     LIB3DS_OBJECT_HIDDEN          = 0x01, 
00278     LIB3DS_OBJECT_VIS_LOFTER      = 0x02, 
00279     LIB3DS_OBJECT_DOESNT_CAST     = 0x04, 
00280     LIB3DS_OBJECT_MATTE           = 0x08, 
00281     LIB3DS_OBJECT_DONT_RCVSHADOW  = 0x10, 
00282     LIB3DS_OBJECT_FAST            = 0x20, 
00283     LIB3DS_OBJECT_FROZEN          = 0x40 
00284 } Lib3dsObjectFlags;
00285 
00287 typedef struct Lib3dsCamera {
00288     unsigned    user_id;
00289     void*       user_ptr;
00290     char        name[64];
00291     unsigned    object_flags; /*< @see Lib3dsObjectFlags */ 
00292     float       position[3];
00293     float       target[3];
00294     float       roll;
00295     float       fov;
00296     int         see_cone;
00297     float       near_range;
00298     float       far_range;
00299 } Lib3dsCamera; 
00300 
00302 typedef struct Lib3dsLight {
00303     unsigned    user_id;
00304     void*       user_ptr;
00305     char        name[64];
00306     unsigned    object_flags; 
00307     int         spot_light;     /* bool */
00308     int         see_cone;
00309     float       color[3];
00310     float       position[3];
00311     float       target[3];
00312     float       roll;
00313     int         off;              /* bool */
00314     float       outer_range;
00315     float       inner_range;
00316     float       multiplier;
00317     /*const char**  excludes;*/
00318     float       attenuation;
00319     int         rectangular_spot;   /* bool */
00320     int         shadowed;           /* bool */
00321     float       shadow_bias;
00322     float       shadow_filter;
00323     int         shadow_size;
00324     float       spot_aspect;
00325     int         use_projector;
00326     char        projector[64];
00327     int         spot_overshoot;      /* bool */
00328     int         ray_shadows;         /* bool */
00329     float       ray_bias;
00330     float       hotspot;
00331     float       falloff;
00332 } Lib3dsLight; 
00333 
00334 /* Texture map projection */
00335 typedef enum {
00336   LIB3DS_MAP_NONE           = -1,
00337   LIB3DS_MAP_PLANAR         = 0,
00338   LIB3DS_MAP_CYLINDRICAL    = 1,
00339   LIB3DS_MAP_SPHERICAL      = 2
00340 } Lib3dsMapType;
00341 
00344 typedef enum Lib3dsFaceFlags {
00345   LIB3DS_FACE_VIS_AC    = 0x01,       
00346   LIB3DS_FACE_VIS_BC    = 0x02,       
00347   LIB3DS_FACE_VIS_AB    = 0x04,       
00348   LIB3DS_FACE_WRAP_U    = 0x08,       
00349   LIB3DS_FACE_WRAP_V    = 0x10,       
00350   LIB3DS_FACE_SELECT_3  = (1<<13),    
00351   LIB3DS_FACE_SELECT_2  = (1<<14),    
00352   LIB3DS_FACE_SELECT_1  = (1<<15),    
00353 } Lib3dsFaceFlags;
00354 
00355 typedef struct Lib3dsFace {
00356     unsigned short  index[3];
00357     unsigned short  flags;
00358     int             material;
00359     unsigned        smoothing_group;
00360 } Lib3dsFace; 
00361 
00362 /* Triangular mesh object */
00363 typedef struct Lib3dsMesh {
00364     unsigned        user_id;
00365     void*           user_ptr;
00366     char            name[64];            
00367     unsigned        object_flags;        
00368     int             color;               
00369     float           matrix[4][4];        
00370     unsigned short  nvertices;           
00371     float           (*vertices)[3];
00372     float           (*texcos)[2];
00373     unsigned short* vflags;
00374     unsigned short  nfaces;              
00375     Lib3dsFace*     faces;               
00376     char            box_front[64];
00377     char            box_back[64];
00378     char            box_left[64];
00379     char            box_right[64];
00380     char            box_top[64];
00381     char            box_bottom[64];
00382     int             map_type;
00383     float           map_pos[3];
00384     float           map_matrix[4][4];
00385     float           map_scale;
00386     float           map_tile[2];
00387     float           map_planar_size[2];
00388     float           map_cylinder_height;
00389 } Lib3dsMesh; 
00390 
00391 typedef enum Lib3dsNodeType {
00392     LIB3DS_NODE_AMBIENT_COLOR   = 0,
00393     LIB3DS_NODE_MESH_INSTANCE   = 1,
00394     LIB3DS_NODE_CAMERA          = 2,
00395     LIB3DS_NODE_CAMERA_TARGET   = 3,
00396     LIB3DS_NODE_OMNILIGHT       = 4,
00397     LIB3DS_NODE_SPOTLIGHT       = 5,
00398     LIB3DS_NODE_SPOTLIGHT_TARGET= 6
00399 } Lib3dsNodeType;
00400 
00401 typedef enum Lib3dsNodeFlags{
00402     LIB3DS_NODE_HIDDEN           = 0x000800,
00403     LIB3DS_NODE_SHOW_PATH        = 0x010000,
00404     LIB3DS_NODE_SMOOTHING        = 0x020000,
00405     LIB3DS_NODE_MOTION_BLUR      = 0x100000,
00406     LIB3DS_NODE_MORPH_MATERIALS  = 0x400000
00407 } Lib3dsNodeFlags;
00408 
00409 typedef struct Lib3dsNode {
00410     unsigned            user_id;
00411     void*               user_ptr;
00412     struct Lib3dsNode*  next;
00413     struct Lib3dsNode*  childs;
00414     struct Lib3dsNode*  parent;
00415     Lib3dsNodeType      type;
00416     unsigned short      node_id;            
00417     char                name[64];
00418     unsigned            flags;
00419     float               matrix[4][4];
00420 } Lib3dsNode;
00421 
00422 typedef enum Lib3dsKeyFlags {
00423     LIB3DS_KEY_USE_TENS         = 0x01,
00424     LIB3DS_KEY_USE_CONT         = 0x02,
00425     LIB3DS_KEY_USE_BIAS         = 0x04,
00426     LIB3DS_KEY_USE_EASE_TO      = 0x08,
00427     LIB3DS_KEY_USE_EASE_FROM    = 0x10
00428 } Lib3dsKeyFlags;
00429 
00430 typedef struct Lib3dsKey {
00431     int         frame;
00432     unsigned    flags;
00433     float       tens;
00434     float       cont;
00435     float       bias;
00436     float       ease_to;
00437     float       ease_from;
00438     float       value[4];
00439 } Lib3dsKey;
00440 
00441 typedef enum Lib3dsTrackType {
00442     LIB3DS_TRACK_BOOL   = 0,
00443     LIB3DS_TRACK_FLOAT  = 1,
00444     LIB3DS_TRACK_VECTOR = 3,
00445     LIB3DS_TRACK_QUAT   = 4
00446 } Lib3dsTrackType;
00447 
00448 typedef enum {
00449     LIB3DS_TRACK_REPEAT   = 0x0001,
00450     LIB3DS_TRACK_SMOOTH   = 0x0002,
00451     LIB3DS_TRACK_LOCK_X   = 0x0008,
00452     LIB3DS_TRACK_LOCK_Y   = 0x0010,
00453     LIB3DS_TRACK_LOCK_Z   = 0x0020,
00454     LIB3DS_TRACK_UNLINK_X = 0x0100,
00455     LIB3DS_TRACK_UNLINK_Y = 0x0200,
00456     LIB3DS_TRACK_UNLINK_Z = 0x0400
00457 } Lib3dsTrackFlags;
00458 
00459 typedef struct Lib3dsTrack {
00460     unsigned        flags;
00461     Lib3dsTrackType type; 
00462     int             nkeys;
00463     Lib3dsKey*      keys;   
00464 } Lib3dsTrack;
00465 
00466 typedef struct Lib3dsAmbientColorNode {
00467     Lib3dsNode      base;
00468     float           color[3];
00469     Lib3dsTrack     color_track;
00470 } Lib3dsAmbientColorNode;
00471 
00472 typedef struct Lib3dsMeshInstanceNode {
00473     Lib3dsNode      base;
00474     float           pivot[3];
00475     char            instance_name[64];
00476     float           bbox_min[3];
00477     float           bbox_max[3];
00478     int             hide;
00479     float           pos[3];
00480     float           rot[4];
00481     float           scl[3];
00482     float           morph_smooth;
00483     char            morph[64];
00484     Lib3dsTrack     pos_track;
00485     Lib3dsTrack     rot_track;
00486     Lib3dsTrack     scl_track;
00487     Lib3dsTrack     hide_track;
00488 } Lib3dsMeshInstanceNode;
00489 
00490 typedef struct Lib3dsCameraNode {
00491     Lib3dsNode      base;
00492     float           pos[3];
00493     float           fov;
00494     float           roll;
00495     Lib3dsTrack     pos_track;
00496     Lib3dsTrack     fov_track;
00497     Lib3dsTrack     roll_track;
00498 } Lib3dsCameraNode;
00499 
00500 typedef struct Lib3dsTargetNode {
00501     Lib3dsNode      base;
00502     float           pos[3];
00503     Lib3dsTrack     pos_track;
00504 } Lib3dsTargetNode;
00505 
00506 typedef struct Lib3dsOmnilightNode {
00507     Lib3dsNode      base;
00508     float           pos[3];
00509     float           color[3];
00510     Lib3dsTrack     pos_track;
00511     Lib3dsTrack     color_track;
00512 } Lib3dsOmnilightNode;
00513 
00514 typedef struct Lib3dsSpotlightNode {
00515     Lib3dsNode      base;
00516     float           pos[3];
00517     float           color[3];
00518     float           hotspot;
00519     float           falloff;
00520     float           roll;
00521     Lib3dsTrack     pos_track;
00522     Lib3dsTrack     color_track;
00523     Lib3dsTrack     hotspot_track;
00524     Lib3dsTrack     falloff_track;
00525     Lib3dsTrack     roll_track;
00526 } Lib3dsSpotlightNode;
00527 
00528 typedef struct Lib3dsFile {
00529     unsigned            user_id;
00530     void*               user_ptr;
00531     unsigned            mesh_version;
00532     unsigned            keyf_revision;
00533     char                name[12+1];
00534     float               master_scale;
00535     float               construction_plane[3];
00536     float               ambient[3];
00537     Lib3dsShadow        shadow;
00538     Lib3dsBackground    background;
00539     Lib3dsAtmosphere    atmosphere;
00540     Lib3dsViewport      viewport;
00541     Lib3dsViewport      viewport_keyf;
00542     int                 frames;
00543     int                 segment_from;
00544     int                 segment_to;
00545     int                 current_frame;
00546     int                 materials_size;
00547     int                 nmaterials;         
00548     Lib3dsMaterial**    materials;        
00549     int                 cameras_size;  
00550     int                 ncameras;                      
00551     Lib3dsCamera**      cameras;
00552     int                 lights_size;
00553     int                 nlights;                      
00554     Lib3dsLight**       lights;
00555     int                 meshes_size;
00556     int                 nmeshes;                      
00557     Lib3dsMesh**        meshes;                         
00558     Lib3dsNode*         nodes;
00559 } Lib3dsFile; 
00560 
00561 extern LIB3DSAPI Lib3dsFile* lib3ds_file_open(const char *filename);
00562 extern LIB3DSAPI int lib3ds_file_save(Lib3dsFile *file, const char *filename);
00563 extern LIB3DSAPI Lib3dsFile* lib3ds_file_new();
00564 extern LIB3DSAPI void lib3ds_file_free(Lib3dsFile *file);
00565 extern LIB3DSAPI void lib3ds_file_eval(Lib3dsFile *file, float t);
00566 extern LIB3DSAPI int lib3ds_file_read(Lib3dsFile *file, Lib3dsIo *io);
00567 extern LIB3DSAPI int lib3ds_file_write(Lib3dsFile *file, Lib3dsIo *io);
00568 extern LIB3DSAPI void lib3ds_file_reserve_materials(Lib3dsFile *file, int size, int force);
00569 extern LIB3DSAPI void lib3ds_file_insert_material(Lib3dsFile *file, Lib3dsMaterial *material, int index);
00570 extern LIB3DSAPI void lib3ds_file_remove_material(Lib3dsFile *file, int index);
00571 extern LIB3DSAPI int lib3ds_file_material_by_name(Lib3dsFile *file, const char *name);
00572 extern LIB3DSAPI void lib3ds_file_reserve_cameras(Lib3dsFile *file, int size, int force);
00573 extern LIB3DSAPI void lib3ds_file_insert_camera(Lib3dsFile *file, Lib3dsCamera *camera, int index);
00574 extern LIB3DSAPI void lib3ds_file_remove_camera(Lib3dsFile *file, int index);
00575 extern LIB3DSAPI int lib3ds_file_camera_by_name(Lib3dsFile *file, const char *name);
00576 extern LIB3DSAPI void lib3ds_file_reserve_lights(Lib3dsFile *file, int size, int force);
00577 extern LIB3DSAPI void lib3ds_file_insert_light(Lib3dsFile *file, Lib3dsLight *light, int index);
00578 extern LIB3DSAPI void lib3ds_file_remove_light(Lib3dsFile *file, int index);
00579 extern LIB3DSAPI int lib3ds_file_light_by_name(Lib3dsFile *file, const char *name);
00580 extern LIB3DSAPI void lib3ds_file_reserve_meshes(Lib3dsFile *file, int size, int force);
00581 extern LIB3DSAPI void lib3ds_file_insert_mesh(Lib3dsFile *file, Lib3dsMesh *mesh, int index);
00582 extern LIB3DSAPI void lib3ds_file_remove_mesh(Lib3dsFile *file, int index);
00583 extern LIB3DSAPI int lib3ds_file_mesh_by_name(Lib3dsFile *file, const char *name);
00584 extern LIB3DSAPI Lib3dsMesh* lib3ds_file_mesh_for_node(Lib3dsFile *file, Lib3dsNode *node);
00585 extern LIB3DSAPI Lib3dsNode* lib3ds_file_node_by_name(Lib3dsFile *file, const char* name, Lib3dsNodeType type);
00586 extern LIB3DSAPI Lib3dsNode* lib3ds_file_node_by_id(Lib3dsFile *file, unsigned short node_id);
00587 extern LIB3DSAPI void lib3ds_file_append_node(Lib3dsFile *file, Lib3dsNode *node, Lib3dsNode *parent);
00588 extern LIB3DSAPI void lib3ds_file_insert_node(Lib3dsFile *file, Lib3dsNode *node, Lib3dsNode *at);
00589 extern LIB3DSAPI void lib3ds_file_remove_node(Lib3dsFile *file, Lib3dsNode *node);
00590 extern LIB3DSAPI void lib3ds_file_minmax_node_id(Lib3dsFile *file, unsigned short *min_id, unsigned short *max_id);
00591 extern LIB3DSAPI void lib3ds_file_create_nodes_for_meshes(Lib3dsFile *file);
00592 
00593 
00605 extern LIB3DSAPI void lib3ds_file_bounding_box_of_objects(
00606     Lib3dsFile *file, 
00607     int include_meshes, 
00608     int include_cameras,
00609     int include_lights,
00610     float bmin[3],
00611     float bmax[3]);
00612 
00626 extern LIB3DSAPI void lib3ds_file_bounding_box_of_nodes(
00627     Lib3dsFile *file, 
00628     int include_meshes, 
00629     int include_cameras, 
00630     int include_lights, 
00631     float bmin[3], 
00632     float bmax[3], 
00633     float matrix[4][4]);
00634 
00635 extern LIB3DSAPI Lib3dsMaterial* lib3ds_material_new(const char *name);
00636 extern LIB3DSAPI void lib3ds_material_free(Lib3dsMaterial *material);
00637 extern LIB3DSAPI Lib3dsCamera* lib3ds_camera_new(const char *name);
00638 extern LIB3DSAPI void lib3ds_camera_free(Lib3dsCamera *mesh);
00639 extern LIB3DSAPI Lib3dsLight* lib3ds_light_new(const char *name);
00640 extern LIB3DSAPI void lib3ds_light_free(Lib3dsLight *mesh);
00641 extern LIB3DSAPI Lib3dsMesh* lib3ds_mesh_new(const char *name);
00642 extern LIB3DSAPI void lib3ds_mesh_free(Lib3dsMesh *mesh);
00643 extern LIB3DSAPI void lib3ds_mesh_resize_vertices(Lib3dsMesh *mesh, int nvertices, int use_texcos, int use_flags);
00644 extern LIB3DSAPI void lib3ds_mesh_resize_faces(Lib3dsMesh *mesh, int nfaces);
00645 extern LIB3DSAPI void lib3ds_mesh_bounding_box(Lib3dsMesh *mesh, float bmin[3], float bmax[3]);
00646 extern LIB3DSAPI void lib3ds_mesh_calculate_face_normals(Lib3dsMesh *mesh, float (*face_normals)[3]);
00647 extern LIB3DSAPI void lib3ds_mesh_calculate_vertex_normals(Lib3dsMesh *mesh, float (*normals)[3]);
00648 
00649 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new(Lib3dsNodeType type);
00650 extern LIB3DSAPI Lib3dsAmbientColorNode* lib3ds_node_new_ambient_color(float color0[3]);
00651 extern LIB3DSAPI Lib3dsMeshInstanceNode* lib3ds_node_new_mesh_instance(Lib3dsMesh *mesh, const char* instance_name, float pos0[3], float scl0[3], float rot0[4]);
00652 extern LIB3DSAPI Lib3dsCameraNode* lib3ds_node_new_camera(Lib3dsCamera *camera);
00653 extern LIB3DSAPI Lib3dsTargetNode* lib3ds_node_new_camera_target(Lib3dsCamera *camera);
00654 extern LIB3DSAPI Lib3dsOmnilightNode* lib3ds_node_new_omnilight(Lib3dsLight *light);
00655 extern LIB3DSAPI Lib3dsSpotlightNode* lib3ds_node_new_spotlight(Lib3dsLight *light);
00656 extern LIB3DSAPI Lib3dsTargetNode* lib3ds_node_new_spotlight_target(Lib3dsLight *light);
00657 extern LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node);
00658 extern LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, float t);
00659 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* name, Lib3dsNodeType type);
00660 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, unsigned short node_id);
00661 
00662 extern LIB3DSAPI Lib3dsTrack* lib3ds_track_new(Lib3dsTrackType type, int nkeys);
00663 extern LIB3DSAPI void lib3ds_track_free(Lib3dsTrack *track);
00664 extern LIB3DSAPI void lib3ds_track_resize(Lib3dsTrack *track, int nkeys);
00665 extern LIB3DSAPI void lib3ds_track_eval_bool(Lib3dsTrack *track, int *b, float t);
00666 extern LIB3DSAPI void lib3ds_track_eval_float(Lib3dsTrack *track, float *f, float t);
00667 extern LIB3DSAPI void lib3ds_track_eval_vector(Lib3dsTrack *track, float v[3], float t);
00668 extern LIB3DSAPI void lib3ds_track_eval_quat(Lib3dsTrack *track, float q[4], float t);
00669 
00679 extern LIB3DSAPI float lib3ds_math_ease(
00680     float fp,
00681     float fc,
00682     float fn,
00683     float ease_from,
00684     float ease_to);
00685 
00703 extern LIB3DSAPI void lib3ds_math_cubic_interp(
00704     float *v, 
00705     float *a,
00706     float *p,
00707     float *q,
00708     float *b,
00709     int n,
00710     float t);
00711 
00712 extern LIB3DSAPI void lib3ds_vector_make(
00713     float c[3],
00714     float x,
00715     float y,
00716     float z);
00717 
00723 extern LIB3DSAPI void lib3ds_vector_zero(
00724     float c[3]);
00725 
00733 extern LIB3DSAPI void lib3ds_vector_copy( 
00734     float dst[3],  
00735     float src[3]);
00736 
00742 extern LIB3DSAPI void lib3ds_vector_neg(
00743     float c[3]);
00744 
00745 extern LIB3DSAPI void lib3ds_vector_make(float c[3], float x, float y, float z);
00746 extern LIB3DSAPI void lib3ds_vector_zero(float c[3]);
00747 extern LIB3DSAPI void lib3ds_vector_add(float c[3], float a[3], float b[3]);
00748 extern LIB3DSAPI void lib3ds_vector_sub(float c[3], float a[3], float b[3]);
00749 extern LIB3DSAPI void lib3ds_vector_scalar_mul(float c[3], float a[3], float k);
00750 extern LIB3DSAPI void lib3ds_vector_cross(float c[3], float a[3], float b[3]);
00751 extern LIB3DSAPI float lib3ds_vector_dot(float a[3], float b[3]);
00752 extern LIB3DSAPI float lib3ds_vector_length(float c[3]);
00753 extern LIB3DSAPI void lib3ds_vector_normalize(float c[3]);
00754 extern LIB3DSAPI void lib3ds_vector_normal(float n[3], float a[3], float b[3], float c[3]);
00755 extern LIB3DSAPI void lib3ds_vector_min(float c[3], float a[3]);
00756 extern LIB3DSAPI void lib3ds_vector_max(float c[3], float a[3]);
00757 extern LIB3DSAPI void lib3ds_vector_transform(float c[3], float m[4][4], float a[3]);
00758 
00759 extern LIB3DSAPI void lib3ds_quat_identity(float c[4]);
00760 extern LIB3DSAPI void lib3ds_quat_copy(float dest[4], float src[4]);
00761 extern LIB3DSAPI void lib3ds_quat_axis_angle(float c[4], float axis[3], float angle);
00762 extern LIB3DSAPI void lib3ds_quat_neg(float c[4]);
00763 extern LIB3DSAPI void lib3ds_quat_cnj(float c[4]);
00764 extern LIB3DSAPI void lib3ds_quat_mul(float c[4], float a[4], float b[4]);
00765 extern LIB3DSAPI void lib3ds_quat_scalar(float c[4], float k);
00766 extern LIB3DSAPI void lib3ds_quat_normalize(float c[4]);
00767 extern LIB3DSAPI void lib3ds_quat_inv(float c[4]);
00768 extern LIB3DSAPI float lib3ds_quat_dot(float a[4], float b[4]);
00769 extern LIB3DSAPI float lib3ds_quat_norm(float c[4]);
00770 extern LIB3DSAPI void lib3ds_quat_ln(float c[4]);
00771 extern LIB3DSAPI void lib3ds_quat_ln_dif(float c[4], float a[4], float b[4]);
00772 extern LIB3DSAPI void lib3ds_quat_exp(float c[4]);
00773 extern LIB3DSAPI void lib3ds_quat_slerp(float c[4], float a[4], float b[4], float t);
00774 extern LIB3DSAPI void lib3ds_quat_squad(float c[4], float a[4], float p[4], float q[4], float b[4], float t);
00775 extern LIB3DSAPI void lib3ds_quat_tangent(float c[4], float p[4], float q[4], float n[4]);
00776 
00777 extern LIB3DSAPI void lib3ds_matrix_zero(float m[4][4]);
00778 extern LIB3DSAPI void lib3ds_matrix_identity(float  m[4][4]);
00779 extern LIB3DSAPI void lib3ds_matrix_copy(float dest[4][4], float src[4][4]);
00780 extern LIB3DSAPI void lib3ds_matrix_neg(float m[4][4]);
00781 extern LIB3DSAPI void lib3ds_matrix_transpose(float m[4][4]);
00782 extern LIB3DSAPI void lib3ds_matrix_add(float m[4][4], float a[4][4], float b[4][4]);
00783 extern LIB3DSAPI void lib3ds_matrix_sub(float m[4][4], float a[4][4], float b[4][4]);
00784 extern LIB3DSAPI void lib3ds_matrix_mult(float m[4][4], float a[4][4], float b[4][4]);
00785 extern LIB3DSAPI void lib3ds_matrix_scalar(float m[4][4], float k);
00786 extern LIB3DSAPI float lib3ds_matrix_det(float m[4][4]);
00787 extern LIB3DSAPI int lib3ds_matrix_inv(float m[4][4]);
00788 extern LIB3DSAPI void lib3ds_matrix_translate(float m[4][4], float x, float y, float z);
00789 extern LIB3DSAPI void lib3ds_matrix_scale(float m[4][4], float x, float y, float z);
00790 extern LIB3DSAPI void lib3ds_matrix_rotate_quat(float m[4][4], float q[4]);
00791 extern LIB3DSAPI void lib3ds_matrix_rotate(float m[4][4], float angle, float ax, float ay, float az);
00792 extern LIB3DSAPI void lib3ds_matrix_camera(float m[4][4], float pos[3], float tgt[3], float roll);
00793 
00795 #ifdef __cplusplus
00796 }
00797 #endif
00798 #endif
00799