/*! * \ingroup tcb */ Lib3dsBool lib3ds_tcb_write(Lib3dsTcb *tcb, FILE *f) { lib3ds_intd_write(tcb->frame,f); lib3ds_word_write(tcb->flags,f); if (tcb->flags&LIB3DS_USE_TENSION) { lib3ds_float_write(tcb->tens,f); } if (tcb->flags&LIB3DS_USE_CONTINUITY) { lib3ds_float_write(tcb->cont,f); } if (tcb->flags&LIB3DS_USE_BIAS) { lib3ds_float_write(tcb->bias,f); } if (tcb->flags&LIB3DS_USE_EASE_TO) { lib3ds_float_write(tcb->ease_to,f); } if (tcb->flags&LIB3DS_USE_EASE_FROM) { lib3ds_float_write(tcb->ease_from,f); } if (ferror(f)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); }
/*! * \ingroup shadow */ Lib3dsBool lib3ds_shadow_write(Lib3dsShadow *shadow, FILE *f) { if (fabs(shadow->lo_bias)>LIB3DS_EPSILON) { /*---- LIB3DS_LO_SHADOW_BIAS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_LO_SHADOW_BIAS; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(shadow->lo_bias,f); } if (fabs(shadow->hi_bias)>LIB3DS_EPSILON) { /*---- LIB3DS_HI_SHADOW_BIAS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_HI_SHADOW_BIAS; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(shadow->hi_bias,f); } if (shadow->map_size) { /*---- LIB3DS_SHADOW_MAP_SIZE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_MAP_SIZE; c.size=8; lib3ds_chunk_write(&c,f); lib3ds_intw_write(shadow->map_size,f); } if (shadow->samples) { /*---- LIB3DS_SHADOW_SAMPLES ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_SAMPLES; c.size=8; lib3ds_chunk_write(&c,f); lib3ds_intw_write(shadow->samples,f); } if (shadow->range) { /*---- LIB3DS_SHADOW_RANGE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_RANGE; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_intd_write(shadow->range,f); } if (fabs(shadow->filter)>LIB3DS_EPSILON) { /*---- LIB3DS_SHADOW_FILTER ----*/ Lib3dsChunk c; c.chunk=LIB3DS_SHADOW_FILTER; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(shadow->filter,f); } if (fabs(shadow->ray_bias)>LIB3DS_EPSILON) { /*---- LIB3DS_RAY_BIAS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_RAY_BIAS; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(shadow->ray_bias,f); } return(LIB3DS_TRUE); }
static Lib3dsBool mdata_write(Lib3dsFile *file, FILE *f) { Lib3dsChunk c; c.chunk=LIB3DS_MDATA; if (!lib3ds_chunk_write_start(&c,f)) { return(LIB3DS_FALSE); } { /*---- LIB3DS_MESH_VERSION ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MESH_VERSION; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_intd_write(file->mesh_version,f); } { /*---- LIB3DS_MASTER_SCALE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MASTER_SCALE; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(file->master_scale,f); } { /*---- 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,f); lib3ds_vector_write(file->construction_plane,f); } } { /*---- 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,f); colorf_write(file->ambient,f); } } lib3ds_background_write(&file->background, f); lib3ds_atmosphere_write(&file->atmosphere, f); lib3ds_shadow_write(&file->shadow, f); lib3ds_viewport_write(&file->viewport, f); { Lib3dsMaterial *p; for (p=file->materials; p!=0; p=p->next) { if (!lib3ds_material_write(p,f)) { 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,f)) { return(LIB3DS_FALSE); } lib3ds_string_write(p->name,f); lib3ds_camera_write(p,f); if (!lib3ds_chunk_write_end(&c,f)) { 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,f)) { return(LIB3DS_FALSE); } lib3ds_string_write(p->name,f); lib3ds_light_write(p,f); if (!lib3ds_chunk_write_end(&c,f)) { 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,f)) { return(LIB3DS_FALSE); } lib3ds_string_write(p->name,f); lib3ds_mesh_write(p,f); if (!lib3ds_chunk_write_end(&c,f)) { return(LIB3DS_FALSE); } } } if (!lib3ds_chunk_write_end(&c,f)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); }
/*! * \ingroup material */ Lib3dsBool lib3ds_material_write(Lib3dsMaterial *material, FILE *f) { Lib3dsChunk c; c.chunk=LIB3DS_MAT_ENTRY; if (!lib3ds_chunk_write_start(&c,f)) { return(LIB3DS_FALSE); } { /*---- LIB3DS_MAT_NAME ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_NAME; c.size=6+strlen(material->name)+1; lib3ds_chunk_write(&c,f); lib3ds_string_write(material->name,f); } { /*---- LIB3DS_MAT_AMBIENT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_AMBIENT; c.size=24; lib3ds_chunk_write(&c,f); color_write(material->ambient,f); } { /*---- LIB3DS_MAT_DIFFUSE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_DIFFUSE; c.size=24; lib3ds_chunk_write(&c,f); color_write(material->diffuse,f); } { /*---- LIB3DS_MAT_SPECULAR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SPECULAR; c.size=24; lib3ds_chunk_write(&c,f); color_write(material->specular,f); } { /*---- LIB3DS_MAT_SHININESS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SHININESS; c.size=14; lib3ds_chunk_write(&c,f); int_percentage_write(material->shininess,f); } { /*---- LIB3DS_MAT_SHIN2PCT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SHIN2PCT; c.size=14; lib3ds_chunk_write(&c,f); int_percentage_write(material->shin_strength,f); } { /*---- LIB3DS_MAT_TRANSPARENCY ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_TRANSPARENCY; c.size=14; lib3ds_chunk_write(&c,f); int_percentage_write(material->transparency,f); } { /*---- LIB3DS_MAT_XPFALL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_XPFALL; c.size=14; lib3ds_chunk_write(&c,f); int_percentage_write(material->falloff,f); } if (material->use_falloff) { /*---- LIB3DS_MAT_USE_XPFALL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_USE_XPFALL; c.size=6; lib3ds_chunk_write(&c,f); } { /*---- LIB3DS_MAT_SHADING ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SHADING; c.size=8; lib3ds_chunk_write(&c,f); lib3ds_intw_write(material->shading,f); } { /*---- LIB3DS_MAT_REFBLUR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_REFBLUR; c.size=14; lib3ds_chunk_write(&c,f); int_percentage_write(material->blur,f); } if (material->use_blur) { /*---- LIB3DS_MAT_USE_REFBLUR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_USE_REFBLUR; c.size=6; lib3ds_chunk_write(&c,f); } if (material->self_illum) { /*---- LIB3DS_MAT_SELF_ILLUM ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_SELF_ILLUM; c.size=6; lib3ds_chunk_write(&c,f); } if (material->two_sided) { /*---- LIB3DS_MAT_TWO_SIDE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_TWO_SIDE; c.size=6; lib3ds_chunk_write(&c,f); } if (material->map_decal) { /*---- LIB3DS_MAT_DECAL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_DECAL; c.size=6; lib3ds_chunk_write(&c,f); } if (material->additive) { /*---- LIB3DS_MAT_ADDITIVE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_ADDITIVE; c.size=6; lib3ds_chunk_write(&c,f); } if (material->use_wire) { /*---- LIB3DS_MAT_WIRE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_WIRE; c.size=6; lib3ds_chunk_write(&c,f); } if (material->use_wire_abs) { /*---- LIB3DS_MAT_WIREABS ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_WIREABS; c.size=6; lib3ds_chunk_write(&c,f); } { /*---- LIB3DS_MAT_WIRE_SIZE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_WIRE_SIZE; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(material->wire_size,f); } if (material->face_map) { /*---- LIB3DS_MAT_FACEMAP ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_FACEMAP; c.size=6; lib3ds_chunk_write(&c,f); } if (material->soften) { /*---- LIB3DS_MAT_PHONGSOFT ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_PHONGSOFT; c.size=6; lib3ds_chunk_write(&c,f); } if (!texture_map_write(LIB3DS_MAT_TEXMAP, &material->texture1_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_TEXMASK, &material->texture1_mask, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_TEX2MAP, &material->texture2_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_TEX2MASK, &material->texture2_mask, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_OPACMAP, &material->opacity_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_OPACMASK, &material->opacity_mask, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_BUMPMAP, &material->bump_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_BUMPMASK, &material->bump_mask, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_SPECMAP, &material->specular_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_SPECMASK, &material->specular_mask, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_SHINMAP, &material->shininess_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_SHINMASK, &material->shininess_mask, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_SELFIMAP, &material->self_illum_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_SELFIMASK, &material->self_illum_mask, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_REFLMAP, &material->reflection_map, f)) { return(LIB3DS_FALSE); } if (!texture_map_write(LIB3DS_MAT_REFLMASK, &material->reflection_mask, f)) { return(LIB3DS_FALSE); } if (!lib3ds_chunk_write_end(&c,f)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); }
static Lib3dsBool texture_map_write(Lib3dsWord chunk, Lib3dsTextureMap *map, FILE *f) { Lib3dsChunk c; if (strlen(map->name)==0) { return(LIB3DS_TRUE); } c.chunk=chunk; if (!lib3ds_chunk_write_start(&c,f)) { return(LIB3DS_FALSE); } int_percentage_write(map->percent,f); { /*---- LIB3DS_MAT_MAPNAME ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAPNAME; c.size=6+strlen(map->name)+1; lib3ds_chunk_write(&c,f); lib3ds_string_write(map->name,f); } { /*---- LIB3DS_MAT_MAP_TILING ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_TILING; c.size=8; lib3ds_chunk_write(&c,f); lib3ds_word_write((Lib3dsWord)map->flags,f); } { /*---- LIB3DS_MAT_MAP_TEXBLUR ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_TEXBLUR; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(map->blur,f); } { /*---- LIB3DS_MAT_MAP_USCALE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_USCALE; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(map->scale[0],f); } { /*---- LIB3DS_MAT_MAP_VSCALE ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_VSCALE; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(map->scale[1],f); } { /*---- LIB3DS_MAT_MAP_UOFFSET ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_UOFFSET; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(map->offset[0],f); } { /*---- LIB3DS_MAT_MAP_VOFFSET ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_VOFFSET; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(map->offset[1],f); } { /*---- LIB3DS_MAT_MAP_ANG ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_ANG; c.size=10; lib3ds_chunk_write(&c,f); lib3ds_float_write(map->rotation,f); } { /*---- LIB3DS_MAT_MAP_COL1 ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_COL1; c.size=9; lib3ds_chunk_write(&c,f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[0]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[1]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_1[2]+0.5), f); } { /*---- LIB3DS_MAT_MAP_COL2 ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_COL2; c.size=9; lib3ds_chunk_write(&c,f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[0]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[1]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_2[2]+0.5), f); } { /*---- LIB3DS_MAT_MAP_RCOL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_RCOL; c.size=9; lib3ds_chunk_write(&c,f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[0]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[1]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_r[2]+0.5), f); } { /*---- LIB3DS_MAT_MAP_GCOL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_GCOL; c.size=9; lib3ds_chunk_write(&c,f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[0]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[1]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_g[2]+0.5), f); } { /*---- LIB3DS_MAT_MAP_BCOL ----*/ Lib3dsChunk c; c.chunk=LIB3DS_MAT_MAP_BCOL; c.size=9; lib3ds_chunk_write(&c,f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[0]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[1]+0.5), f); lib3ds_byte_write((Lib3dsByte)floor(255.0*map->tint_b[2]+0.5), f); } if (!lib3ds_chunk_write_end(&c,f)) { return(LIB3DS_FALSE); } return(LIB3DS_TRUE); }