static void kfdata_write(Lib3dsFile *file, Lib3dsIo *io) { Lib3dsChunk c; if (!file->nodes) { return; } c.chunk = CHK_KFDATA; lib3ds_chunk_write_start(&c, io); { /*---- LIB3DS_KFHDR ----*/ Lib3dsChunk c; c.chunk = CHK_KFHDR; c.size = 6 + 2 + (uint32_t)strlen(file->name) + 1 + 4; lib3ds_chunk_write(&c, io); lib3ds_io_write_intw(io, (int16_t)file->keyf_revision); lib3ds_io_write_string(io, file->name); lib3ds_io_write_intd(io, file->frames); } { /*---- LIB3DS_KFSEG ----*/ Lib3dsChunk c; c.chunk = CHK_KFSEG; c.size = 14; lib3ds_chunk_write(&c, io); lib3ds_io_write_intd(io, file->segment_from); lib3ds_io_write_intd(io, file->segment_to); } { /*---- LIB3DS_KFCURTIME ----*/ Lib3dsChunk c; c.chunk = CHK_KFCURTIME; c.size = 10; lib3ds_chunk_write(&c, io); lib3ds_io_write_intd(io, file->current_frame); } lib3ds_viewport_write(&file->viewport_keyf, io); { uint16_t default_id = 0; nodes_write(file->nodes, &default_id, 65535, io); } lib3ds_chunk_write_end(&c, io); }
void lib3ds_material_write(Lib3dsMaterial *material, Lib3dsIo *io) { Lib3dsChunk c; c.chunk = CHK_MAT_ENTRY; lib3ds_chunk_write_start(&c, io); { /*---- CHK_MAT_NAME ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_NAME; c.size = 6 + (uint32_t)strlen(material->name) + 1; lib3ds_chunk_write(&c, io); lib3ds_io_write_string(io, material->name); } { /*---- CHK_MAT_AMBIENT ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_AMBIENT; c.size = 24; lib3ds_chunk_write(&c, io); color_write(material->ambient, io); } { /*---- CHK_MAT_DIFFUSE ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_DIFFUSE; c.size = 24; lib3ds_chunk_write(&c, io); color_write(material->diffuse, io); } { /*---- CHK_MAT_SPECULAR ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_SPECULAR; c.size = 24; lib3ds_chunk_write(&c, io); color_write(material->specular, io); } { /*---- CHK_MAT_SHININESS ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_SHININESS; c.size = 14; lib3ds_chunk_write(&c, io); int_percentage_write(material->shininess, io); } { /*---- CHK_MAT_SHIN2PCT ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_SHIN2PCT; c.size = 14; lib3ds_chunk_write(&c, io); int_percentage_write(material->shin_strength, io); } { /*---- CHK_MAT_TRANSPARENCY ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_TRANSPARENCY; c.size = 14; lib3ds_chunk_write(&c, io); int_percentage_write(material->transparency, io); } { /*---- CHK_MAT_XPFALL ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_XPFALL; c.size = 14; lib3ds_chunk_write(&c, io); int_percentage_write(material->falloff, io); } if (material->use_falloff) { /*---- CHK_MAT_USE_XPFALL ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_USE_XPFALL; c.size = 6; lib3ds_chunk_write(&c, io); } { /*---- CHK_MAT_SHADING ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_SHADING; c.size = 8; lib3ds_chunk_write(&c, io); lib3ds_io_write_intw(io, material->shading); } { /*---- CHK_MAT_REFBLUR ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_REFBLUR; c.size = 14; lib3ds_chunk_write(&c, io); int_percentage_write(material->blur, io); } if (material->use_blur) { /*---- CHK_MAT_USE_REFBLUR ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_USE_REFBLUR; c.size = 6; lib3ds_chunk_write(&c, io); } if (material->self_illum_flag) { /*---- CHK_MAT_SELF_ILLUM ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_SELF_ILLUM; c.size = 6; lib3ds_chunk_write(&c, io); } if (material->two_sided) { /*---- CHK_MAT_TWO_SIDE ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_TWO_SIDE; c.size = 6; lib3ds_chunk_write(&c, io); } if (material->map_decal) { /*---- CHK_MAT_DECAL ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_DECAL; c.size = 6; lib3ds_chunk_write(&c, io); } if (material->is_additive) { /*---- CHK_MAT_ADDITIVE ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_ADDITIVE; c.size = 6; lib3ds_chunk_write(&c, io); } if (material->use_wire) { /*---- CHK_MAT_WIRE ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_WIRE; c.size = 6; lib3ds_chunk_write(&c, io); } if (material->use_wire_abs) { /*---- CHK_MAT_WIREABS ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_WIREABS; c.size = 6; lib3ds_chunk_write(&c, io); } { /*---- CHK_MAT_WIRE_SIZE ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_WIRE_SIZE; c.size = 10; lib3ds_chunk_write(&c, io); lib3ds_io_write_float(io, material->wire_size); } if (material->face_map) { /*---- CHK_MAT_FACEMAP ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_FACEMAP; c.size = 6; lib3ds_chunk_write(&c, io); } if (material->soften) { /*---- CHK_MAT_PHONGSOFT ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_PHONGSOFT; c.size = 6; lib3ds_chunk_write(&c, io); } texture_map_write(CHK_MAT_TEXMAP, &material->texture1_map, io); texture_map_write(CHK_MAT_TEXMASK, &material->texture1_mask, io); texture_map_write(CHK_MAT_TEX2MAP, &material->texture2_map, io); texture_map_write(CHK_MAT_TEX2MASK, &material->texture2_mask, io); texture_map_write(CHK_MAT_OPACMAP, &material->opacity_map, io); texture_map_write(CHK_MAT_OPACMASK, &material->opacity_mask, io); texture_map_write(CHK_MAT_BUMPMAP, &material->bump_map, io); texture_map_write(CHK_MAT_BUMPMASK, &material->bump_mask, io); texture_map_write(CHK_MAT_SPECMAP, &material->specular_map, io); texture_map_write(CHK_MAT_SPECMASK, &material->specular_mask, io); texture_map_write(CHK_MAT_SHINMAP, &material->shininess_map, io); texture_map_write(CHK_MAT_SHINMASK, &material->shininess_mask, io); texture_map_write(CHK_MAT_SELFIMAP, &material->self_illum_map, io); texture_map_write(CHK_MAT_SELFIMASK, &material->self_illum_mask, io); texture_map_write(CHK_MAT_REFLMAP, &material->reflection_map, io); texture_map_write(CHK_MAT_REFLMASK, &material->reflection_mask, io); { /*---- CHK_MAT_ACUBIC ----*/ Lib3dsChunk c; c.chunk = CHK_MAT_ACUBIC; c.size = 18; lib3ds_chunk_write(&c, io); lib3ds_io_write_intb(io, 0); lib3ds_io_write_intb(io, material->autorefl_map_anti_alias); lib3ds_io_write_intw(io, material->autorefl_map_flags); lib3ds_io_write_intd(io, material->autorefl_map_size); lib3ds_io_write_intd(io, material->autorefl_map_frame_step); } lib3ds_chunk_write_end(&c, io); }
static Lib3dsBool mdata_write(Lib3dsFile *file, Lib3dsIo *io) { Lib3dsChunk c; c.chunk=LIB3DS_MDATA; if (!lib3ds_chunk_write_start(&c,io)) { return(LIB3DS_FALSE); } { /*---- LIB3DS_MESH_VERSION ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MESH_VERSION; c.size=10; lib3ds_chunk_write(&c,io); lib3ds_io_write_intd(io, file->mesh_version); } { /*---- LIB3DS_MASTER_SCALE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MASTER_SCALE; c.size=10; lib3ds_chunk_write(&c,io); lib3ds_io_write_float(io, file->master_scale); } { /*---- LIB3DS_O_CONSTS ----*/ int i; for (i=0; i<3; ++i) { if (fabs(file->construction_plane[i])>LIB3DS_EPSILON) { break; } } if (i<3) { Lib3dsChunk c; c.chunk=LIB3DS_O_CONSTS; c.size=18; lib3ds_chunk_write(&c,io); lib3ds_io_write_vector(io, file->construction_plane); } } { /*---- LIB3DS_AMBIENT_LIGHT ----*/ int i; for (i=0; i<3; ++i) { if (fabs(file->ambient[i])>LIB3DS_EPSILON) { break; } } if (i<3) { Lib3dsChunk c; c.chunk=LIB3DS_AMBIENT_LIGHT; c.size=42; lib3ds_chunk_write(&c,io); colorf_write(file->ambient,io); } } lib3ds_background_write(&file->background, io); lib3ds_atmosphere_write(&file->atmosphere, io); lib3ds_shadow_write(&file->shadow, io); lib3ds_viewport_write(&file->viewport, io); { Lib3dsMaterial *p; for (p=file->materials; p!=0; p=p->next) { if (!lib3ds_material_write(p,io)) { return(LIB3DS_FALSE); } } } { Lib3dsCamera *p; Lib3dsChunk c; for (p=file->cameras; p!=0; p=p->next) { c.chunk=LIB3DS_NAMED_OBJECT; if (!lib3ds_chunk_write_start(&c,io)) { return(LIB3DS_FALSE); } lib3ds_io_write_string(io, p->name); lib3ds_camera_write(p,io); object_flags_write(p->object_flags,io); if (!lib3ds_chunk_write_end(&c,io)) { return(LIB3DS_FALSE); } } } { Lib3dsLight *p; Lib3dsChunk c; for (p=file->lights; p!=0; p=p->next) { c.chunk=LIB3DS_NAMED_OBJECT; if (!lib3ds_chunk_write_start(&c,io)) { return(LIB3DS_FALSE); } lib3ds_io_write_string(io,p->name); lib3ds_light_write(p,io); object_flags_write(p->object_flags,io); if (!lib3ds_chunk_write_end(&c,io)) { return(LIB3DS_FALSE); } } } { Lib3dsMesh *p; Lib3dsChunk c; for (p=file->meshes; p!=0; p=p->next) { c.chunk=LIB3DS_NAMED_OBJECT; if (!lib3ds_chunk_write_start(&c,io)) { return(LIB3DS_FALSE); } lib3ds_io_write_string(io, p->name); lib3ds_mesh_write(p,io); object_flags_write(p->object_flags,io); if (!lib3ds_chunk_write_end(&c,io)) { return(LIB3DS_FALSE); } } } if (!lib3ds_chunk_write_end(&c,io)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); }
static void mdata_write(Lib3dsFile *file, Lib3dsIo *io) { Lib3dsChunk c; c.chunk = CHK_MDATA; lib3ds_chunk_write_start(&c, io); { /*---- LIB3DS_MESH_VERSION ----*/ Lib3dsChunk c; c.chunk = CHK_MESH_VERSION; c.size = 10; lib3ds_chunk_write(&c, io); lib3ds_io_write_intd(io, file->mesh_version); } { /*---- LIB3DS_MASTER_SCALE ----*/ Lib3dsChunk c; c.chunk = CHK_MASTER_SCALE; c.size = 10; lib3ds_chunk_write(&c, io); lib3ds_io_write_float(io, file->master_scale); } { /*---- LIB3DS_O_CONSTS ----*/ int i; for (i = 0; i < 3; ++i) { if (fabs(file->construction_plane[i]) > LIB3DS_EPSILON) { break; } } if (i < 3) { Lib3dsChunk c; c.chunk = CHK_O_CONSTS; c.size = 18; lib3ds_chunk_write(&c, io); lib3ds_io_write_vector(io, file->construction_plane); } } { /*---- LIB3DS_AMBIENT_LIGHT ----*/ int i; for (i = 0; i < 3; ++i) { if (fabs(file->ambient[i]) > LIB3DS_EPSILON) { break; } } if (i < 3) { Lib3dsChunk c; c.chunk = CHK_AMBIENT_LIGHT; c.size = 42; lib3ds_chunk_write(&c, io); colorf_write(file->ambient, io); } } lib3ds_background_write(&file->background, io); lib3ds_atmosphere_write(&file->atmosphere, io); lib3ds_shadow_write(&file->shadow, io); lib3ds_viewport_write(&file->viewport, io); { int i; for (i = 0; i < file->nmaterials; ++i) { lib3ds_material_write(file->materials[i], io); } } { Lib3dsChunk c; int i; for (i = 0; i < file->ncameras; ++i) { c.chunk = CHK_NAMED_OBJECT; lib3ds_chunk_write_start(&c, io); lib3ds_io_write_string(io, file->cameras[i]->name); lib3ds_camera_write(file->cameras[i], io); object_flags_write(file->cameras[i]->object_flags, io); lib3ds_chunk_write_end(&c, io); } } { Lib3dsChunk c; int i; for (i = 0; i < file->nlights; ++i) { c.chunk = CHK_NAMED_OBJECT; lib3ds_chunk_write_start(&c, io); lib3ds_io_write_string(io, file->lights[i]->name); lib3ds_light_write(file->lights[i], io); object_flags_write(file->lights[i]->object_flags, io); lib3ds_chunk_write_end(&c, io); } } { Lib3dsChunk c; int i; for (i = 0; i < file->nmeshes; ++i) { c.chunk = CHK_NAMED_OBJECT; lib3ds_chunk_write_start(&c, io); lib3ds_io_write_string(io, file->meshes[i]->name); lib3ds_mesh_write(file, file->meshes[i], io); object_flags_write(file->meshes[i]->object_flags, io); lib3ds_chunk_write_end(&c, io); } } lib3ds_chunk_write_end(&c, io); }