From ecba02d533cd6d623188817132da05d645fbb95e Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Thu, 19 Oct 2023 19:18:28 +0200 Subject: [PATCH] fix some skeletal transformation bugs --- .../data/registries/blocks/properties/BlockProperties.kt | 2 +- .../minosoft/gui/rendering/skeletal/SkeletalManager.kt | 2 +- .../gui/rendering/skeletal/instance/SkeletalInstance.kt | 5 ++--- .../gui/rendering/skeletal/instance/TransformInstance.kt | 7 ++----- .../minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt | 2 +- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt index 0ed9c2947..77e8ea912 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/properties/BlockProperties.kt @@ -172,8 +172,8 @@ object BlockProperties { return Pair(property, property.parse(value)!!) } + @Deprecated("not block specific") private fun parseProperty(group: String, value: Any): Pair, Any> { - // TODO: block.properties val properties = PROPERTIES[group] ?: throw IllegalArgumentException("Can not find group: $group, expected value $value") var property: BlockProperty<*>? = null diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalManager.kt index 0958ac139..c9f718510 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalManager.kt @@ -48,7 +48,7 @@ class SkeletalManager( prepareDraw() shader.light = light - instance.transform.pack(uniformBuffer.buffer) + instance.transform.pack(uniformBuffer.buffer, instance.position) uniformBuffer.upload(0 until instance.model.transformCount * Mat4.length) instance.model.mesh.draw() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt index d0d14d36f..1ba059b14 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt @@ -29,6 +29,7 @@ class SkeletalInstance( val transform: TransformInstance, ) { val animation = AnimationManager(this) + var position = Mat4() var light = 0xFF @@ -47,11 +48,9 @@ class SkeletalInstance( } fun update(position: Vec3, rotation: Vec3) { - val matrix = Mat4() + this.position = Mat4() .translateAssign(position) .rotateRadAssign(rotation) - - transform.value(matrix) } fun update(position: Vec3d, rotation: Vec3) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/TransformInstance.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/TransformInstance.kt index 0c728b926..222a0567b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/TransformInstance.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/TransformInstance.kt @@ -25,9 +25,6 @@ class TransformInstance( ) { val value = Mat4() - fun pack(buffer: FloatBuffer) { - pack(buffer, Mat4()) - } fun reset() { this.value(Mat4.EMPTY_INSTANCE) @@ -37,8 +34,8 @@ class TransformInstance( } } - private fun pack(buffer: FloatBuffer, parent: Mat4) { - val value = value * parent + fun pack(buffer: FloatBuffer, parent: Mat4) { + val value = parent * value val offset = this.id * Mat4.length for (index in 0 until Mat4.length) { buffer.put(offset + index, value.array[index]) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt index 0c2fe508a..a044965c7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/vec/vec3/Vec3Util.kt @@ -59,7 +59,7 @@ object Vec3Util { get() = this.floor val Vec3.Companion.X: Vec3 get() = Vec3Util.X - val Vec3.Companion.Y: Vec3 get() = Vec3Util.X + val Vec3.Companion.Y: Vec3 get() = Vec3Util.Y val Vec3.Companion.Z: Vec3 get() = Vec3Util.Z