diff options
author | Niffe <petrovnik01@ukr.net> | 2024-03-01 00:03:19 +0200 |
---|---|---|
committer | Niffe <petrovnik01@ukr.net> | 2024-03-01 18:28:13 +0200 |
commit | 4b4013e5c8201276cf26c8c1e68ac62a8e9b7449 (patch) | |
tree | 816732f7cf1d70cdb021c1103877fe386495f101 /source/rendering/StarEnvironmentPainter.cpp | |
parent | 3453819837f8f1bb1d439bb2df66386a9f35d80d (diff) |
Dynamic sun image
Also adds access to sun scale, ray color, and fixes sun rendering in front of satellites
Diffstat (limited to 'source/rendering/StarEnvironmentPainter.cpp')
-rw-r--r-- | source/rendering/StarEnvironmentPainter.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/source/rendering/StarEnvironmentPainter.cpp b/source/rendering/StarEnvironmentPainter.cpp index 7501f77..b5c514e 100644 --- a/source/rendering/StarEnvironmentPainter.cpp +++ b/source/rendering/StarEnvironmentPainter.cpp @@ -380,21 +380,27 @@ void EnvironmentPainter::drawRay(float pixelRatio, // Sum is used to vary the ray intensity based on sky color // Rays show up more on darker backgrounds, so this scales to remove that float sum = std::pow((color[0] + color[1]) * RayColorDependenceScale, RayColorDependenceLevel); + Vec3B rayColor; + if (sky.settings.queryBool("sun.dynamicImage.enabled", false) && !sky.skyParameters.sunType.empty()) + rayColor = jsonToVec3B(sky.settings.query("sun.dynamicImage.rayColors." + sky.skyParameters.sunType, sky.settings.query("sun.rayColor", JsonArray{RayColor[0], RayColor[1], RayColor[2]}))); + else + rayColor = jsonToVec3B(sky.settings.query("sun.rayColor", JsonArray{RayColor[0], RayColor[1], RayColor[2]})); + float sunScale = sky.settings.queryFloat("sun.scale", 1.0f); m_renderer->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), TexturePtr(), - RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * length, {}, Vec4B(RayColor, 0), 0.0f}, - RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * SunRadius * pixelRatio, + RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * length, {}, Vec4B(rayColor, 0), 0.0f}, + RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * SunRadius * sunScale * pixelRatio, {}, - Vec4B(RayColor, + Vec4B(rayColor, (int)(RayMinUnscaledAlpha + std::abs(m_rayPerlin.get(angle * 896 + time * 30) * RayUnscaledAlphaVariance)) * sum * alpha), 0.0f}, - RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * SunRadius * pixelRatio, + RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * SunRadius * sunScale * pixelRatio, {}, - Vec4B(RayColor, + Vec4B(rayColor, (int)(RayMinUnscaledAlpha + std::abs(m_rayPerlin.get(angle * 626 + time * 30) * RayUnscaledAlphaVariance)) * sum * alpha), 0.0f}, - RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * length, {}, Vec4B(RayColor, 0), 0.0f}); + RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * length, {}, Vec4B(rayColor, 0), 0.0f}); } void EnvironmentPainter::drawOrbiter(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky, SkyOrbiter const& orbiter) { |