From 882e0dd78737c2be803732248545a70a1e9e0cd2 Mon Sep 17 00:00:00 2001 From: "C. J. Howard" Date: Thu, 27 May 2021 10:13:07 +0800 Subject: [PATCH] Improve angular radius calculation in astronomy system --- src/ecs/systems/astronomy-system.cpp | 4 ++-- src/physics/atmosphere.hpp | 4 ++-- src/renderer/passes/sky-pass.cpp | 8 ++++---- src/renderer/passes/sky-pass.hpp | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ecs/systems/astronomy-system.cpp b/src/ecs/systems/astronomy-system.cpp index 0b6ba8a..4ffed35 100644 --- a/src/ecs/systems/astronomy-system.cpp +++ b/src/ecs/systems/astronomy-system.cpp @@ -189,8 +189,8 @@ void astronomy_system::update(double t, double dt) this->sky_pass->set_sun_position(math::type_cast(blackbody_position_topocentric)); this->sky_pass->set_sun_color(math::type_cast(blackbody.color * blackbody_illuminance)); - float angular_radius = 2.0 * std::atan2(2.0 * blackbody.radius, 2.0 * blackbody_distance); - this->sky_pass->set_sun_angular_radius(angular_radius); + double blackbody_angular_radius = std::asin((blackbody.radius * 2.0) / (blackbody_distance * 2.0)); + this->sky_pass->set_sun_angular_radius(static_cast(blackbody_angular_radius)); } } }); diff --git a/src/physics/atmosphere.hpp b/src/physics/atmosphere.hpp index d433622..21448fc 100644 --- a/src/physics/atmosphere.hpp +++ b/src/physics/atmosphere.hpp @@ -48,8 +48,8 @@ T density(T d0, T z, T sh) /** * Calculates a particle polarization factor used in computing scattering coefficients. * - * @param ior Atmospheric index of refraction at sea level. - * @param density Molecular density at sea level. + * @param ior Atmospheric index of refraction. + * @param density Molecular density. * @return Polarization factor. * * @see Elek, Oskar. (2009). Rendering Parametrizable Planetary Atmospheres with Multiple Scattering in Real-Time. diff --git a/src/renderer/passes/sky-pass.cpp b/src/renderer/passes/sky-pass.cpp index 881dadb..79312c8 100644 --- a/src/renderer/passes/sky-pass.cpp +++ b/src/renderer/passes/sky-pass.cpp @@ -234,8 +234,8 @@ void sky_pass::render(render_context* context) const observer_altitude_input->upload(observer_altitude); if (sun_direction_input) sun_direction_input->upload(sun_direction); - if (cos_sun_angular_radius_input) - cos_sun_angular_radius_input->upload(cos_sun_angular_radius); + if (sun_angular_radius_input) + sun_angular_radius_input->upload(sun_angular_radius); if (sun_color_input) sun_color_input->upload(sun_color); if (scale_height_rm_input) @@ -347,7 +347,7 @@ void sky_pass::set_sky_model(const model* model) observer_altitude_input = sky_shader_program->get_input("observer_altitude"); sun_direction_input = sky_shader_program->get_input("sun_direction"); sun_color_input = sky_shader_program->get_input("sun_color"); - cos_sun_angular_radius_input = sky_shader_program->get_input("cos_sun_angular_radius"); + sun_angular_radius_input = sky_shader_program->get_input("sun_angular_radius"); scale_height_rm_input = sky_shader_program->get_input("scale_height_rm"); rayleigh_scattering_input = sky_shader_program->get_input("rayleigh_scattering"); mie_scattering_input = sky_shader_program->get_input("mie_scattering"); @@ -430,7 +430,7 @@ void sky_pass::set_sun_color(const float3& color) void sky_pass::set_sun_angular_radius(float radius) { - cos_sun_angular_radius = std::cos(radius); + sun_angular_radius = radius; } void sky_pass::set_observer_altitude(float altitude) diff --git a/src/renderer/passes/sky-pass.hpp b/src/renderer/passes/sky-pass.hpp index ce58dee..cdf8e52 100644 --- a/src/renderer/passes/sky-pass.hpp +++ b/src/renderer/passes/sky-pass.hpp @@ -80,7 +80,7 @@ private: const gl::shader_input* observer_altitude_input; const gl::shader_input* sun_direction_input; const gl::shader_input* sun_color_input; - const gl::shader_input* cos_sun_angular_radius_input; + const gl::shader_input* sun_angular_radius_input; const gl::shader_input* scale_height_rm_input; const gl::shader_input* rayleigh_scattering_input; const gl::shader_input* mie_scattering_input; @@ -128,7 +128,7 @@ private: tween topocentric_frame_translation; tween> topocentric_frame_rotation; - float cos_sun_angular_radius; + float sun_angular_radius; float2 scale_height_rm; float3 rayleigh_scattering; float3 mie_scattering;