models: face texture rotation

This commit is contained in:
Bixilon 2023-03-24 15:02:46 +01:00
parent 82ae85e86b
commit d500febd27
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 11 additions and 12 deletions

View File

@ -58,11 +58,11 @@ object BakedModelTestUtil {
if (faces.size != 1) throw IllegalArgumentException("Model has more/less than once face!")
val face = faces.first()
Assert.assertEquals(face.positions, positions)
Assert.assertEquals(face.uv, uv)
Assert.assertEquals(face.shade, shade)
Assert.assertEquals(face.positions, positions, "Vertices mismatch")
Assert.assertEquals(face.uv, uv, "UV mismatch")
Assert.assertEquals(face.shade, shade, "Shade mismatch")
if (texture != null) {
Assert.assertEquals(face.texture.resourceLocation, texture.toResourceLocation().texture())
Assert.assertEquals(face.texture.resourceLocation, texture.toResourceLocation().texture(), "Texture mismatch")
}
}
}

View File

@ -73,10 +73,6 @@ class FaceRotationTest {
// we can use positions() here, because it is not rotated and already unit tested
baked.assertFace(Directions.DOWN, positions(Directions.DOWN, from, to), floatArrayOf(0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f), 0.5f)
baked.assertFace(Directions.UP, positions(Directions.UP, from, to), floatArrayOf(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f), 1.0f)
baked.assertFace(Directions.NORTH, positions(Directions.NORTH, from, to), floatArrayOf(1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f), 0.8f)
baked.assertFace(Directions.SOUTH, positions(Directions.SOUTH, from, to), floatArrayOf(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f), 0.8f)
baked.assertFace(Directions.WEST, positions(Directions.WEST, from, to), floatArrayOf(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f), 0.6f)
baked.assertFace(Directions.EAST, positions(Directions.EAST, from, to), floatArrayOf(1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f), 0.6f)
// TODO: other faces
}
}

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.models.block.element.face
import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.gui.rendering.models.block.element.ModelElement.Companion.BLOCK_SIZE
import de.bixilon.minosoft.gui.rendering.models.block.state.baked.BakingUtil.pushRight
data class FaceUV(
val start: Vec2,
@ -25,8 +26,8 @@ data class FaceUV(
constructor(u1: Int, v1: Int, u2: Int, v2: Int) : this(u1 / BLOCK_SIZE, v1 / BLOCK_SIZE, u2 / BLOCK_SIZE, v2 / BLOCK_SIZE)
fun toArray(direction: Directions): FloatArray {
return when (direction) {
fun toArray(direction: Directions, rotation: Int): FloatArray {
val floats = when (direction) {
// @formatter:off
Directions.DOWN,
Directions.SOUTH,
@ -36,5 +37,7 @@ data class FaceUV(
Directions.EAST -> floatArrayOf(end.x, start.y, start.x, start.y, start.x, end.y, end.x, end.y )
// @formatter:on
}
if (rotation == 0) return floats
return floats.pushRight(2, rotation)
}
}

View File

@ -55,7 +55,7 @@ data class SingleBlockStateApply(
val positions = positions(rotatedDirection, element.from, element.to)
var uv = face.uv.toArray(direction)
var uv = face.uv.toArray(direction, face.rotation)
if (y != 0 && !uvLock) {
uv = uv.pushRight(2, if (rotatedDirection.negative) -y else y)
}