/*! * \ingroup shadow */ Lib3dsBool lib3ds_shadow_read(Lib3dsShadow *shadow, Lib3dsIo *io) { Lib3dsChunk c; if (!lib3ds_chunk_read(&c, io)) { return(LIB3DS_FALSE); } switch (c.chunk) { case LIB3DS_SHADOW_MAP_SIZE: { shadow->map_size=lib3ds_io_read_intw(io); } break; case LIB3DS_LO_SHADOW_BIAS: { shadow->lo_bias=lib3ds_io_read_float(io); } break; case LIB3DS_HI_SHADOW_BIAS: { shadow->hi_bias=lib3ds_io_read_float(io); } break; case LIB3DS_SHADOW_SAMPLES: { shadow->samples=lib3ds_io_read_intw(io); } break; case LIB3DS_SHADOW_RANGE: { shadow->range=lib3ds_io_read_intd(io); } break; case LIB3DS_SHADOW_FILTER: { shadow->filter=lib3ds_io_read_float(io); } break; case LIB3DS_RAY_BIAS: { shadow->ray_bias=lib3ds_io_read_float(io); } break; } return(LIB3DS_TRUE); }
void lib3ds_shadow_read(Lib3dsShadow *shadow, Lib3dsIo *io) { Lib3dsChunk c; lib3ds_chunk_read(&c, io); switch (c.chunk) { case CHK_SHADOW_MAP_SIZE: { shadow->map_size = lib3ds_io_read_intw(io); break; } case CHK_LO_SHADOW_BIAS: { shadow->low_bias = lib3ds_io_read_float(io); break; } case CHK_HI_SHADOW_BIAS: { shadow->hi_bias = lib3ds_io_read_float(io); break; } case CHK_SHADOW_FILTER: { shadow->filter = lib3ds_io_read_float(io); break; } case CHK_RAY_BIAS: { shadow->ray_bias = lib3ds_io_read_float(io); break; } } }
static Lib3dsBool int_percentage_read(Lib3dsFloat *p, Lib3dsIo *io) { Lib3dsChunk c; Lib3dsWord chunk; if (!lib3ds_chunk_read_start(&c, 0, io)) { return(LIB3DS_FALSE); } while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) { switch (chunk) { case LIB3DS_INT_PERCENTAGE: { Lib3dsIntw i=lib3ds_io_read_intw(io); *p=(Lib3dsFloat)(1.0*i/100.0); } break; default: lib3ds_chunk_unknown(chunk); } } lib3ds_chunk_read_end(&c, io); return(LIB3DS_TRUE); }
static void int_percentage_read(float *p, Lib3dsIo *io) { Lib3dsChunk c; uint16_t chunk; lib3ds_chunk_read_start(&c, 0, io); while ((chunk = lib3ds_chunk_read_next(&c, io)) != 0) { switch (chunk) { case CHK_INT_PERCENTAGE: { int16_t i = lib3ds_io_read_intw(io); *p = (float)(1.0 * i / 100.0); break; } default: lib3ds_chunk_unknown(chunk, io); } } lib3ds_chunk_read_end(&c, io); }
void lib3ds_material_read(Lib3dsMaterial *material, Lib3dsIo *io) { Lib3dsChunk c; uint16_t chunk; assert(material); lib3ds_chunk_read_start(&c, CHK_MAT_ENTRY, io); while ((chunk = lib3ds_chunk_read_next(&c, io)) != 0) { switch (chunk) { case CHK_MAT_NAME: { lib3ds_io_read_string(io, material->name, 64); lib3ds_io_log(io, LIB3DS_LOG_INFO, " NAME=%s", material->name); break; } case CHK_MAT_AMBIENT: { lib3ds_chunk_read_reset(&c, io); color_read(material->ambient, io); break; } case CHK_MAT_DIFFUSE: { lib3ds_chunk_read_reset(&c, io); color_read(material->diffuse, io); break; } case CHK_MAT_SPECULAR: { lib3ds_chunk_read_reset(&c, io); color_read(material->specular, io); break; } case CHK_MAT_SHININESS: { lib3ds_chunk_read_reset(&c, io); int_percentage_read(&material->shininess, io); break; } case CHK_MAT_SHIN2PCT: { lib3ds_chunk_read_reset(&c, io); int_percentage_read(&material->shin_strength, io); break; } case CHK_MAT_TRANSPARENCY: { lib3ds_chunk_read_reset(&c, io); int_percentage_read(&material->transparency, io); break; } case CHK_MAT_XPFALL: { lib3ds_chunk_read_reset(&c, io); int_percentage_read(&material->falloff, io); break; } case CHK_MAT_SELF_ILPCT: { lib3ds_chunk_read_reset(&c, io); int_percentage_read(&material->self_illum, io); break; } case CHK_MAT_USE_XPFALL: { material->use_falloff = TRUE; break; } case CHK_MAT_REFBLUR: { lib3ds_chunk_read_reset(&c, io); int_percentage_read(&material->blur, io); break; } case CHK_MAT_USE_REFBLUR: { material->use_blur = TRUE; break; } case CHK_MAT_SHADING: { material->shading = lib3ds_io_read_intw(io); break; } case CHK_MAT_SELF_ILLUM: { material->self_illum_flag = TRUE; break; } case CHK_MAT_TWO_SIDE: { material->two_sided = TRUE; break; } case CHK_MAT_DECAL: { material->map_decal = TRUE; break; } case CHK_MAT_ADDITIVE: { material->is_additive = TRUE; break; } case CHK_MAT_FACEMAP: { material->face_map = TRUE; break; } case CHK_MAT_PHONGSOFT: { material->soften = TRUE; break; } case CHK_MAT_WIRE: { material->use_wire = TRUE; break; } case CHK_MAT_WIREABS: { material->use_wire_abs = TRUE; break; } case CHK_MAT_WIRE_SIZE: { material->wire_size = lib3ds_io_read_float(io); break; } case CHK_MAT_TEXMAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->texture1_map, io); break; } case CHK_MAT_TEXMASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->texture1_mask, io); break; } case CHK_MAT_TEX2MAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->texture2_map, io); break; } case CHK_MAT_TEX2MASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->texture2_mask, io); break; } case CHK_MAT_OPACMAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->opacity_map, io); break; } case CHK_MAT_OPACMASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->opacity_mask, io); break; } case CHK_MAT_BUMPMAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->bump_map, io); break; } case CHK_MAT_BUMPMASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->bump_mask, io); break; } case CHK_MAT_SPECMAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->specular_map, io); break; } case CHK_MAT_SPECMASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->specular_mask, io); break; } case CHK_MAT_SHINMAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->shininess_map, io); break; } case CHK_MAT_SHINMASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->shininess_mask, io); break; } case CHK_MAT_SELFIMAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->self_illum_map, io); break; } case CHK_MAT_SELFIMASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->self_illum_mask, io); break; } case CHK_MAT_REFLMAP: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->reflection_map, io); break; } case CHK_MAT_REFLMASK: { lib3ds_chunk_read_reset(&c, io); texture_map_read(&material->reflection_mask, io); break; } case CHK_MAT_ACUBIC: { lib3ds_io_read_intb(io); material->autorefl_map_anti_alias = lib3ds_io_read_intb(io); material->autorefl_map_flags = lib3ds_io_read_intw(io); material->autorefl_map_size = lib3ds_io_read_intd(io); material->autorefl_map_frame_step = lib3ds_io_read_intd(io); break; } default: lib3ds_chunk_unknown(chunk, io); } } lib3ds_chunk_read_end(&c, io); }
static void texture_map_read(Lib3dsTextureMap *map, Lib3dsIo *io) { Lib3dsChunk c; uint16_t chunk; lib3ds_chunk_read_start(&c, 0, io); while ((chunk = lib3ds_chunk_read_next(&c, io)) != 0) { switch (chunk) { case CHK_INT_PERCENTAGE: { map->percent = 1.0f * lib3ds_io_read_intw(io) / 100.0f; break; } case CHK_MAT_MAPNAME: { lib3ds_io_read_string(io, map->name, 64); lib3ds_io_log(io, LIB3DS_LOG_INFO, " NAME=%s", map->name); break; } case CHK_MAT_MAP_TILING: { map->flags = lib3ds_io_read_word(io); break; } case CHK_MAT_MAP_TEXBLUR: map->blur = lib3ds_io_read_float(io); break; case CHK_MAT_MAP_USCALE: map->scale[0] = lib3ds_io_read_float(io); break; case CHK_MAT_MAP_VSCALE: { map->scale[1] = lib3ds_io_read_float(io); break; } case CHK_MAT_MAP_UOFFSET: { map->offset[0] = lib3ds_io_read_float(io); break; } case CHK_MAT_MAP_VOFFSET: { map->offset[1] = lib3ds_io_read_float(io); break; } case CHK_MAT_MAP_ANG: { map->rotation = lib3ds_io_read_float(io); break; } case CHK_MAT_MAP_COL1: { map->tint_1[0] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_1[1] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_1[2] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; break; } case CHK_MAT_MAP_COL2: { map->tint_2[0] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_2[1] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_2[2] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; break; } case CHK_MAT_MAP_RCOL: { map->tint_r[0] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_r[1] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_r[2] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; break; } case CHK_MAT_MAP_GCOL: { map->tint_g[0] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_g[1] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_g[2] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; break; } case CHK_MAT_MAP_BCOL: { map->tint_b[0] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_b[1] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; map->tint_b[2] = 1.0f * lib3ds_io_read_byte(io) / 255.0f; break; } default: lib3ds_chunk_unknown(chunk,io); } } lib3ds_chunk_read_end(&c, io); }
/*! * \ingroup light */ static Lib3dsBool spotlight_read(Lib3dsLight *light, Lib3dsIo *io) { Lib3dsChunk c; Lib3dsWord chunk; int i; if (!lib3ds_chunk_read_start(&c, LIB3DS_DL_SPOTLIGHT, io)) { return(LIB3DS_FALSE); } light->spot_light=LIB3DS_TRUE; for (i=0; i<3; ++i) { light->spot[i]=lib3ds_io_read_float(io); } light->hot_spot = lib3ds_io_read_float(io); light->fall_off = lib3ds_io_read_float(io); lib3ds_chunk_read_tell(&c, io); while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) { switch (chunk) { case LIB3DS_DL_SPOT_ROLL: { light->roll=lib3ds_io_read_float(io); } break; case LIB3DS_DL_SHADOWED: { light->shadowed=LIB3DS_TRUE; } break; case LIB3DS_DL_LOCAL_SHADOW2: { light->shadow_bias=lib3ds_io_read_float(io); light->shadow_filter=lib3ds_io_read_float(io); light->shadow_size=lib3ds_io_read_intw(io); } break; case LIB3DS_DL_SEE_CONE: { light->see_cone=LIB3DS_TRUE; } break; case LIB3DS_DL_SPOT_RECTANGULAR: { light->rectangular_spot=LIB3DS_TRUE; } break; case LIB3DS_DL_SPOT_ASPECT: { light->spot_aspect=lib3ds_io_read_float(io); } break; case LIB3DS_DL_SPOT_PROJECTOR: { light->use_projector=LIB3DS_TRUE; if (!lib3ds_io_read_string(io, light->projector, 64)) { return(LIB3DS_FALSE); } } case LIB3DS_DL_SPOT_OVERSHOOT: { light->spot_overshoot=LIB3DS_TRUE; } break; case LIB3DS_DL_RAY_BIAS: { light->ray_bias=lib3ds_io_read_float(io); } break; case LIB3DS_DL_RAYSHAD: { light->ray_shadows=LIB3DS_TRUE; } break; default: lib3ds_chunk_unknown(chunk); } } lib3ds_chunk_read_end(&c, io); return(LIB3DS_TRUE); }
/*! * \ingroup material */ Lib3dsBool lib3ds_material_read(Lib3dsMaterial *material, Lib3dsIo *io) { Lib3dsChunk c; Lib3dsWord chunk; ASSERT(material); if (!lib3ds_chunk_read_start(&c, LIB3DS_MAT_ENTRY, io)) { return(LIB3DS_FALSE); } while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) { switch (chunk) { case LIB3DS_MAT_NAME: { if (!lib3ds_io_read_string(io, material->name, 64)) { return(LIB3DS_FALSE); } lib3ds_chunk_dump_info(" NAME=%s", material->name); } break; case LIB3DS_MAT_AMBIENT: { lib3ds_chunk_read_reset(&c, io); if (!color_read(material->ambient, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_DIFFUSE: { lib3ds_chunk_read_reset(&c, io); if (!color_read(material->diffuse, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SPECULAR: { lib3ds_chunk_read_reset(&c, io); if (!color_read(material->specular, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHININESS: { lib3ds_chunk_read_reset(&c, io); if (!int_percentage_read(&material->shininess, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHIN2PCT: { lib3ds_chunk_read_reset(&c, io); if (!int_percentage_read(&material->shin_strength, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TRANSPARENCY: { lib3ds_chunk_read_reset(&c, io); if (!int_percentage_read(&material->transparency, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_XPFALL: { lib3ds_chunk_read_reset(&c, io); if (!int_percentage_read(&material->falloff, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SELF_ILPCT: { lib3ds_chunk_read_reset(&c, io); if (!int_percentage_read(&material->self_ilpct, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_USE_XPFALL: { material->use_falloff=LIB3DS_TRUE; } break; case LIB3DS_MAT_REFBLUR: { lib3ds_chunk_read_reset(&c, io); if (!int_percentage_read(&material->blur, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_USE_REFBLUR: { material->use_blur=LIB3DS_TRUE; } break; case LIB3DS_MAT_SHADING: { material->shading=lib3ds_io_read_intw(io); } break; case LIB3DS_MAT_SELF_ILLUM: { material->self_illum=LIB3DS_TRUE; } break; case LIB3DS_MAT_TWO_SIDE: { material->two_sided=LIB3DS_TRUE; } break; case LIB3DS_MAT_DECAL: { material->map_decal=LIB3DS_TRUE; } break; case LIB3DS_MAT_ADDITIVE: { material->additive=LIB3DS_TRUE; } break; case LIB3DS_MAT_FACEMAP: { material->face_map=LIB3DS_TRUE; } break; case LIB3DS_MAT_PHONGSOFT: { material->soften=LIB3DS_TRUE; } break; case LIB3DS_MAT_WIRE: { material->use_wire=LIB3DS_TRUE; } break; case LIB3DS_MAT_WIREABS: { material->use_wire_abs=LIB3DS_TRUE; } break; case LIB3DS_MAT_WIRE_SIZE: { material->wire_size=lib3ds_io_read_float(io); } break; case LIB3DS_MAT_TEXMAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->texture1_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TEXMASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->texture1_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TEX2MAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->texture2_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_TEX2MASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->texture2_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_OPACMAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->opacity_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_OPACMASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->opacity_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_BUMPMAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->bump_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_BUMPMASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->bump_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SPECMAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->specular_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SPECMASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->specular_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHINMAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->shininess_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SHINMASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->shininess_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SELFIMAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->self_illum_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_SELFIMASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->self_illum_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_REFLMAP: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->reflection_map, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_REFLMASK: { lib3ds_chunk_read_reset(&c, io); if (!texture_map_read(&material->reflection_mask, io)) { return(LIB3DS_FALSE); } } break; case LIB3DS_MAT_ACUBIC: { lib3ds_io_read_intb(io); material->autorefl_map.level=lib3ds_io_read_intb(io); material->autorefl_map.flags=lib3ds_io_read_intw(io); material->autorefl_map.size=lib3ds_io_read_intd(io); material->autorefl_map.frame_step=lib3ds_io_read_intd(io); } break; default: lib3ds_chunk_unknown(chunk); } } lib3ds_chunk_read_end(&c, io); return(LIB3DS_TRUE); }
static Lib3dsBool texture_map_read(Lib3dsTextureMap *map, Lib3dsIo *io) { Lib3dsChunk c; Lib3dsWord chunk; if (!lib3ds_chunk_read_start(&c, 0, io)) { return(LIB3DS_FALSE); } while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) { switch (chunk) { case LIB3DS_INT_PERCENTAGE: { map->percent=1.0f*lib3ds_io_read_intw(io)/100.0f; } break; case LIB3DS_MAT_MAPNAME: { if (!lib3ds_io_read_string(io, map->name, 64)) { return(LIB3DS_FALSE); } lib3ds_chunk_dump_info(" NAME=%s", map->name); } break; case LIB3DS_MAT_MAP_TILING: { map->flags=lib3ds_io_read_word(io); } break; case LIB3DS_MAT_MAP_TEXBLUR: { map->blur=lib3ds_io_read_float(io); } break; case LIB3DS_MAT_MAP_USCALE: { map->scale[0]=lib3ds_io_read_float(io); } break; case LIB3DS_MAT_MAP_VSCALE: { map->scale[1]=lib3ds_io_read_float(io); } break; case LIB3DS_MAT_MAP_UOFFSET: { map->offset[0]=lib3ds_io_read_float(io); } break; case LIB3DS_MAT_MAP_VOFFSET: { map->offset[1]=lib3ds_io_read_float(io); } break; case LIB3DS_MAT_MAP_ANG: { map->rotation=lib3ds_io_read_float(io); } break; case LIB3DS_MAT_MAP_COL1: { map->tint_1[0]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_1[1]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_1[2]=1.0f*lib3ds_io_read_byte(io)/255.0f; } break; case LIB3DS_MAT_MAP_COL2: { map->tint_2[0]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_2[1]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_2[2]=1.0f*lib3ds_io_read_byte(io)/255.0f; } break; case LIB3DS_MAT_MAP_RCOL: { map->tint_r[0]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_r[1]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_r[2]=1.0f*lib3ds_io_read_byte(io)/255.0f; } break; case LIB3DS_MAT_MAP_GCOL: { map->tint_g[0]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_g[1]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_g[2]=1.0f*lib3ds_io_read_byte(io)/255.0f; } break; case LIB3DS_MAT_MAP_BCOL: { map->tint_b[0]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_b[1]=1.0f*lib3ds_io_read_byte(io)/255.0f; map->tint_b[2]=1.0f*lib3ds_io_read_byte(io)/255.0f; } break; default: lib3ds_chunk_unknown(chunk); } } lib3ds_chunk_read_end(&c, io); return(LIB3DS_TRUE); }
static void spotlight_read(Lib3dsLight *light, Lib3dsIo *io) { Lib3dsChunk c; uint16_t chunk; int i; lib3ds_chunk_read_start(&c, CHK_DL_SPOTLIGHT, io); light->spot_light = TRUE; for (i = 0; i < 3; ++i) { light->target[i] = lib3ds_io_read_float(io); } light->hotspot = lib3ds_io_read_float(io); light->falloff = lib3ds_io_read_float(io); lib3ds_chunk_read_tell(&c, io); while ((chunk = lib3ds_chunk_read_next(&c, io)) != 0) { switch (chunk) { case CHK_DL_SPOT_ROLL: light->roll = lib3ds_io_read_float(io); break; case CHK_DL_SHADOWED: { light->shadowed = TRUE; break; } case CHK_DL_LOCAL_SHADOW2: { light->shadow_bias = lib3ds_io_read_float(io); light->shadow_filter = lib3ds_io_read_float(io); light->shadow_size = lib3ds_io_read_intw(io); break; } case CHK_DL_SEE_CONE: { light->see_cone = TRUE; break; } case CHK_DL_SPOT_RECTANGULAR: { light->rectangular_spot = TRUE; break; } case CHK_DL_SPOT_ASPECT: { light->spot_aspect = lib3ds_io_read_float(io); break; } case CHK_DL_SPOT_PROJECTOR: { light->use_projector = TRUE; lib3ds_io_read_string(io, light->projector, 64); break; } case CHK_DL_SPOT_OVERSHOOT: { light->spot_overshoot = TRUE; break; } case CHK_DL_RAY_BIAS: { light->ray_bias = lib3ds_io_read_float(io); break; } case CHK_DL_RAYSHAD: { light->ray_shadows = TRUE; break; } default: lib3ds_chunk_unknown(chunk, io); } } lib3ds_chunk_read_end(&c, io); }
/*! * \ingroup viewport */ Lib3dsBool lib3ds_viewport_read(Lib3dsViewport *viewport, Lib3dsIo *io) { Lib3dsChunk c; Lib3dsWord chunk; if (!lib3ds_chunk_read_start(&c, 0, io)) { return(LIB3DS_FALSE); } switch (c.chunk) { case LIB3DS_VIEWPORT_LAYOUT: { int cur=0; viewport->layout.style=lib3ds_io_read_word(io); viewport->layout.active=lib3ds_io_read_intw(io); lib3ds_io_read_intw(io); viewport->layout.swap=lib3ds_io_read_intw(io); lib3ds_io_read_intw(io); viewport->layout.swap_prior=lib3ds_io_read_intw(io); viewport->layout.swap_view=lib3ds_io_read_intw(io); lib3ds_chunk_read_tell(&c, io); while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) { switch (chunk) { case LIB3DS_VIEWPORT_SIZE: { viewport->layout.position[0]=lib3ds_io_read_word(io); viewport->layout.position[1]=lib3ds_io_read_word(io); viewport->layout.size[0]=lib3ds_io_read_word(io); viewport->layout.size[1]=lib3ds_io_read_word(io); } break; case LIB3DS_VIEWPORT_DATA_3: { lib3ds_viewport_set_views(viewport,cur+1); lib3ds_io_read_intw(io); viewport->layout.viewL[cur].axis_lock=lib3ds_io_read_word(io); viewport->layout.viewL[cur].position[0]=lib3ds_io_read_intw(io); viewport->layout.viewL[cur].position[1]=lib3ds_io_read_intw(io); viewport->layout.viewL[cur].size[0]=lib3ds_io_read_intw(io); viewport->layout.viewL[cur].size[1]=lib3ds_io_read_intw(io); viewport->layout.viewL[cur].type=lib3ds_io_read_word(io); viewport->layout.viewL[cur].zoom=lib3ds_io_read_float(io); lib3ds_io_read_vector(io, viewport->layout.viewL[cur].center); viewport->layout.viewL[cur].horiz_angle=lib3ds_io_read_float(io); viewport->layout.viewL[cur].vert_angle=lib3ds_io_read_float(io); lib3ds_io_read(io, viewport->layout.viewL[cur].camera, 11); ++cur; } break; case LIB3DS_VIEWPORT_DATA: /* 3DS R2 & R3 chunk unsupported */ break; default: lib3ds_chunk_unknown(chunk); } } } break; case LIB3DS_DEFAULT_VIEW: { memset(&viewport->default_view,0,sizeof(Lib3dsDefaultView)); while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) { switch (chunk) { case LIB3DS_VIEW_TOP: { viewport->default_view.type=LIB3DS_VIEW_TYPE_TOP; lib3ds_io_read_vector(io, viewport->default_view.position); viewport->default_view.width=lib3ds_io_read_float(io); } break; case LIB3DS_VIEW_BOTTOM: { viewport->default_view.type=LIB3DS_VIEW_TYPE_BOTTOM; lib3ds_io_read_vector(io, viewport->default_view.position); viewport->default_view.width=lib3ds_io_read_float(io); } break; case LIB3DS_VIEW_LEFT: { viewport->default_view.type=LIB3DS_VIEW_TYPE_LEFT; lib3ds_io_read_vector(io, viewport->default_view.position); viewport->default_view.width=lib3ds_io_read_float(io); } break; case LIB3DS_VIEW_RIGHT: { viewport->default_view.type=LIB3DS_VIEW_TYPE_RIGHT; lib3ds_io_read_vector(io, viewport->default_view.position); viewport->default_view.width=lib3ds_io_read_float(io); } break; case LIB3DS_VIEW_FRONT: { viewport->default_view.type=LIB3DS_VIEW_TYPE_FRONT; lib3ds_io_read_vector(io, viewport->default_view.position); viewport->default_view.width=lib3ds_io_read_float(io); } break; case LIB3DS_VIEW_BACK: { viewport->default_view.type=LIB3DS_VIEW_TYPE_BACK; lib3ds_io_read_vector(io, viewport->default_view.position); viewport->default_view.width=lib3ds_io_read_float(io); } break; case LIB3DS_VIEW_USER: { viewport->default_view.type=LIB3DS_VIEW_TYPE_USER; lib3ds_io_read_vector(io, viewport->default_view.position); viewport->default_view.width=lib3ds_io_read_float(io); viewport->default_view.horiz_angle=lib3ds_io_read_float(io); viewport->default_view.vert_angle=lib3ds_io_read_float(io); viewport->default_view.roll_angle=lib3ds_io_read_float(io); } break; case LIB3DS_VIEW_CAMERA: { viewport->default_view.type=LIB3DS_VIEW_TYPE_CAMERA; lib3ds_io_read(io, viewport->default_view.camera, 11); } break; default: lib3ds_chunk_unknown(chunk); } } } break; } lib3ds_chunk_read_end(&c, io); return(LIB3DS_TRUE); }