diff options
author | Linnea Gräf <nea@nea.moe> | 2024-05-16 14:11:40 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-05-16 14:11:40 +0200 |
commit | a7a1e099d5c72041f7553fb7ae96bd5a73a5316c (patch) | |
tree | 02e269021d9b0f5d4ed0067a1c5ccf1aa5662413 | |
parent | d7d863f76d78b90179918222539fe4de05f7b44e (diff) | |
download | firmament-a7a1e099d5c72041f7553fb7ae96bd5a73a5316c.tar.gz firmament-a7a1e099d5c72041f7553fb7ae96bd5a73a5316c.tar.bz2 firmament-a7a1e099d5c72041f7553fb7ae96bd5a73a5316c.zip |
Improve line renderer
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/features/diana/AncestralSpadeSolver.kt | 2 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/util/render/RenderInWorldContext.kt | 50 |
2 files changed, 34 insertions, 18 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/features/diana/AncestralSpadeSolver.kt b/src/main/kotlin/moe/nea/firmament/features/diana/AncestralSpadeSolver.kt index e80ef92..fb7e8da 100644 --- a/src/main/kotlin/moe/nea/firmament/features/diana/AncestralSpadeSolver.kt +++ b/src/main/kotlin/moe/nea/firmament/features/diana/AncestralSpadeSolver.kt @@ -110,7 +110,7 @@ object AncestralSpadeSolver : SubscriptionOwner { } if (particlePositions.size > 2 && lastDing.passedTime() < 10.seconds && nextGuess != null) { color(0f, 1f, 0f, 0.7f) - line(*particlePositions.toTypedArray()) + line(particlePositions) } } } diff --git a/src/main/kotlin/moe/nea/firmament/util/render/RenderInWorldContext.kt b/src/main/kotlin/moe/nea/firmament/util/render/RenderInWorldContext.kt index d5fb464..750d8ac 100644 --- a/src/main/kotlin/moe/nea/firmament/util/render/RenderInWorldContext.kt +++ b/src/main/kotlin/moe/nea/firmament/util/render/RenderInWorldContext.kt @@ -151,12 +151,24 @@ class RenderInWorldContext private constructor( fun line(points: List<Vec3d>, lineWidth: Float = 10F) { RenderSystem.setShader(GameRenderer::getRenderTypeLinesProgram) - RenderSystem.lineWidth(lineWidth / pow(camera.pos.squaredDistanceTo(points.first()), 0.25).toFloat()) + RenderSystem.lineWidth(lineWidth) buffer.begin(VertexFormat.DrawMode.LINES, VertexFormats.LINES) buffer.fixedColor(255, 255, 255, 255) + val matrix = matrixStack.peek() + var lastNormal: Vector3f? = null points.zipWithNext().forEach { (a, b) -> - doLine(matrixStack.peek(), buffer, a.x, a.y, a.z, b.x, b.y, b.z) + val normal = Vector3f(b.x.toFloat(), b.y.toFloat(), b.z.toFloat()) + .sub(a.x.toFloat(), a.y.toFloat(), a.z.toFloat()) + .normalize() + val lastNormal0 = lastNormal ?: normal + lastNormal = normal + buffer.vertex(matrix.positionMatrix, a.x.toFloat(), a.y.toFloat(), a.z.toFloat()) + .normal(matrix, lastNormal0.x, lastNormal0.y, lastNormal0.z) + .next() + buffer.vertex(matrix.positionMatrix, b.x.toFloat(), b.y.toFloat(), b.z.toFloat()) + .normal(matrix, normal.x, normal.y, normal.z) + .next() } buffer.unfixColor() @@ -167,20 +179,22 @@ class RenderInWorldContext private constructor( private fun doLine( matrix: MatrixStack.Entry, buf: BufferBuilder, - i: Number, - j: Number, - k: Number, - x: Number, - y: Number, - z: Number + i: Float, + j: Float, + k: Float, + x: Float, + y: Float, + z: Float ) { - val normal = Vector3f(x.toFloat(), y.toFloat(), z.toFloat()) - .sub(i.toFloat(), j.toFloat(), k.toFloat()) + val normal = Vector3f(x, y, z) + .sub(i, j, k) .normalize() - buf.vertex(matrix.positionMatrix, i.toFloat(), j.toFloat(), k.toFloat()) - .normal(matrix, normal.x, normal.y, normal.z).next() - buf.vertex(matrix.positionMatrix, x.toFloat(), y.toFloat(), z.toFloat()) - .normal(matrix, normal.x, normal.y, normal.z).next() + buf.vertex(matrix.positionMatrix, i, j, k) + .normal(matrix, normal.x, normal.y, normal.z) + .next() + buf.vertex(matrix.positionMatrix, x, y, z) + .normal(matrix, normal.x, normal.y, normal.z) + .next() } @@ -190,9 +204,11 @@ class RenderInWorldContext private constructor( for (i in 0..1) { for (j in 0..1) { - doLine(matrix, buf, 0, i, j, 1, i, j) - doLine(matrix, buf, i, 0, j, i, 1, j) - doLine(matrix, buf, i, j, 0, i, j, 1) + val i = i.toFloat() + val j = j.toFloat() + doLine(matrix, buf, 0F, i, j, 1F, i, j) + doLine(matrix, buf, i, 0F, j, i, 1F, j) + doLine(matrix, buf, i, j, 0F, i, j, 1F) } } buf.unfixColor() |