File size: 2,358 Bytes
ddadf19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "io.h"

//void load_obj(const string obj_fp, float* vertices, float* colors, float* triangles){
//    string line;
//    ifstream in(obj_fp);
//
//    if(in.is_open()){
//        while (getline(in, line)){
//            stringstream ss(line);
//
//            char t; // type: v, f
//            ss >> t;
//            if (t == 'v'){
//
//            }
//        }
//    }
//}

void load_obj(const char *obj_fp, float *vertices, float *colors, int *triangles, int nver, int ntri) {
    FILE *fp;
    fp = fopen(obj_fp, "r");

    char t; // type: v or f
    if (fp != nullptr) {
        for (int i = 0; i < nver; ++i) {
            fscanf(fp, "%c", &t);
            for (int j = 0; j < 3; ++j)
                fscanf(fp, " %f", &vertices[3 * i + j]);
            for (int j = 0; j < 3; ++j)
                fscanf(fp, " %f", &colors[3 * i + j]);
            fscanf(fp, "\n");
        }
//        fscanf(fp, "%c", &t);
        for (int i = 0; i < ntri; ++i) {
            fscanf(fp, "%c", &t);
            for (int j = 0; j < 3; ++j) {
                fscanf(fp, " %d", &triangles[3 * i + j]);
                triangles[3 * i + j] -= 1;
            }
            fscanf(fp, "\n");
        }

        fclose(fp);
    }
}

void load_ply(const char *ply_fp, float *vertices, int *triangles, int nver, int ntri) {
    FILE *fp;
    fp = fopen(ply_fp, "r");

//    char s[256];
    char t;
    if (fp != nullptr) {
//        for (int i = 0; i < 9; ++i)
//            fscanf(fp, "%s", s);
        for (int i = 0; i < nver; ++i)
            fscanf(fp, "%f %f %f\n", &vertices[3 * i], &vertices[3 * i + 1], &vertices[3 * i + 2]);

        for (int i = 0; i < ntri; ++i)
            fscanf(fp, "%c %d %d %d\n", &t, &triangles[3 * i], &triangles[3 * i + 1], &triangles[3 * i + 2]);

        fclose(fp);
    }
}

void write_ppm(const char *filename, unsigned char *img, int h, int w, int c) {
    FILE *fp;
    //open file for output
    fp = fopen(filename, "wb");
    if (!fp) {
        fprintf(stderr, "Unable to open file '%s'\n", filename);
        exit(1);
    }

    //write the header file
    //image format
    fprintf(fp, "P6\n");

    //image size
    fprintf(fp, "%d %d\n", w, h);

    // rgb component depth
    fprintf(fp, "%d\n", MAX_PXL_VALUE);

    // pixel data
    fwrite(img, sizeof(unsigned char), size_t(h * w * c), fp);
    fclose(fp);
}