00001
00002 #ifndef INCLUDED_LIB3DS_H
00003 #define INCLUDED_LIB3DS_H
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
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
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;
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
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
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
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
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
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
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
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
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
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];
00232 float ambient[3];
00233 float diffuse[3];
00234 float specular[3];
00235 float shininess;
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;
00243 float self_illum;
00244 int use_falloff;
00245 int shading;
00246 int soften;
00247 int face_map;
00248 int two_sided;
00249 int map_decal;
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;
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;
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;
00308 int see_cone;
00309 float color[3];
00310 float position[3];
00311 float target[3];
00312 float roll;
00313 int off;
00314 float outer_range;
00315 float inner_range;
00316 float multiplier;
00317
00318 float attenuation;
00319 int rectangular_spot;
00320 int shadowed;
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;
00328 int ray_shadows;
00329 float ray_bias;
00330 float hotspot;
00331 float falloff;
00332 } Lib3dsLight;
00333
00334
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
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