FILEVOX.CPP
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. #include "ray.h"
  2. #include "globals.h"
  3. #include "rayfile.h"
  4. #include "rgobject.h"
  5. #include "voxel.h"
  6. #include <mem.h>
  7. void Reverse_Light_And_Color(PUCHAR source_image, long length);
  8. void Load_Vox_Map(PUCHAR & vox_ptr , long offset)
  9. {
  10.    F_Seek(offset);
  11.  
  12.    RCastGobject vox_temp(2);
  13.    char filename[F_NAME_LENGTH];
  14.    // load bitmaps from pcx files
  15.    F_Get_String_NT(filename, F_NAME_LENGTH);
  16.    vox_temp.assigninfile(filename);
  17.    vox_temp.load(0);
  18.    F_Get_String_NT(filename, F_NAME_LENGTH);
  19.    vox_temp.assigninfile(filename);
  20.    vox_temp.load(1);
  21.    //Palette no longer reversed as one palette is used
  22.    //Reverse_Light_And_Color(vox_temp.Image(1), COL_ARR_SIZE);
  23.    // now, this is tricky (i.e. bad code)
  24.    // but is justified due to extreme speed demands
  25.    // the altitudes array and color array are stacked
  26.    // against eachother in memory, which will save time in
  27.    // the essential assembly loop to draw the terrain
  28.    vox_ptr=NewPtr(TOTAL_VOX_MEM);
  29.    memcpy(vox_ptr, vox_temp.Image(0), ALT_ARR_SIZE);
  30.    memcpy(vox_ptr+ALT_TO_COL_DIFF, vox_temp.Image(1), COL_ARR_SIZE);
  31. }
  32. void Reverse_Light_And_Color(PUCHAR source_image, long length)
  33. {
  34.    PUCHAR dest_image=NewPtr(length);
  35.    UCHAR cur_light, cur_color;
  36.    for (long cur_pixel=0; cur_pixel<length; cur_pixel++) {
  37.       cur_light=(source_image[cur_pixel] & 0xf0) >> 4;
  38.       cur_color=(source_image[cur_pixel] & 0x0f);
  39.       dest_image[cur_pixel]=cur_light+(cur_color<<4);
  40.       } /* endfor */
  41.    memcpy(source_image, dest_image, length);
  42.    DelPtr(dest_image);
  43. }