From 4f8d10db4c96301b7591adbe4a310e3bdde8e04d Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 22 Apr 2022 01:19:20 +0200 Subject: [PATCH] improve sign rendering --- .../minosoft/gui/rendering/font/CharData.kt | 2 +- .../font/renderer/ChatComponentRenderer.kt | 12 ++++++++---- .../renderer/sign/SignBlockEntityRenderer.kt | 15 +++++---------- .../preparer/cull/SolidCullSectionPreparer.kt | 2 +- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt index 62e6d8323..87d52124c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/CharData.kt @@ -144,7 +144,7 @@ class CharData( } override fun addCache(cache: GUIMeshCache) { - throw IllegalStateException() + throw IllegalStateException("This is not hud!") } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt index a4fe9d3bb..1c057f75f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/ChatComponentRenderer.kt @@ -57,18 +57,22 @@ interface ChatComponentRenderer { } fun render3dFlat(renderWindow: RenderWindow, position: Vec3, scale: Float, rotation: Vec3, mesh: WorldMesh, text: ChatComponent) { + val rotationMatrix = Mat4() + .rotateDegreesAssign(rotation) + .translateAssign(Vec3(0, 0, -1)) + val positionMatrix = Mat4() .translateAssign(position) - .rotateDegreesAssign(rotation) - val text = "abcdefghijkl" + val transformMatrix = positionMatrix * rotationMatrix + val text = "abcdefghijklmnop" for ((index, char) in text.codePoints().toArray().withIndex()) { val data = renderWindow.font[char] ?: continue val color = ChatColors[index % ChatColors.VALUES.size] - val width = data.render3d(positionMatrix, mesh, color, false, false, false, false, false, scale) + Font.HORIZONTAL_SPACING - positionMatrix.translateAssign(Vec3((width / TEXT_BLOCK_RESOLUTION) * scale, 0, 0)) + val width = data.render3d(transformMatrix, mesh, color, false, false, false, false, false, scale) + Font.HORIZONTAL_SPACING + transformMatrix.translateAssign(Vec3((width / TEXT_BLOCK_RESOLUTION) * scale, 0, 0)) } } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt index 841deefe6..930b7b465 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt @@ -43,17 +43,8 @@ class SignBlockEntityRenderer( println("Rendering wall sign at $position (${block.resourceLocation})") val rotation = this.blockState.properties[BlockProperties.FACING].nullCast() ?: Directions.NORTH - val yRotation = when (rotation) { - Directions.NORTH -> 0.0f - Directions.EAST -> 90.0f - Directions.SOUTH -> 180.0f - Directions.WEST -> 270.0f - else -> TODO() - } - - val rotationVector = Vec3(180.0f, yRotation, 180.0f) for ((index, line) in sign.lines.withIndex()) { - ChatComponentRenderer.render3dFlat(renderWindow, position.toVec3 + Vec3(0.95f, 0.75f - (index * 0.1f), 1.86f), 1.0f, rotationVector, mesh, line) + ChatComponentRenderer.render3dFlat(renderWindow, position.toVec3 + Vec3(PIXEL_SCALE * 5, 0.75f - (index * 0.11f), 0.126f), 1.2f, Vec3(0.0f, 0.0f, 0.0f), mesh, line) } } @@ -61,4 +52,8 @@ class SignBlockEntityRenderer( return true } + + companion object { + private const val PIXEL_SCALE = 1.0f / ChatComponentRenderer.TEXT_BLOCK_RESOLUTION + } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt index ef62d00b0..fed77fae0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt @@ -166,7 +166,7 @@ class SolidCullSectionPreparer( random.setSeed(0L) } tints = tintColorCalculator.getAverageTint(chunk, neighbourChunks, blockState, x, y, z) - rendered = false // rendered = model.singleRender(position, mesh, random, blockState, neighbourBlocks, light, ambientLight, tints) + rendered = model.singleRender(position, mesh, random, blockState, neighbourBlocks, light, ambientLight, tints) if (blockEntityModel is MeshedBlockEntityRenderer<*>) { rendered = blockEntityModel.singleRender(position, mesh, random, blockState, neighbourBlocks, light, ambientLight, tints) || rendered