コード例 #1
0
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);
}
コード例 #2
0
ファイル: scene.cpp プロジェクト: darwin/inferno
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;
}