rendering: wip sky color calculation

This commit is contained in:
Bixilon 2021-05-30 13:46:22 +02:00 committed by Lukas
parent 5fffa92e71
commit 1133d9dc9e
3 changed files with 13 additions and 14 deletions

View File

@ -118,6 +118,4 @@ abstract class LivingEntity(connection: PlayConnection, entityType: EntityType,
super.realTick() super.realTick()
tickStatusEffects() tickStatusEffects()
} }
} }

View File

@ -163,18 +163,18 @@ class Camera(
inChunkSectionPosition = blockPosition.inChunkSectionPosition inChunkSectionPosition = blockPosition.inChunkSectionPosition
// recalculate sky color for current biome // recalculate sky color for current biome
val skyRenderer = renderWindow[SkyRenderer] ?: return val skyRenderer = renderWindow[SkyRenderer] ?: return
skyRenderer.setSkyColor(connection.world.getBiome(blockPosition)?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR) skyRenderer.baseColor = connection.world.getBiome(blockPosition)?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR
frustum.recalculate() frustum.recalculate()
connection.fireEvent(FrustumChangeEvent(renderWindow, frustum)) connection.fireEvent(FrustumChangeEvent(renderWindow, frustum))
connection.world.dimension?.hasSkyLight?.let { connection.world.dimension?.hasSkyLight?.let {
if (it) { if (it) {
skyRenderer.setSkyColor(currentBiome?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR) skyRenderer.baseColor = currentBiome?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR
} else { } else {
skyRenderer.setSkyColor(RenderConstants.BLACK_COLOR) skyRenderer.baseColor = RenderConstants.BLACK_COLOR
} }
} ?: skyRenderer.setSkyColor(RenderConstants.DEFAULT_SKY_COLOR) } ?: let { skyRenderer.baseColor = RenderConstants.DEFAULT_SKY_COLOR }
connection.fireEvent(CameraPositionChangeEvent(renderWindow, cameraPosition)) connection.fireEvent(CameraPositionChangeEvent(renderWindow, cameraPosition))
} }

View File

@ -14,7 +14,6 @@
package de.bixilon.minosoft.gui.rendering.sky package de.bixilon.minosoft.gui.rendering.sky
import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.text.ChatColors
import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.RenderConstants
import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.RenderWindow
@ -50,8 +49,7 @@ class SkyRenderer(
private var skySunMesh = SimpleTextureMesh() private var skySunMesh = SimpleTextureMesh()
private lateinit var sunTexture: Texture private lateinit var sunTexture: Texture
private var recalculateSunNextFrame: Boolean = true private var recalculateSunNextFrame: Boolean = true
private var bottomColor = ChatColors.BLACK var baseColor = RenderConstants.DEFAULT_SKY_COLOR
private var topColor = RenderConstants.DEFAULT_SKY_COLOR
override fun init() { override fun init() {
@ -118,15 +116,17 @@ class SkyRenderer(
skySunMesh.draw() skySunMesh.draw()
} }
fun setSkyColor(color: RGBColor) { private fun checkSkyColor() {
topColor = color // ToDo: Calculate correct
bottomColor = RGBColor(color.red * 8 / 9, color.green * 8 / 9, color.blue * 8 / 9) val brightness = 1.0f
val topColor = RGBColor((baseColor.red * brightness).toInt(), (baseColor.green * brightness).toInt(), (baseColor.blue * brightness).toInt())
val bottomColor = RGBColor(topColor.red * 8 / 9, topColor.green * 8 / 9, topColor.blue * 8 / 9)
renderWindow.queue += { renderWindow.queue += {
updateSkyColor() updateSkyColor(topColor, bottomColor)
} }
} }
private fun updateSkyColor() { private fun updateSkyColor(topColor: RGBColor, bottomColor: RGBColor) {
skyboxShader.use() skyboxShader.use()
skyboxShader.setRGBColor("uBottomColor", bottomColor) skyboxShader.setRGBColor("uBottomColor", bottomColor)
@ -134,6 +134,7 @@ class SkyRenderer(
} }
private fun drawSkybox() { private fun drawSkybox() {
checkSkyColor()
skyboxShader.use() skyboxShader.use()
skyboxMesh.draw() skyboxMesh.draw()
} }