Example #1
0
UVMapT *NewUVMapFromFile(const char *fileName) {
  DiskUVMapT *file = (DiskUVMapT *)ReadFileSimple(fileName);

  if (file) {
    UVMapT *map = NewUVMap(file->width, file->height, UV_FAST, 256, 256);

    LOG("Distortion map '%s' has size (%d,%d).",
        fileName, (int)file->width, (int)file->height);

    {
      uint8_t *dstU = map->map.fast.u;
      uint8_t *dstV = map->map.fast.v;
      uint8_t *src = file->data;
      int n = map->width * map->height;

      do {
        *dstU++ = *src++;
        *dstV++ = *src++;
      } while (--n);
    }

    MemUnref(file);

    return map;
  }

  return NULL;
}
Example #2
0
MeshT *NewMeshFromFile(const char *fileName) {
  DiskMeshT *header = ReadFileSimple(fileName);

  if (header) {
    MeshT *mesh = NewMesh(header->vertices, header->polygons, header->surfaces);
    uint8_t *data = header->data;
    int i;

    /* vertices */
    MemCopy(mesh->vertex, data, sizeof(Vector3D) * header->vertices);

    for (i = 0; i < header->vertices; i++) {
      mesh->vertex[i].y = - mesh->vertex[i].y;
      mesh->vertex[i].z = - mesh->vertex[i].z;
    }

    data += sizeof(Vector3D) * header->vertices;

    /* triangles */
    for (i = 0; i < header->polygons; i++) {
      DiskTriangleT *triangle = (DiskTriangleT *)data;

      mesh->polygon[i].surface = triangle->surface;
      mesh->polygon[i].p[0] = triangle->p[0];
      mesh->polygon[i].p[1] = triangle->p[1];
      mesh->polygon[i].p[2] = triangle->p[2];

      data += sizeof(DiskTriangleT);
    }

    MeshCalculateEdges(mesh);

    /* surfaces */
    for (i = 0; i < header->surfaces; i++) {
      DiskSurfaceT *surface = (DiskSurfaceT *)data;

      mesh->surface[i].name = StrDup(surface->name);
      mesh->surface[i].color.rgb = surface->color;
      mesh->surface[i].sideness = surface->flags;

      data += sizeof(DiskSurfaceT) + strlen(surface->name) + 1;
    }

    LOG("Mesh '%s' has %d vertices, %d polygons, %d edges "
        "and %d surfaces.", fileName, mesh->vertexNum, mesh->polygonNum,
        mesh->edgeNum, mesh->surfaceNum);

    MemUnref(header);

    CalculateVertexToPolygonMap(mesh);

    return mesh;
  }

  return NULL;
}
Example #3
0
PaletteT *NewPaletteFromFile(const StrT fileName) {
  DiskPaletteT *file = ReadFileSimple(fileName);

  if (file) {
    PaletteT *palette = NewPalette(file->count);

    palette->start = file->start;

    LOG("Palette '%s' has %d colors.", fileName, file->count);

    MemCopy(palette->colors, file->colors, sizeof(RGB) * file->count);

    MemUnref(file);

    return palette;
  }

  return NULL;
}
Example #4
0
DistortionMapT *NewDistortionMapFromFile(const StrT fileName) {
  DiskDistortionMapT *file = (DiskDistortionMapT *)ReadFileSimple(fileName);

  if (file) {
    DistortionMapT *map =
      NewDistortionMap(file->width, file->height, DMAP_OPTIMIZED, 256, 256);

    LOG("Distortion map '%s' has size (%d,%d).",
        fileName, (int)file->width, (int)file->height);

    memcpy(map->map, file->data,
           (int)file->width * (int)file->height * sizeof(uint16_t));

    MemUnref(file);

    return map;
  }

  return NULL;
}