root/OpenSceneGraph/trunk/src/osgPlugins/3ds/lib3ds/lib3ds.h @ 10853

Revision 10853, 30.7 kB (checked in by robert, 5 years ago)

From Sukender,
"Here is our freshly baked 3DS reader/writer (named 'v0.5' to differentiate from previous one). Changes are against trunk rev. 10819.
Short changelog (from rev 10819):
- Added 3DS writer
- Sync'd with latest lib3DS
- Added options, especially "flattenMatrixTransforms" to get the "old" behaviour (else the reader correctly maps to OSG the transforms from the 3DS file).

What should be done:
- Check with pivot points, with and without "flattenMatrixTransforms" option.
- We ran tests on it, but we can never be 100% sure there is no bug. Testing from the community would of course be helpful."

RevLine 
[10853]1/* -*- c -*- */
2#ifndef INCLUDED_LIB3DS_H
3#define INCLUDED_LIB3DS_H
4/*
5    Copyright (C) 1996-2008 by Jan Eric Kyprianidis <www.kyprianidis.com>
6    All rights reserved.
7   
8    This program is free  software: you can redistribute it and/or modify
9    it under the terms of the GNU Lesser General Public License as published
10    by the Free Software Foundation, either version 2.1 of the License, or
11    (at your option) any later version.
12
13    Thisprogram  is  distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16    GNU Lesser General Public License for more details.
17   
18    You should  have received a copy of the GNU Lesser General Public License
19    along with  this program; If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#include <stddef.h>
23
24#ifndef LIB3DSAPI
25    #if defined(_MSC_VER) && !defined(LIB3DS_STATIC)
26        #ifdef LIB3DS_EXPORTS
27            #define LIB3DSAPI __declspec(dllexport)
28        #else               
29            #define LIB3DSAPI __declspec(dllimport)
30        #endif           
31    #else
32        #define LIB3DSAPI
33    #endif
34#endif
35
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41
42/** @defgroup api API */
43/** @{ */
44
45typedef enum Lib3dsIoSeek {
46    LIB3DS_SEEK_SET     = 0,
47    LIB3DS_SEEK_CUR     = 1,
48    LIB3DS_SEEK_END     = 2
49} Lib3dsIoSeek;
50
51typedef enum Lib3dsLogLevel {
52    LIB3DS_LOG_ERROR    = 0,
53    LIB3DS_LOG_WARN     = 1,
54    LIB3DS_LOG_INFO     = 2,
55    LIB3DS_LOG_DEBUG    = 3
56} Lib3dsLogLevel;
57
58typedef struct Lib3dsIo {
59    void*   impl;
60    void*   self;
61    long    (*seek_func) (void *self, long offset, Lib3dsIoSeek origin);
62    long    (*tell_func) (void *self);
63    size_t  (*read_func) (void *self, void *buffer, size_t size);
64    size_t  (*write_func)(void *self, const void *buffer, size_t size);
65    void    (*log_func)  (void *self, Lib3dsLogLevel level, int indent, const char *msg);
66} Lib3dsIo;
67
68/* Atmosphere settings */
69typedef struct Lib3dsAtmosphere {
70    int         use_fog;
71    float       fog_color[3];
72    int         fog_background;
73    float       fog_near_plane;
74    float       fog_near_density;
75    float       fog_far_plane;
76    float       fog_far_density;
77    int         use_layer_fog;
78    unsigned    layer_fog_flags;
79    float       layer_fog_color[3];
80    float       layer_fog_near_y;
81    float       layer_fog_far_y;
82    float       layer_fog_density;
83    int         use_dist_cue;
84    int         dist_cue_background;     /* bool */
85    float       dist_cue_near_plane;
86    float       dist_cue_near_dimming;
87    float       dist_cue_far_plane;
88    float       dist_cue_far_dimming;
89} Lib3dsAtmosphere;
90
91/* Background settings */
92typedef struct Lib3dsBackground {
93    int         use_bitmap;
94    char        bitmap_name[64];
95    int         use_solid;
96    float       solid_color[3];
97    int         use_gradient;
98    float       gradient_percent;
99    float       gradient_top[3];
100    float       gradient_middle[3];
101    float       gradient_bottom[3];
102} Lib3dsBackground;
103
104/* Shadow settings */
105typedef struct Lib3dsShadow {
106    short       map_size;           /* Global shadow map size that ranges from 10 to 4096 */
107    float       low_bias;           /* Global shadow low bias */
108    float       hi_bias;            /* Global shadow hi bias */
109    float       filter;             /* Global shadow filter that ranges from 1 (lowest) to 10 (highest) */
110    float       ray_bias;           /* Global raytraced shadow bias */
111} Lib3dsShadow;
112
113/* Layout view types */
114typedef enum Lib3dsViewType {
115    LIB3DS_VIEW_NOT_USED   = 0,
116    LIB3DS_VIEW_TOP        = 1,
117    LIB3DS_VIEW_BOTTOM     = 2,
118    LIB3DS_VIEW_LEFT       = 3,
119    LIB3DS_VIEW_RIGHT      = 4,
120    LIB3DS_VIEW_FRONT      = 5,
121    LIB3DS_VIEW_BACK       = 6,
122    LIB3DS_VIEW_USER       = 7,
123    LIB3DS_VIEW_SPOTLIGHT  = 18,
124    LIB3DS_VIEW_CAMERA     = 65535
125} Lib3dsViewType;
126
127/* Layout styles */
128typedef enum Lib3dsLayoutStyle {
129    LIB3DS_LAYOUT_SINGLE                    = 0,
130    LIB3DS_LAYOUT_TWO_PANE_VERT_SPLIT       = 1,
131    LIB3DS_LAYOUT_TWO_PANE_HORIZ_SPLIT      = 2,
132    LIB3DS_LAYOUT_FOUR_PANE                 = 3,
133    LIB3DS_LAYOUT_THREE_PANE_LEFT_SPLIT     = 4,
134    LIB3DS_LAYOUT_THREE_PANE_BOTTOM_SPLIT   = 5,
135    LIB3DS_LAYOUT_THREE_PANE_RIGHT_SPLIT    = 6,
136    LIB3DS_LAYOUT_THREE_PANE_TOP_SPLIT      = 7,
137    LIB3DS_LAYOUT_THREE_PANE_VERT_SPLIT     = 8,
138    LIB3DS_LAYOUT_THREE_PANE_HORIZ_SPLIT    = 9,
139    LIB3DS_LAYOUT_FOUR_PANE_LEFT_SPLIT      = 10,
140    LIB3DS_LAYOUT_FOUR_PANE_RIGHT_SPLIT     = 11
141} Lib3dsLayoutStyle;
142
143/* Layout view settings */
144typedef struct Lib3dsView {
145    int         type;
146    unsigned    axis_lock;
147    short       position[2];
148    short       size[2];
149    float       zoom;
150    float       center[3];
151    float       horiz_angle;
152    float       vert_angle;
153    char        camera[11];
154} Lib3dsView;
155
156#define LIB3DS_LAYOUT_MAX_VIEWS 32
157
158/* Viewport and default view settings */
159typedef struct Lib3dsViewport {
160    int             layout_style;
161    int             layout_active;
162    int             layout_swap;
163    int             layout_swap_prior;
164    int             layout_swap_view;
165    unsigned short  layout_position[2];
166    unsigned short  layout_size[2];
167    int             layout_nviews;
168    Lib3dsView      layout_views[LIB3DS_LAYOUT_MAX_VIEWS];
169    int             default_type;
170    float           default_position[3];
171    float           default_width;
172    float           default_horiz_angle;
173    float           default_vert_angle;
174    float           default_roll_angle;
175    char            default_camera[64];
176} Lib3dsViewport;
177
178/* Material texture map flags */
179typedef enum Lib3dsTextureMapFlags {
180    LIB3DS_TEXTURE_DECALE       = 0x0001,
181    LIB3DS_TEXTURE_MIRROR       = 0x0002,
182    LIB3DS_TEXTURE_NEGATE       = 0x0008,
183    LIB3DS_TEXTURE_NO_TILE      = 0x0010,
184    LIB3DS_TEXTURE_SUMMED_AREA  = 0x0020,
185    LIB3DS_TEXTURE_ALPHA_SOURCE = 0x0040,
186    LIB3DS_TEXTURE_TINT         = 0x0080,
187    LIB3DS_TEXTURE_IGNORE_ALPHA = 0x0100,
188    LIB3DS_TEXTURE_RGB_TINT     = 0x0200
189} Lib3dsTextureMapFlags;
190
191/* Material texture map */
192typedef struct Lib3dsTextureMap {
193    unsigned    user_id;
194    void*       user_ptr;
195    char        name[64];
196    unsigned    flags;
197    float       percent;
198    float       blur;
199    float       scale[2];
200    float       offset[2];
201    float       rotation;
202    float       tint_1[3];
203    float       tint_2[3];
204    float       tint_r[3];
205    float       tint_g[3];
206    float       tint_b[3];
207} Lib3dsTextureMap;
208
209/* Auto reflection texture map flags */
210typedef enum Lib3dsAutoReflMapFlags {
211    LIB3DS_AUTOREFL_USE                     = 0x0001,
212    LIB3DS_AUTOREFL_READ_FIRST_FRAME_ONLY   = 0x0004,
213    LIB3DS_AUTOREFL_FLAT_MIRROR             = 0x0008
214} Lib3dsAutoReflMapFlags;
215
216/* Material shading type */
217typedef enum Lib3dsShading {
218    LIB3DS_SHADING_WIRE_FRAME = 0,
219    LIB3DS_SHADING_FLAT       = 1,
220    LIB3DS_SHADING_GOURAUD    = 2,
221    LIB3DS_SHADING_PHONG      = 3,
222    LIB3DS_SHADING_METAL      = 4
223} Lib3dsShading;
224
225/** Material */
226typedef struct Lib3dsMaterial {
227    unsigned            user_id;
228    void*               user_ptr;
229    char                name[64];           /* Material name */
230    float               ambient[3];         /* Material ambient reflectivity */
231    float               diffuse[3];         /* Material diffuse reflectivity */
232    float               specular[3];        /* Material specular reflectivity */
233    float               shininess;          /* Material specular exponent */
234    float               shin_strength;
235    int                 use_blur;
236    float               blur;
237    float               transparency;
238    float               falloff;
239    int                 is_additive;
240    int                 self_illum_flag; /* bool */
241    float               self_illum;
242    int                 use_falloff;
243    int                 shading;
244    int                 soften;         /* bool */
245    int                 face_map;       /* bool */
246    int                 two_sided;      /* Material visible from back */
247    int                 map_decal;      /* bool */
248    int                 use_wire;
249    int                 use_wire_abs;
250    float               wire_size;
251    Lib3dsTextureMap    texture1_map;
252    Lib3dsTextureMap    texture1_mask;
253    Lib3dsTextureMap    texture2_map;
254    Lib3dsTextureMap    texture2_mask;
255    Lib3dsTextureMap    opacity_map;
256    Lib3dsTextureMap    opacity_mask;
257    Lib3dsTextureMap    bump_map;
258    Lib3dsTextureMap    bump_mask;
259    Lib3dsTextureMap    specular_map;
260    Lib3dsTextureMap    specular_mask;
261    Lib3dsTextureMap    shininess_map;
262    Lib3dsTextureMap    shininess_mask;
263    Lib3dsTextureMap    self_illum_map;
264    Lib3dsTextureMap    self_illum_mask;
265    Lib3dsTextureMap    reflection_map;
266    Lib3dsTextureMap    reflection_mask;
267    unsigned            autorefl_map_flags;
268    int                 autorefl_map_anti_alias;  /* 0=None, 1=Low, 2=Medium, 3=High */
269    int                 autorefl_map_size;
270    int                 autorefl_map_frame_step;
271} Lib3dsMaterial;
272
273/** Object flags for cameras, lights and meshes */
274typedef enum Lib3dsObjectFlags {
275    LIB3DS_OBJECT_HIDDEN          = 0x01,
276    LIB3DS_OBJECT_VIS_LOFTER      = 0x02,
277    LIB3DS_OBJECT_DOESNT_CAST     = 0x04,
278    LIB3DS_OBJECT_MATTE           = 0x08,
279    LIB3DS_OBJECT_DONT_RCVSHADOW  = 0x10,
280    LIB3DS_OBJECT_FAST            = 0x20,
281    LIB3DS_OBJECT_FROZEN          = 0x40
282} Lib3dsObjectFlags;
283
284/** Camera object */
285typedef struct Lib3dsCamera {
286    unsigned    user_id;
287    void*       user_ptr;
288    char        name[64];
289    unsigned    object_flags; /*< @see Lib3dsObjectFlags */ 
290    float       position[3];
291    float       target[3];
292    float       roll;
293    float       fov;
294    int         see_cone;
295    float       near_range;
296    float       far_range;
297} Lib3dsCamera;
298
299/** Light object */
300typedef struct Lib3dsLight {
301    unsigned    user_id;
302    void*       user_ptr;
303    char        name[64];
304    unsigned    object_flags;
305    int         spot_light;     /* bool */
306    int         see_cone;
307    float       color[3];
308    float       position[3];
309    float       target[3];
310    float       roll;
311    int         off;              /* bool */
312    float       outer_range;
313    float       inner_range;
314    float       multiplier;
315    /*const char**  excludes;*/
316    float       attenuation;
317    int         rectangular_spot;   /* bool */
318    int         shadowed;           /* bool */
319    float       shadow_bias;
320    float       shadow_filter;
321    int         shadow_size;
322    float       spot_aspect;
323    int         use_projector;
324    char        projector[64];
325    int         spot_overshoot;      /* bool */
326    int         ray_shadows;         /* bool */
327    float       ray_bias;
328    float       hotspot;
329    float       falloff;
330} Lib3dsLight;
331
332/* Texture map projection */
333typedef enum {
334  LIB3DS_MAP_NONE           = -1,
335  LIB3DS_MAP_PLANAR         = 0,
336  LIB3DS_MAP_CYLINDRICAL    = 1,
337  LIB3DS_MAP_SPHERICAL      = 2
338} Lib3dsMapType;
339
340/**  Meaning of Lib3dsFace::flags. ABC are points of the current face
341    (A: is 1st vertex, B is 2nd vertex, C is 3rd vertex) */
342typedef enum Lib3dsFaceFlags {
343  LIB3DS_FACE_VIS_AC    = 0x01,       /**< Bit 0: Edge visibility AC */
344  LIB3DS_FACE_VIS_BC    = 0x02,       /**< Bit 1: Edge visibility BC */
345  LIB3DS_FACE_VIS_AB    = 0x04,       /**< Bit 2: Edge visibility AB */
346  LIB3DS_FACE_WRAP_U    = 0x08,       /**< Bit 3: Face is at tex U wrap seam */
347  LIB3DS_FACE_WRAP_V    = 0x10,       /**< Bit 4: Face is at tex V wrap seam */
348  LIB3DS_FACE_SELECT_3  = (1<<13),    /**< Bit 13: Selection of the face in selection 3*/
349  LIB3DS_FACE_SELECT_2  = (1<<14),    /**< Bit 14: Selection of the face in selection 2*/
350  LIB3DS_FACE_SELECT_1  = (1<<15)    /**< Bit 15: Selection of the face in selection 1*/
351} Lib3dsFaceFlags;
352
353typedef struct Lib3dsFace {
354    unsigned short  index[3];
355    unsigned short  flags;
356    int             material;
357    unsigned        smoothing_group;
358} Lib3dsFace;
359
360/* Triangular mesh object */
361typedef struct Lib3dsMesh {
362    unsigned        user_id;
363    void*           user_ptr;
364    char            name[64];            /**< Mesh name. Don't use more than 8 characters  */
365    unsigned        object_flags;        /**< @see Lib3dsObjectFlags */ 
366    int             color;               /**< Index to editor palette [0..255] */
367    float           matrix[4][4];        /**< Transformation matrix for mesh data */
368    unsigned short  nvertices;           /**< Number of vertices in vertex array (max. 65535) */
369    float           (*vertices)[3];
370    float           (*texcos)[2];
371    unsigned short* vflags;
372    unsigned short  nfaces;              /**< Number of faces in face array (max. 65535) */
373    Lib3dsFace*     faces;               
374    char            box_front[64];
375    char            box_back[64];
376    char            box_left[64];
377    char            box_right[64];
378    char            box_top[64];
379    char            box_bottom[64];
380    int             map_type;
381    float           map_pos[3];
382    float           map_matrix[4][4];
383    float           map_scale;
384    float           map_tile[2];
385    float           map_planar_size[2];
386    float           map_cylinder_height;
387} Lib3dsMesh;
388
389typedef enum Lib3dsNodeType {
390    LIB3DS_NODE_AMBIENT_COLOR   = 0,
391    LIB3DS_NODE_MESH_INSTANCE   = 1,
392    LIB3DS_NODE_CAMERA          = 2,
393    LIB3DS_NODE_CAMERA_TARGET   = 3,
394    LIB3DS_NODE_OMNILIGHT       = 4,
395    LIB3DS_NODE_SPOTLIGHT       = 5,
396    LIB3DS_NODE_SPOTLIGHT_TARGET= 6
397} Lib3dsNodeType;
398
399typedef enum Lib3dsNodeFlags{
400    LIB3DS_NODE_HIDDEN           = 0x000800,
401    LIB3DS_NODE_SHOW_PATH        = 0x010000,
402    LIB3DS_NODE_SMOOTHING        = 0x020000,
403    LIB3DS_NODE_MOTION_BLUR      = 0x100000,
404    LIB3DS_NODE_MORPH_MATERIALS  = 0x400000
405} Lib3dsNodeFlags;
406
407typedef struct Lib3dsNode {
408    unsigned            user_id;
409    void*               user_ptr;
410    struct Lib3dsNode*  next;
411    struct Lib3dsNode*  childs;
412    struct Lib3dsNode*  parent;
413    Lib3dsNodeType      type;
414    unsigned short      node_id;            /**< 0..65535 */
415    char                name[64];
416    unsigned            flags;
417    float               matrix[4][4];
418} Lib3dsNode;
419
420typedef enum Lib3dsKeyFlags {
421    LIB3DS_KEY_USE_TENS         = 0x01,
422    LIB3DS_KEY_USE_CONT         = 0x02,
423    LIB3DS_KEY_USE_BIAS         = 0x04,
424    LIB3DS_KEY_USE_EASE_TO      = 0x08,
425    LIB3DS_KEY_USE_EASE_FROM    = 0x10
426} Lib3dsKeyFlags;
427
428typedef struct Lib3dsKey {
429    int         frame;
430    unsigned    flags;
431    float       tens;
432    float       cont;
433    float       bias;
434    float       ease_to;
435    float       ease_from;
436    float       value[4];
437} Lib3dsKey;
438
439typedef enum Lib3dsTrackType {
440    LIB3DS_TRACK_BOOL   = 0,
441    LIB3DS_TRACK_FLOAT  = 1,
442    LIB3DS_TRACK_VECTOR = 3,
443    LIB3DS_TRACK_QUAT   = 4
444} Lib3dsTrackType;
445
446typedef enum {
447    LIB3DS_TRACK_REPEAT   = 0x0001,
448    LIB3DS_TRACK_SMOOTH   = 0x0002,
449    LIB3DS_TRACK_LOCK_X   = 0x0008,
450    LIB3DS_TRACK_LOCK_Y   = 0x0010,
451    LIB3DS_TRACK_LOCK_Z   = 0x0020,
452    LIB3DS_TRACK_UNLINK_X = 0x0100,
453    LIB3DS_TRACK_UNLINK_Y = 0x0200,
454    LIB3DS_TRACK_UNLINK_Z = 0x0400
455} Lib3dsTrackFlags;
456
457typedef struct Lib3dsTrack {
458    unsigned        flags;
459    Lib3dsTrackType type;
460    int             nkeys;
461    Lib3dsKey*      keys;   
462} Lib3dsTrack;
463
464typedef struct Lib3dsAmbientColorNode {
465    Lib3dsNode      base;
466    float           color[3];
467    Lib3dsTrack     color_track;
468} Lib3dsAmbientColorNode;
469
470typedef struct Lib3dsMeshInstanceNode {
471    Lib3dsNode      base;
472    float           pivot[3];
473    char            instance_name[64];
474    float           bbox_min[3];
475    float           bbox_max[3];
476    int             hide;
477    float           pos[3];
478    float           rot[4];
479    float           scl[3];
480    float           morph_smooth;
481    char            morph[64];
482    Lib3dsTrack     pos_track;
483    Lib3dsTrack     rot_track;
484    Lib3dsTrack     scl_track;
485    Lib3dsTrack     hide_track;
486} Lib3dsMeshInstanceNode;
487
488typedef struct Lib3dsCameraNode {
489    Lib3dsNode      base;
490    float           pos[3];
491    float           fov;
492    float           roll;
493    Lib3dsTrack     pos_track;
494    Lib3dsTrack     fov_track;
495    Lib3dsTrack     roll_track;
496} Lib3dsCameraNode;
497
498typedef struct Lib3dsTargetNode {
499    Lib3dsNode      base;
500    float           pos[3];
501    Lib3dsTrack     pos_track;
502} Lib3dsTargetNode;
503
504typedef struct Lib3dsOmnilightNode {
505    Lib3dsNode      base;
506    float           pos[3];
507    float           color[3];
508    Lib3dsTrack     pos_track;
509    Lib3dsTrack     color_track;
510} Lib3dsOmnilightNode;
511
512typedef struct Lib3dsSpotlightNode {
513    Lib3dsNode      base;
514    float           pos[3];
515    float           color[3];
516    float           hotspot;
517    float           falloff;
518    float           roll;
519    Lib3dsTrack     pos_track;
520    Lib3dsTrack     color_track;
521    Lib3dsTrack     hotspot_track;
522    Lib3dsTrack     falloff_track;
523    Lib3dsTrack     roll_track;
524} Lib3dsSpotlightNode;
525
526typedef struct Lib3dsFile {
527    unsigned            user_id;
528    void*               user_ptr;
529    unsigned            mesh_version;
530    unsigned            keyf_revision;
531    char                name[12+1];
532    float               master_scale;
533    float               construction_plane[3];
534    float               ambient[3];
535    Lib3dsShadow        shadow;
536    Lib3dsBackground    background;
537    Lib3dsAtmosphere    atmosphere;
538    Lib3dsViewport      viewport;
539    Lib3dsViewport      viewport_keyf;
540    int                 frames;
541    int                 segment_from;
542    int                 segment_to;
543    int                 current_frame;
544    int                 materials_size;
545    int                 nmaterials;         
546    Lib3dsMaterial**    materials;       
547    int                 cameras_size; 
548    int                 ncameras;                     
549    Lib3dsCamera**      cameras;
550    int                 lights_size;
551    int                 nlights;                     
552    Lib3dsLight**       lights;
553    int                 meshes_size;
554    int                 nmeshes;                     
555    Lib3dsMesh**        meshes;                         
556    Lib3dsNode*         nodes;
557} Lib3dsFile;
558
559extern LIB3DSAPI Lib3dsFile* lib3ds_file_open(const char *filename);
560extern LIB3DSAPI int lib3ds_file_save(Lib3dsFile *file, const char *filename);
561extern LIB3DSAPI Lib3dsFile* lib3ds_file_new();
562extern LIB3DSAPI void lib3ds_file_free(Lib3dsFile *file);
563extern LIB3DSAPI void lib3ds_file_eval(Lib3dsFile *file, float t);
564extern LIB3DSAPI int lib3ds_file_read(Lib3dsFile *file, Lib3dsIo *io);
565extern LIB3DSAPI int lib3ds_file_write(Lib3dsFile *file, Lib3dsIo *io);
566extern LIB3DSAPI void lib3ds_file_reserve_materials(Lib3dsFile *file, int size, int force);
567extern LIB3DSAPI void lib3ds_file_insert_material(Lib3dsFile *file, Lib3dsMaterial *material, int index);
568extern LIB3DSAPI void lib3ds_file_remove_material(Lib3dsFile *file, int index);
569extern LIB3DSAPI int lib3ds_file_material_by_name(Lib3dsFile *file, const char *name);
570extern LIB3DSAPI void lib3ds_file_reserve_cameras(Lib3dsFile *file, int size, int force);
571extern LIB3DSAPI void lib3ds_file_insert_camera(Lib3dsFile *file, Lib3dsCamera *camera, int index);
572extern LIB3DSAPI void lib3ds_file_remove_camera(Lib3dsFile *file, int index);
573extern LIB3DSAPI int lib3ds_file_camera_by_name(Lib3dsFile *file, const char *name);
574extern LIB3DSAPI void lib3ds_file_reserve_lights(Lib3dsFile *file, int size, int force);
575extern LIB3DSAPI void lib3ds_file_insert_light(Lib3dsFile *file, Lib3dsLight *light, int index);
576extern LIB3DSAPI void lib3ds_file_remove_light(Lib3dsFile *file, int index);
577extern LIB3DSAPI int lib3ds_file_light_by_name(Lib3dsFile *file, const char *name);
578extern LIB3DSAPI void lib3ds_file_reserve_meshes(Lib3dsFile *file, int size, int force);
579extern LIB3DSAPI void lib3ds_file_insert_mesh(Lib3dsFile *file, Lib3dsMesh *mesh, int index);
580extern LIB3DSAPI void lib3ds_file_remove_mesh(Lib3dsFile *file, int index);
581extern LIB3DSAPI int lib3ds_file_mesh_by_name(Lib3dsFile *file, const char *name);
582extern LIB3DSAPI Lib3dsMesh* lib3ds_file_mesh_for_node(Lib3dsFile *file, Lib3dsNode *node);
583extern LIB3DSAPI Lib3dsNode* lib3ds_file_node_by_name(Lib3dsFile *file, const char* name, Lib3dsNodeType type);
584extern LIB3DSAPI Lib3dsNode* lib3ds_file_node_by_id(Lib3dsFile *file, unsigned short node_id);
585extern LIB3DSAPI void lib3ds_file_append_node(Lib3dsFile *file, Lib3dsNode *node, Lib3dsNode *parent);
586extern LIB3DSAPI void lib3ds_file_insert_node(Lib3dsFile *file, Lib3dsNode *node, Lib3dsNode *at);
587extern LIB3DSAPI void lib3ds_file_remove_node(Lib3dsFile *file, Lib3dsNode *node);
588extern LIB3DSAPI void lib3ds_file_minmax_node_id(Lib3dsFile *file, unsigned short *min_id, unsigned short *max_id);
589extern LIB3DSAPI void lib3ds_file_create_nodes_for_meshes(Lib3dsFile *file);
590
591
592/**
593    This function computes the bounding box of meshes, cameras
594    and lights defined in the 3D editor.
595
596    \param file             The Lib3dsFile object to be examined.
597    \param include_meshes   Include meshes in bounding box calculation.
598    \param include_cameras  Include cameras in bounding box calculation.
599    \param include_lights   Include lights in bounding box calculation.
600    \param bmin             Returned minimum x,y,z values.
601    \param bmax             Returned maximum x,y,z values.
602 */
603extern LIB3DSAPI void lib3ds_file_bounding_box_of_objects(
604    Lib3dsFile *file,
605    int include_meshes,
606    int include_cameras,
607    int include_lights,
608    float bmin[3],
609    float bmax[3]);
610
611/**
612    This function computes the bounding box of mesh, camera
613    and light instances defined in the Keyframer.
614   
615    \param file             The Lib3dsFile object to be examined.
616    \param include_meshes   Include meshes in bounding box calculation.
617    \param include_cameras  Include cameras in bounding box calculation.
618    \param include_lights   Include lights in bounding box calculation.
619    \param bmin             Returned minimum x,y,z values.
620    \param bmax             Returned maximum x,y,z values.
621    \param matrix           A matrix describing the coordinate system to
622                            calculate the bounding box in.
623 */
624extern LIB3DSAPI void lib3ds_file_bounding_box_of_nodes(
625    Lib3dsFile *file,
626    int include_meshes,
627    int include_cameras,
628    int include_lights,
629    float bmin[3],
630    float bmax[3],
631    float matrix[4][4]);
632
633extern LIB3DSAPI Lib3dsMaterial* lib3ds_material_new(const char *name);
634extern LIB3DSAPI void lib3ds_material_free(Lib3dsMaterial *material);
635extern LIB3DSAPI Lib3dsCamera* lib3ds_camera_new(const char *name);
636extern LIB3DSAPI void lib3ds_camera_free(Lib3dsCamera *mesh);
637extern LIB3DSAPI Lib3dsLight* lib3ds_light_new(const char *name);
638extern LIB3DSAPI void lib3ds_light_free(Lib3dsLight *mesh);
639extern LIB3DSAPI Lib3dsMesh* lib3ds_mesh_new(const char *name);
640extern LIB3DSAPI void lib3ds_mesh_free(Lib3dsMesh *mesh);
641extern LIB3DSAPI void lib3ds_mesh_resize_vertices(Lib3dsMesh *mesh, int nvertices, int use_texcos, int use_flags);
642extern LIB3DSAPI void lib3ds_mesh_resize_faces(Lib3dsMesh *mesh, int nfaces);
643extern LIB3DSAPI void lib3ds_mesh_bounding_box(Lib3dsMesh *mesh, float bmin[3], float bmax[3]);
644extern LIB3DSAPI void lib3ds_mesh_calculate_face_normals(Lib3dsMesh *mesh, float (*face_normals)[3]);
645extern LIB3DSAPI void lib3ds_mesh_calculate_vertex_normals(Lib3dsMesh *mesh, float (*normals)[3]);
646
647extern LIB3DSAPI Lib3dsNode* lib3ds_node_new(Lib3dsNodeType type);
648extern LIB3DSAPI Lib3dsAmbientColorNode* lib3ds_node_new_ambient_color(float color0[3]);
649extern LIB3DSAPI Lib3dsMeshInstanceNode* lib3ds_node_new_mesh_instance(Lib3dsMesh *mesh, const char* instance_name, float pos0[3], float scl0[3], float rot0[4]);
650extern LIB3DSAPI Lib3dsCameraNode* lib3ds_node_new_camera(Lib3dsCamera *camera);
651extern LIB3DSAPI Lib3dsTargetNode* lib3ds_node_new_camera_target(Lib3dsCamera *camera);
652extern LIB3DSAPI Lib3dsOmnilightNode* lib3ds_node_new_omnilight(Lib3dsLight *light);
653extern LIB3DSAPI Lib3dsSpotlightNode* lib3ds_node_new_spotlight(Lib3dsLight *light);
654extern LIB3DSAPI Lib3dsTargetNode* lib3ds_node_new_spotlight_target(Lib3dsLight *light);
655extern LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node);
656extern LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, float t);
657extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* name, Lib3dsNodeType type);
658extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, unsigned short node_id);
659
660extern LIB3DSAPI Lib3dsTrack* lib3ds_track_new(Lib3dsTrackType type, int nkeys);
661extern LIB3DSAPI void lib3ds_track_free(Lib3dsTrack *track);
662extern LIB3DSAPI void lib3ds_track_resize(Lib3dsTrack *track, int nkeys);
663extern LIB3DSAPI void lib3ds_track_eval_bool(Lib3dsTrack *track, int *b, float t);
664extern LIB3DSAPI void lib3ds_track_eval_float(Lib3dsTrack *track, float *f, float t);
665extern LIB3DSAPI void lib3ds_track_eval_vector(Lib3dsTrack *track, float v[3], float t);
666extern LIB3DSAPI void lib3ds_track_eval_quat(Lib3dsTrack *track, float q[4], float t);
667
668/**
669    Calculates the ease in/out function. See Lib3dsKey for details.
670   
671    \param fp           Previous frame number.
672    \param fc           Current frame number.
673    \param fn           Next frame number.
674    \param ease_from    Ease in value [0, 1.0]
675    \param ease_to      Ease out value [0, 1.0]
676*/
677extern LIB3DSAPI float lib3ds_math_ease(
678    float fp,
679    float fc,
680    float fn,
681    float ease_from,
682    float ease_to);
683
684/** 
685    Computes a point on a n-dimensional cubic hermite spline.
686    \param v   
687        [out] Result
688    \param a
689        [in] First point of the spline.
690    \param p   
691        [in] Tangent at the first point of the spline.
692    \param q
693        [in] Tangent at the second point of the spline.
694    \param b
695        [in] Second point of the spline.
696    \param n
697        [in] Dimension
698    \param t
699        [in] Parameter value [0...1]
700*/
701extern LIB3DSAPI void lib3ds_math_cubic_interp(
702    float *v,
703    float *a,
704    float *p,
705    float *q,
706    float *b,
707    int n,
708    float t);
709
710extern LIB3DSAPI void lib3ds_vector_make(
711    float c[3],
712    float x,
713    float y,
714    float z);
715
716/**
717    Sets all components of a vector to zero.
718    \param c
719        The Pointer to the vector.
720*/
721extern LIB3DSAPI void lib3ds_vector_zero(
722    float c[3]);
723
724/**
725    Copies all components of a vector to another vector.
726    \param dst
727        [out] The destination vector.
728    \param src
729        [in] The source vector.
730*/
731extern LIB3DSAPI void lib3ds_vector_copy(
732    float dst[3], 
733    float src[3]);
734
735/**
736    Negates all components of a vector.
737    \param c
738        The Pointer to the vector.
739*/
740extern LIB3DSAPI void lib3ds_vector_neg(
741    float c[3]);
742
743extern LIB3DSAPI void lib3ds_vector_make(float c[3], float x, float y, float z);
744extern LIB3DSAPI void lib3ds_vector_zero(float c[3]);
745extern LIB3DSAPI void lib3ds_vector_add(float c[3], float a[3], float b[3]);
746extern LIB3DSAPI void lib3ds_vector_sub(float c[3], float a[3], float b[3]);
747extern LIB3DSAPI void lib3ds_vector_scalar_mul(float c[3], float a[3], float k);
748extern LIB3DSAPI void lib3ds_vector_cross(float c[3], float a[3], float b[3]);
749extern LIB3DSAPI float lib3ds_vector_dot(float a[3], float b[3]);
750extern LIB3DSAPI float lib3ds_vector_length(float c[3]);
751extern LIB3DSAPI void lib3ds_vector_normalize(float c[3]);
752extern LIB3DSAPI void lib3ds_vector_normal(float n[3], float a[3], float b[3], float c[3]);
753extern LIB3DSAPI void lib3ds_vector_min(float c[3], float a[3]);
754extern LIB3DSAPI void lib3ds_vector_max(float c[3], float a[3]);
755extern LIB3DSAPI void lib3ds_vector_transform(float c[3], float m[4][4], float a[3]);
756
757extern LIB3DSAPI void lib3ds_quat_identity(float c[4]);
758extern LIB3DSAPI void lib3ds_quat_copy(float dest[4], float src[4]);
759extern LIB3DSAPI void lib3ds_quat_axis_angle(float c[4], float axis[3], float angle);
760extern LIB3DSAPI void lib3ds_quat_neg(float c[4]);
761extern LIB3DSAPI void lib3ds_quat_cnj(float c[4]);
762extern LIB3DSAPI void lib3ds_quat_mul(float c[4], float a[4], float b[4]);
763extern LIB3DSAPI void lib3ds_quat_scalar(float c[4], float k);
764extern LIB3DSAPI void lib3ds_quat_normalize(float c[4]);
765extern LIB3DSAPI void lib3ds_quat_inv(float c[4]);
766extern LIB3DSAPI float lib3ds_quat_dot(float a[4], float b[4]);
767extern LIB3DSAPI float lib3ds_quat_norm(float c[4]);
768extern LIB3DSAPI void lib3ds_quat_ln(float c[4]);
769extern LIB3DSAPI void lib3ds_quat_ln_dif(float c[4], float a[4], float b[4]);
770extern LIB3DSAPI void lib3ds_quat_exp(float c[4]);
771extern LIB3DSAPI void lib3ds_quat_slerp(float c[4], float a[4], float b[4], float t);
772extern LIB3DSAPI void lib3ds_quat_squad(float c[4], float a[4], float p[4], float q[4], float b[4], float t);
773extern LIB3DSAPI void lib3ds_quat_tangent(float c[4], float p[4], float q[4], float n[4]);
774
775extern LIB3DSAPI void lib3ds_matrix_zero(float m[4][4]);
776extern LIB3DSAPI void lib3ds_matrix_identity(float  m[4][4]);
777extern LIB3DSAPI void lib3ds_matrix_copy(float dest[4][4], float src[4][4]);
778extern LIB3DSAPI void lib3ds_matrix_neg(float m[4][4]);
779extern LIB3DSAPI void lib3ds_matrix_transpose(float m[4][4]);
780extern LIB3DSAPI void lib3ds_matrix_add(float m[4][4], float a[4][4], float b[4][4]);
781extern LIB3DSAPI void lib3ds_matrix_sub(float m[4][4], float a[4][4], float b[4][4]);
782extern LIB3DSAPI void lib3ds_matrix_mult(float m[4][4], float a[4][4], float b[4][4]);
783extern LIB3DSAPI void lib3ds_matrix_scalar(float m[4][4], float k);
784extern LIB3DSAPI float lib3ds_matrix_det(float m[4][4]);
785extern LIB3DSAPI int lib3ds_matrix_inv(float m[4][4]);
786extern LIB3DSAPI void lib3ds_matrix_translate(float m[4][4], float x, float y, float z);
787extern LIB3DSAPI void lib3ds_matrix_scale(float m[4][4], float x, float y, float z);
788extern LIB3DSAPI void lib3ds_matrix_rotate_quat(float m[4][4], float q[4]);
789extern LIB3DSAPI void lib3ds_matrix_rotate(float m[4][4], float angle, float ax, float ay, float az);
790extern LIB3DSAPI void lib3ds_matrix_camera(float m[4][4], float pos[3], float tgt[3], float roll);
791
792/* --- Code for OpenSceneGraph --- */
793extern LIB3DSAPI void setByteOrder();
794
795/* Definitions for compatibility with previous lib3DS used: */
796typedef float Lib3dsMatrix[4][4];
797typedef float Lib3dsVector[3];
798typedef void Lib3dsUserData;
799/* --- (end) Code for OpenSceneGraph --- */
800
801
802/** @} */
803#ifdef __cplusplus
804}
805#endif
806
807#endif
808
Note: See TracBrowser for help on using the browser.