Esempio n. 1
0
File: light.c Progetto: DYFeng/mrpt
/*!
 * \ingroup light
 */
Lib3dsBool
lib3ds_light_read(Lib3dsLight *light, Lib3dsIo *io)
{
  Lib3dsChunk c;
  Lib3dsWord chunk;

  if (!lib3ds_chunk_read_start(&c, LIB3DS_N_DIRECT_LIGHT, io)) {
    return(LIB3DS_FALSE);
  }
  {
    int i;
    for (i=0; i<3; ++i) {
      light->position[i]=lib3ds_io_read_float(io);
    }
  }
  lib3ds_chunk_read_tell(&c, io);
  
  while ((chunk=lib3ds_chunk_read_next(&c, io))!=0) {
    switch (chunk) {
      case LIB3DS_COLOR_F:
        {
          int i;
          for (i=0; i<3; ++i) {
            light->color[i]=lib3ds_io_read_float(io);
          }
        }
        break;
      case LIB3DS_DL_OFF:
        {
          light->off=LIB3DS_TRUE;
        }
        break;
      case LIB3DS_DL_OUTER_RANGE:
        {
          light->outer_range=lib3ds_io_read_float(io);
        }
        break;
      case LIB3DS_DL_INNER_RANGE:
        {
          light->inner_range=lib3ds_io_read_float(io);
        }
        break;
      case LIB3DS_DL_MULTIPLIER:
        {
          light->multiplier=lib3ds_io_read_float(io);
        }
        break;
      case LIB3DS_DL_EXCLUDE:
        {
          /* FIXME: */
          lib3ds_chunk_unknown(chunk);
        }
      case LIB3DS_DL_ATTENUATE:
        {
          light->attenuation=lib3ds_io_read_float(io);
        }
        break;
      case LIB3DS_DL_SPOTLIGHT:
        {
          lib3ds_chunk_read_reset(&c, io);
          if (!spotlight_read(light, io)) {
            return(LIB3DS_FALSE);
          }
        }
        break;
      default:
        lib3ds_chunk_unknown(chunk);
    }
  }
  
  lib3ds_chunk_read_end(&c, io);
  return(LIB3DS_TRUE);
}
Esempio n. 2
0
void
lib3ds_light_read(Lib3dsLight *light, Lib3dsIo *io) {
    Lib3dsChunk c;
    uint16_t chunk;

    lib3ds_chunk_read_start(&c, CHK_N_DIRECT_LIGHT, io);

    {
        int i;
        for (i = 0; i < 3; ++i) {
            light->position[i] = lib3ds_io_read_float(io);
        }
    }
    lib3ds_chunk_read_tell(&c, io);

    while ((chunk = lib3ds_chunk_read_next(&c, io)) != 0) {
        switch (chunk) {
            case CHK_COLOR_F: {
                int i;
                for (i = 0; i < 3; ++i) {
                    light->color[i] = lib3ds_io_read_float(io);
                }
                break;
            }

            case CHK_DL_OFF: 
                light->off = TRUE;
                break;

            case CHK_DL_OUTER_RANGE: 
                light->outer_range = lib3ds_io_read_float(io);
                break;

            case CHK_DL_INNER_RANGE: 
                light->inner_range = lib3ds_io_read_float(io);
                break;

            case CHK_DL_MULTIPLIER: 
                light->multiplier = lib3ds_io_read_float(io);
                break;

            case CHK_DL_EXCLUDE: {
                /* FIXME: */
                lib3ds_chunk_unknown(chunk, io);
                break;
            }

            case CHK_DL_ATTENUATE: 
                light->attenuation = lib3ds_io_read_float(io);
                break;

            case CHK_DL_SPOTLIGHT: {
                lib3ds_chunk_read_reset(&c, io);
                spotlight_read(light, io);
                break;
            }

            default:
                lib3ds_chunk_unknown(chunk, io);
        }
    }

    lib3ds_chunk_read_end(&c, io);
}