Download tddfa/Sim3DR/tests/test.cpp from ozyman/fasd: direct link, hf CLI and curl.
- Browser
- Download file 4.43 kB
-
https://huggingface.co/spaces/ozyman/fasd/resolve/main/tddfa/Sim3DR/tests/test.cpp
- Command line
-
hf download hf://spaces/ozyman/fasd/tddfa/Sim3DR/tests/test.cpp
-
curl -L -o test.cpp https://huggingface.co/spaces/ozyman/fasd/resolve/main/tddfa/Sim3DR/tests/test.cpp
4.43 kB
| /* | |
| * Tesing cases | |
| */ | |
| void test_isPointInTri() { | |
| Point p0(0, 0); | |
| Point p1(1, 0); | |
| Point p2(1, 1); | |
| Point p(0.2, 0.2); | |
| if (is_point_in_tri(p, p0, p1, p2)) | |
| std::cout << "In"; | |
| else | |
| std::cout << "Out"; | |
| std::cout << std::endl; | |
| } | |
| void test_getPointWeight() { | |
| Point p0(0, 0); | |
| Point p1(1, 0); | |
| Point p2(1, 1); | |
| Point p(0.2, 0.2); | |
| float weight[3]; | |
| get_point_weight(weight, p, p0, p1, p2); | |
| std::cout << weight[0] << " " << weight[1] << " " << weight[2] << std::endl; | |
| } | |
| void test_get_tri_normal() { | |
| float tri_normal[3]; | |
| // float vertices[9] = {1, 0, 0, 0, 0, 0, 0, 1, 0}; | |
| float vertices[9] = {1, 1.1, 0, 0, 0, 0, 0, 0.6, 0.7}; | |
| int triangles[3] = {0, 1, 2}; | |
| int ntri = 1; | |
| _get_tri_normal(tri_normal, vertices, triangles, ntri); | |
| for (int i = 0; i < 3; ++i) | |
| std::cout << tri_normal[i] << ", "; | |
| std::cout << std::endl; | |
| } | |
| void test_load_obj() { | |
| const char *fp = "../data/vd005_mesh.obj"; | |
| int nver = 35709; | |
| int ntri = 70789; | |
| auto *vertices = new float[nver]; | |
| auto *colors = new float[nver]; | |
| auto *triangles = new int[ntri]; | |
| load_obj(fp, vertices, colors, triangles, nver, ntri); | |
| delete[] vertices; | |
| delete[] colors; | |
| delete[] triangles; | |
| } | |
| void test_render() { | |
| // 1. loading obj | |
| // const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/vd005_mesh.obj"; | |
| const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/face1.obj"; | |
| int nver = 35709; //53215; //35709; | |
| int ntri = 70789; //105840;//70789; | |
| auto *vertices = new float[3 * nver]; | |
| auto *colors = new float[3 * nver]; | |
| auto *triangles = new int[3 * ntri]; | |
| load_obj(fp, vertices, colors, triangles, nver, ntri); | |
| // 2. rendering | |
| int h = 224, w = 224, c = 3; | |
| // enlarging | |
| int scale = 4; | |
| h *= scale; | |
| w *= scale; | |
| for (int i = 0; i < nver * 3; ++i) vertices[i] *= scale; | |
| auto *image = new unsigned char[h * w * c](); | |
| auto *depth_buffer = new float[h * w](); | |
| for (int i = 0; i < h * w; ++i) depth_buffer[i] = -999999; | |
| clock_t t; | |
| t = clock(); | |
| _rasterize(image, vertices, triangles, colors, depth_buffer, ntri, h, w, c, true); | |
| t = clock() - t; | |
| double time_taken = ((double) t) / CLOCKS_PER_SEC; // in seconds | |
| printf("Render took %f seconds to execute \n", time_taken); | |
| // auto *image_char = new u_char[h * w * c](); | |
| // for (int i = 0; i < h * w * c; ++i) | |
| // image_char[i] = u_char(255 * image[i]); | |
| write_ppm("res.ppm", image, h, w, c); | |
| // delete[] image_char; | |
| delete[] vertices; | |
| delete[] colors; | |
| delete[] triangles; | |
| delete[] image; | |
| delete[] depth_buffer; | |
| } | |
| void test_light() { | |
| // 1. loading obj | |
| const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/emma_input_0_noheader.ply"; | |
| int nver = 53215; //35709; | |
| int ntri = 105840; //70789; | |
| auto *vertices = new float[3 * nver]; | |
| auto *colors = new float[3 * nver]; | |
| auto *triangles = new int[3 * ntri]; | |
| load_ply(fp, vertices, triangles, nver, ntri); | |
| // 2. rendering | |
| // int h = 1901, w = 3913, c = 3; | |
| int h = 2000, w = 4000, c = 3; | |
| // enlarging | |
| // int scale = 1; | |
| // h *= scale; | |
| // w *= scale; | |
| // for (int i = 0; i < nver * 3; ++i) vertices[i] *= scale; | |
| auto *image = new unsigned char[h * w * c](); | |
| auto *depth_buffer = new float[h * w](); | |
| for (int i = 0; i < h * w; ++i) depth_buffer[i] = -999999; | |
| for (int i = 0; i < 3 * nver; ++i) colors[i] = 0.8; | |
| clock_t t; | |
| t = clock(); | |
| _rasterize(image, vertices, triangles, colors, depth_buffer, ntri, h, w, c, true); | |
| t = clock() - t; | |
| double time_taken = ((double) t) / CLOCKS_PER_SEC; // in seconds | |
| printf("Render took %f seconds to execute \n", time_taken); | |
| // auto *image_char = new u_char[h * w * c](); | |
| // for (int i = 0; i < h * w * c; ++i) | |
| // image_char[i] = u_char(255 * image[i]); | |
| write_ppm("emma.ppm", image, h, w, c); | |
| // delete[] image_char; | |
| delete[] vertices; | |
| delete[] colors; | |
| delete[] triangles; | |
| delete[] image; | |
| delete[] depth_buffer; | |
| } | |
| int main(int argc, char *argv[]) { | |
| // std::cout << "Hello CMake!" << std::endl; | |
| // test_isPointInTri(); | |
| // test_getPointWeight(); | |
| // test_get_tri_normal(); | |
| // test_load_obj(); | |
| // test_render(); | |
| test_light(); | |
| return 0; | |
| } |