|
|
|
|
|
|
|
|
|
#include <iostream> |
|
#include <time.h> |
|
#include "rasterize.h" |
|
#include "io.h" |
|
|
|
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, 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() { |
|
|
|
|
|
const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/face1.obj"; |
|
int nver = 35709; |
|
int ntri = 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); |
|
|
|
|
|
int h = 224, w = 224, c = 3; |
|
|
|
|
|
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; |
|
printf("Render took %f seconds to execute \n", time_taken); |
|
|
|
|
|
|
|
|
|
|
|
write_ppm("res.ppm", image, h, w, c); |
|
|
|
|
|
delete[] vertices; |
|
delete[] colors; |
|
delete[] triangles; |
|
delete[] image; |
|
delete[] depth_buffer; |
|
} |
|
|
|
void test_light() { |
|
|
|
const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/emma_input_0_noheader.ply"; |
|
int nver = 53215; |
|
int ntri = 105840; |
|
|
|
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); |
|
|
|
|
|
|
|
int h = 2000, w = 4000, c = 3; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
printf("Render took %f seconds to execute \n", time_taken); |
|
|
|
|
|
|
|
|
|
|
|
write_ppm("emma.ppm", image, h, w, c); |
|
|
|
|
|
delete[] vertices; |
|
delete[] colors; |
|
delete[] triangles; |
|
delete[] image; |
|
delete[] depth_buffer; |
|
} |
|
|
|
int main(int argc, char *argv[]) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test_light(); |
|
return 0; |
|
} |