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)
This commit is contained in:
Moritz Zwerger 2024-03-01 20:31:24 +01:00
parent 8829385e52
commit 74574b7952
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 1 additions and 5 deletions

View File

@ -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)
}

View File

@ -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
}