Skip to content

Commit

Permalink
[Add] : utils print function for debug and manage mtl file name with …
Browse files Browse the repository at this point in the history
…spaceIn
  • Loading branch information
MasterLaplace committed Jun 19, 2023
1 parent bebac0b commit cb51d50
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 15 deletions.
9 changes: 9 additions & 0 deletions includes/engine.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,12 @@ typedef struct Tree_s {
triangle_t *triangle; // triangle at front node
} Tree_t;

union vector
{
sfVector3f vec3;
sfVector4f vec4;
};

struct engine_s {
/*graphic*/
sfRenderWindow *window;
Expand Down Expand Up @@ -171,6 +177,9 @@ float calcul_dist(sfVector4f p, sfVector4f pp, sfVector4f n);
void Matrix_Multiply(float (*m)[4], float (*m1)[4], float (*m2)[4]);
matrix Matrix_QuickInverse(float (*m)[4]);
sfVector3f average_triangle(triangle_t *t);
void print_vector(sfVector4f v);
void print_triangle(triangle_t *t);
void print_cube(sfVector3f s_g[2]);

/* DRAW */
void display_triangles(link_t *mesh);
Expand Down
30 changes: 20 additions & 10 deletions src/engine/bvh.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,23 +118,33 @@ static bool is_in_triangle(sfVector4f point, triangle_t *triangle)

static bool is_in_cube(sfVector4f point, sfVector3f s_g[2])
{
return (s_g[0].x < point.x && s_g[0].y < point.y && s_g[0].z < point.z) && (s_g[1].x > point.x && s_g[1].y > point.y && s_g[1].z > point.z);
return (s_g[0].x <= point.x && s_g[0].y <= point.y && s_g[0].z <= point.z) && (s_g[1].x >= point.x && s_g[1].y >= point.y && s_g[1].z >= point.z);
}

sfVector3f get_bvh(Tree_t *tree, sfVector4f point)
{
sfVector3f connect_point = {0, 0, 0};
if (tree->triangle) {
printf("triangle : %p\n", tree->triangle);
print_triangle(tree->triangle);
print_vector(point);
if (is_in_triangle(point, tree->triangle)) {
connect_point = average_triangle(tree->triangle);
printf(" connect_point : %f %f %f\n", connect_point.x, connect_point.y, connect_point.z);
}
} else {
if (is_in_cube(point, tree->left->s_g))
connect_point = get_bvh(tree->left, point);
else if (is_in_cube(point, tree->right->s_g))
connect_point = get_bvh(tree->right, point);
printf(" pos : \n");
print_vector(point);
printf(" left : \n");
print_cube(tree->node[0]->s_g);
printf(" right : \n");
print_cube(tree->node[2]->s_g);
if (is_in_cube(point, tree->node[0]->s_g)) {
printf(" left -> \n");
connect_point = get_bvh(tree->node[0], point);
} else if (is_in_cube(point, tree->node[2]->s_g)) {
printf(" right -> \n");
connect_point = get_bvh(tree->node[2], point);
}
}
return connect_point;
}
Expand All @@ -144,11 +154,11 @@ void print_bvh(Tree_t *tree)
if (tree->triangle) {
printf("triangle: %f %f %f\n", tree->triangle->sommet[0].x, tree->triangle->sommet[0].y, tree->triangle->sommet[0].z);
} else {
if (tree->left) {
print_bvh(tree->left);
if (tree->node[0]) {
print_bvh(tree->node[0]);
}
if (tree->right) {
print_bvh(tree->right);
if (tree->node[2]) {
print_bvh(tree->node[2]);
}
}
}
3 changes: 2 additions & 1 deletion src/engine/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ static bool load_file(char *filename, char *filepath)
stat(file, &st);
if (!(buf = malloc(sizeof(char) * (st.st_size + 1))))
return false;
read(fd, buf, st.st_size);
if (read(fd, buf, st.st_size) == -1)
return false;
buf[st.st_size] = '\0';
list_append(&(LIST_OBJS), create_link(create_obj(stwa(buf, "\n"))));
free(buf);
Expand Down
11 changes: 7 additions & 4 deletions src/engine/parser_obj.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ static char *search_in_mtl_file(const char *filepathname, const char *texture_na
stat(filepathname, &st);
if (!(buf = malloc(sizeof(char) * (st.st_size + 1))))
return map_Kd;
read(fd, buf, st.st_size);
if (read(fd, buf, st.st_size) == -1)
return map_Kd;
buf[st.st_size] = '\0';
char **info = stwa(buf, "\n");

Expand Down Expand Up @@ -143,9 +144,11 @@ mesh_t *create_obj(char **buf)
}
} else if (strcmp(info[0], "usemtl") == 0)
tex = search_in_file(info[1], mtllib);
else if (strcmp(info[0], "mtllib") == 0)
mtllib = strdup(info[1]); // TODO: manage file name with spaceIn
else if (!strcmp(info[1], "cube"))
else if (strcmp(info[0], "mtllib") == 0) {
if (mtllib)
free(mtllib);
mtllib = strdup(buf[i] + 7); // 7 = strlen("mtllib ")
} else if (!strcmp(info[1], "cube"))
mesh->type = PLAYER;
two_free(info);
}
Expand Down
38 changes: 38 additions & 0 deletions src/engine/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,41 @@ bool cmp_two_triangles(void *triangle1, void *triangle2)
float z2 = (t2->sommet[0].z + t2->sommet[1].z + t2->sommet[2].z) / 3.0f;
return z1 > z2;
}

void print_matrix(float (*m)[4])
{
for(sizint i = 0; i < 4; i++) {
for(sizint j = 0; j < 4; j++) {
printf("%f ", m[j][i]);
}
printf("\r\n");
}
}

void print_vector(sfVector4f v)
{
printf("Vector4f: %f %f %f %f\r\n", v.x, v.y, v.z, v.w);
}

void print_vector3(sfVector3f v)
{
printf("%f %f %f\r\n", v.x, v.y, v.z);
}

void print_triangle(triangle_t *t)
{
printf("Triangle:\r\n");
for(sizint i = 0; i < 3; i++) {
printf("Sommet %d: ", i);
print_vector(t->sommet[i]);
}
}

void print_cube(sfVector3f s_g[2])
{
printf("Cube:\r\n");
printf("Sommet gauche: ");
print_vector3(s_g[0]);
printf("Sommet droit: ");
print_vector3(s_g[1]);
}

0 comments on commit cb51d50

Please sign in to comment.