mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 11:04:05 +09:00
more solid maths model of the cloud colouring
This commit is contained in:
@@ -21,7 +21,6 @@ import net.torvald.terrarum.gameworld.WorldTime.Companion.DAY_LENGTH
|
|||||||
import net.torvald.terrarum.RNGConsumer
|
import net.torvald.terrarum.RNGConsumer
|
||||||
import net.torvald.terrarum.clut.Skybox
|
import net.torvald.terrarum.clut.Skybox
|
||||||
import net.torvald.terrarum.clut.Skybox.elevCnt
|
import net.torvald.terrarum.clut.Skybox.elevCnt
|
||||||
import net.torvald.terrarum.spriteassembler.ADPropertyObject
|
|
||||||
import net.torvald.terrarum.utils.JsonFetcher
|
import net.torvald.terrarum.utils.JsonFetcher
|
||||||
import net.torvald.terrarum.utils.forEachSiblings
|
import net.torvald.terrarum.utils.forEachSiblings
|
||||||
import net.torvald.terrarum.weather.WeatherObjectCloud.Companion.ALPHA_ROLLOFF_Z
|
import net.torvald.terrarum.weather.WeatherObjectCloud.Companion.ALPHA_ROLLOFF_Z
|
||||||
@@ -563,17 +562,18 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
batch.color = Color.WHITE
|
batch.color = Color.WHITE
|
||||||
}
|
}
|
||||||
|
|
||||||
private val RECIPROCAL_OF_APPARENT_SOLAR_Y_AT_90DEG = 0.0000077
|
private val RECIPROCAL_OF_APPARENT_SOLAR_Y_AT_45DEG = 0.0000077
|
||||||
|
private val APPARENT_SOLAR_Y_AT_45DEG = 1.0 / RECIPROCAL_OF_APPARENT_SOLAR_Y_AT_45DEG
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mathematical model: https://www.desmos.com/calculator/8dsgigfoys
|
* Mathematical model: https://www.desmos.com/calculator/cf6wqwltqq
|
||||||
*/
|
*/
|
||||||
private fun cloudYtoSolarAlt(cloudY: Double, currentsolarDeg: Double): Double {
|
private fun cloudYtoSolarAlt(cloudY: Double, currentsolarDeg: Double): Double {
|
||||||
fun g(x: Double) = atan(RECIPROCAL_OF_APPARENT_SOLAR_Y_AT_90DEG * x) / Math.PI
|
fun a(x: Double) = APPARENT_SOLAR_Y_AT_45DEG * tan(Math.toRadians(x))
|
||||||
fun a(x: Double) = atan(0.0001 * x) / (0.5 * RECIPROCAL_OF_APPARENT_SOLAR_Y_AT_90DEG * Math.PI)
|
fun g(x: Double) = Math.toDegrees(atan(RECIPROCAL_OF_APPARENT_SOLAR_Y_AT_45DEG * x))
|
||||||
|
val phi = currentsolarDeg + CLOUD_SOLARDEG_OFFSET
|
||||||
val delta = (180.0 - 2.0 * currentsolarDeg).abs() * g(cloudY - a(currentsolarDeg.abs()))
|
val x = cloudY
|
||||||
return (currentsolarDeg + CLOUD_SOLARDEG_OFFSET + delta).bipolarClamp(Skybox.elevMax)
|
return g(x + a(phi)).bipolarClamp(Skybox.elevMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user