From 74574b7952229cf69823f2facf6eb8e7890a658a Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Fri, 1 Mar 2024 20:31:24 +0100 Subject: [PATCH] camera matrices: always use dynamic far plane Now the far plane is always dynamically calculated according to the current view distance and not the maximum render distance. This should reduce precision loss artifacts and improve performance (the frustum now does view distance clipping) --- .../bixilon/minosoft/gui/rendering/camera/CameraDefinition.kt | 3 --- .../de/bixilon/minosoft/gui/rendering/camera/MatrixHandler.kt | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/CameraDefinition.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/CameraDefinition.kt index e85c9e7e4..6d707bc3d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/CameraDefinition.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/CameraDefinition.kt @@ -14,11 +14,8 @@ package de.bixilon.minosoft.gui.rendering.camera import de.bixilon.kotlinglm.vec3.Vec3 -import de.bixilon.minosoft.data.world.World -import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition object CameraDefinition { const val NEAR_PLANE = 0.01f - const val FAR_PLANE = World.MAX_RENDER_DISTANCE * ProtocolDefinition.SECTION_LENGTH.toFloat() val CAMERA_UP_VEC3 = Vec3(0.0f, 1.0f, 0.0f) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/MatrixHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/MatrixHandler.kt index 2bdeb4184..a8e00ca79 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/MatrixHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/MatrixHandler.kt @@ -22,7 +22,6 @@ import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kutil.avg.FloatAverage import de.bixilon.minosoft.gui.rendering.RenderContext import de.bixilon.minosoft.gui.rendering.camera.CameraDefinition.CAMERA_UP_VEC3 -import de.bixilon.minosoft.gui.rendering.camera.CameraDefinition.FAR_PLANE import de.bixilon.minosoft.gui.rendering.camera.CameraDefinition.NEAR_PLANE import de.bixilon.minosoft.gui.rendering.camera.frustum.Frustum import de.bixilon.minosoft.gui.rendering.camera.shaking.CameraShaking @@ -96,7 +95,7 @@ class MatrixHandler( private fun calculateProjectionMatrix(fov: Float, screenDimensions: Vec2 = context.window.sizef) { val fog = camera.fogManager.state - var far = FAR_PLANE + var far = (connection.world.view.viewDistance + 1) * ProtocolDefinition.SECTION_LENGTH.toFloat() if (fog.enabled) { far = fog.end * (1.0f / 0.7f) + 2.0f // y axis is weighted differently }