double Camera::extract_focal_length(const double film_width) const { const double DefaultFocalLength = 0.035; // in meters const double DefaultHFov = 54.0; // in degrees if (has_param("focal_length")) { if (has_param("horizontal_fov")) { RENDERER_LOG_WARNING( "while defining camera \"%s\": the parameter \"horizontal_fov\" " "has precedence over \"focal_length\".", get_path().c_str()); const double hfov = get_greater_than_zero("horizontal_fov", DefaultHFov); return hfov_to_focal_length(film_width, hfov); } else { return get_greater_than_zero("focal_length", DefaultFocalLength); } } else if (has_param("horizontal_fov")) { const double hfov = get_greater_than_zero("horizontal_fov", DefaultHFov); return hfov_to_focal_length(film_width, hfov); } else { RENDERER_LOG_ERROR( "while defining camera \"%s\": no \"horizontal_fov\" or \"focal_length\" parameter found; " "using default focal length value \"%f\".", get_path().c_str(), DefaultFocalLength); return DefaultFocalLength; } }
Vector2d Camera::extract_film_dimensions() const { const Vector2d DefaultFilmDimensions(0.025, 0.025); // in meters const double DefaultAspectRatio = DefaultFilmDimensions[0] / DefaultFilmDimensions[1]; Vector2d film_dimensions; if (has_params("film_width", "film_height")) { film_dimensions[0] = get_greater_than_zero("film_width", DefaultFilmDimensions[0]); film_dimensions[1] = get_greater_than_zero("film_height", DefaultFilmDimensions[1]); } else if (has_params("film_width", "aspect_ratio")) { const double aspect_ratio = get_greater_than_zero("aspect_ratio", DefaultAspectRatio); film_dimensions[0] = get_greater_than_zero("film_width", DefaultFilmDimensions[0]); film_dimensions[1] = film_dimensions[0] / aspect_ratio; } else if (has_params("film_height", "aspect_ratio")) { const double aspect_ratio = get_greater_than_zero("aspect_ratio", DefaultAspectRatio); film_dimensions[1] = get_greater_than_zero("film_height", DefaultFilmDimensions[1]); film_dimensions[0] = film_dimensions[1] * aspect_ratio; } else { film_dimensions = m_params.get_required<Vector2d>("film_dimensions", DefaultFilmDimensions); if (film_dimensions[0] <= 0.0 || film_dimensions[1] <= 0.0) { RENDERER_LOG_ERROR( "while defining camera \"%s\": invalid value \"%f %f\" for parameter \"%s\", " "using default value \"%f %f\".", get_name(), film_dimensions[0], film_dimensions[1], "film_dimensions", DefaultFilmDimensions[0], DefaultFilmDimensions[1]); film_dimensions = DefaultFilmDimensions; } } return film_dimensions; }
double Camera::extract_f_stop() const { const double DefaultFStop = 8.0; return get_greater_than_zero("f_stop", DefaultFStop); }