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 package de.bixilon.minosoft.gui.rendering.camera
import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.data.world.World
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
object CameraDefinition { object CameraDefinition {
const val NEAR_PLANE = 0.01f 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) 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.kutil.avg.FloatAverage
import de.bixilon.minosoft.gui.rendering.RenderContext 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.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.CameraDefinition.NEAR_PLANE
import de.bixilon.minosoft.gui.rendering.camera.frustum.Frustum import de.bixilon.minosoft.gui.rendering.camera.frustum.Frustum
import de.bixilon.minosoft.gui.rendering.camera.shaking.CameraShaking 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) { private fun calculateProjectionMatrix(fov: Float, screenDimensions: Vec2 = context.window.sizef) {
val fog = camera.fogManager.state val fog = camera.fogManager.state
var far = FAR_PLANE var far = (connection.world.view.viewDistance + 1) * ProtocolDefinition.SECTION_LENGTH.toFloat()
if (fog.enabled) { if (fog.enabled) {
far = fog.end * (1.0f / 0.7f) + 2.0f // y axis is weighted differently far = fog.end * (1.0f / 0.7f) + 2.0f // y axis is weighted differently
} }