int load_scene_open(t_prog *prog, char *str) { char **file; t_coord dir; if (((file = str_to_wordtab(str, "\n")) == NULL) || (load_scene_open_beg(prog, file))) return (-1); prog->cam_fov.y = prog->cam_fov.x * ((prog->win_size.x / prog->win_size.y) / 1.5); if (get_cam_pos(file, prog) == 1 || get_cam_look_at(file, prog) == 1 || load_mat(prog, file) == -1 || load_light(prog, file) == -1 || load_obj(prog, file) == -1) return (-1); if (prog->look_at.x == prog->cam_pos.x && prog->look_at.y == prog->cam_pos.y && prog->look_at.z == prog->cam_pos.z) return (my_printf(2, "Wrong camera placement\n") - 1); dir = normalize(minus_point(prog->look_at, prog->cam_pos)); prog->cam_rot.x = RTD(acos(-(dir.z / sqrt(pow(dir.x, 2) + pow(dir.z, 2))))) - 90; prog->cam_rot.y = RTD((M_PI / 2 - acos(dir.y))); prog->cam_dir = normalize(minus_point(prog->look_at, prog->cam_pos)); free_tab(file); return (0); }
int parse_line(FILE* f) { char buf[64*1024]; if (feof(f)) return 1; fgets(buf, 64*1024, f); if (strlen(buf)<2) return 1; int res; switch (buf[0]) { case 'c': res = load_camera(buf+2); break; case 'l': res = load_light(buf+2); break; case 't': res = load_triangle(buf+2); break; default: res = 0; } return res; }