コード例 #1
0
ファイル: lib3ds_shadow.c プロジェクト: thmoa/ChiliSensics
/*!
 * \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);
}
コード例 #2
0
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;
        }
    }
}
コード例 #3
0
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);
}
コード例 #4
0
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);
}
コード例 #5
0
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);
}
コード例 #6
0
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);
}
コード例 #7
0
ファイル: light.c プロジェクト: DYFeng/mrpt
/*!
 * \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);
}
コード例 #8
0
/*!
 * \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);
}
コード例 #9
0
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);
}
コード例 #10
0
ファイル: lib3ds_light.c プロジェクト: 0871087123/lib3ds
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);
}
コード例 #11
0
ファイル: viewport.c プロジェクト: Aharobot/mrpt
/*!
 * \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);
}