Improve line renderer

This commit is contained in:
Linnea Gräf
2024-05-16 14:11:40 +02:00
parent d7d863f76d
commit a7a1e099d5
2 changed files with 34 additions and 18 deletions

View File

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

View File

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