mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 18:34:56 -04:00
skeletal fixes
This commit is contained in:
parent
29abea74bb
commit
6a55f94424
@ -26,7 +26,6 @@ import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader
|
||||
import de.bixilon.minosoft.gui.rendering.models.loader.SkeletalLoader.Companion.bbModel
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||
import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3
|
||||
|
||||
class DoubleChestRenderer(
|
||||
val entity: StorageBlockEntity,
|
||||
@ -37,10 +36,14 @@ class DoubleChestRenderer(
|
||||
light: Int,
|
||||
) : StorageBlockEntityRenderer<StorageBlockEntity>(
|
||||
blockState,
|
||||
model.createInstance(context, (blockPosition - context.camera.offset.offset).toVec3, (blockState.getFacing()).rotation),
|
||||
model.createInstance(context),
|
||||
light,
|
||||
) {
|
||||
|
||||
init {
|
||||
skeletal?.update(blockPosition, blockState.getFacing())
|
||||
}
|
||||
|
||||
companion object {
|
||||
val DOUBLE_MODEL = minecraft("block/entities/double_chest").bbModel()
|
||||
private val named = arrayOf(minecraft("left"), minecraft("right"))
|
||||
|
@ -26,7 +26,6 @@ import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader
|
||||
import de.bixilon.minosoft.gui.rendering.models.loader.SkeletalLoader.Companion.sModel
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||
import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3
|
||||
|
||||
class SingleChestRenderer(
|
||||
val entity: StorageBlockEntity,
|
||||
@ -37,9 +36,12 @@ class SingleChestRenderer(
|
||||
light: Int,
|
||||
) : StorageBlockEntityRenderer<StorageBlockEntity>(
|
||||
blockState,
|
||||
model.createInstance(context, (blockPosition - context.camera.offset.offset).toVec3, blockState.getFacing().rotation),
|
||||
model.createInstance(context),
|
||||
light,
|
||||
) {
|
||||
init {
|
||||
skeletal?.update(blockPosition, blockState.getFacing())
|
||||
}
|
||||
|
||||
companion object {
|
||||
val SINGLE_MODEL = minecraft("block/entities/single_chest").sModel()
|
||||
|
@ -13,8 +13,10 @@
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.chunk.entities.renderer.storage
|
||||
|
||||
import de.bixilon.minosoft.data.direction.Directions
|
||||
import de.bixilon.minosoft.data.entities.block.container.storage.StorageBlockEntity
|
||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.chunk.entities.BlockEntityRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance
|
||||
|
@ -13,7 +13,6 @@
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.skeletal.baked
|
||||
|
||||
import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalMesh
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance
|
||||
@ -40,12 +39,9 @@ data class BakedSkeletalModel(
|
||||
}
|
||||
|
||||
|
||||
fun createInstance(context: RenderContext, position: Vec3, rotation: Vec3): SkeletalInstance {
|
||||
fun createInstance(context: RenderContext): SkeletalInstance {
|
||||
val transforms = this.transform.instance()
|
||||
|
||||
val instance = SkeletalInstance(context, this, transforms)
|
||||
instance.update(position, rotation)
|
||||
|
||||
return instance
|
||||
return SkeletalInstance(context, this, transforms)
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.skeletal.baked
|
||||
import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.kutil.collections.CollectionUtil.extend
|
||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.element.ModelElement.Companion.BLOCK_SIZE
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalVertexConsumer
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.model.elements.SkeletalElement
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.model.elements.SkeletalRotation
|
||||
@ -35,7 +36,7 @@ data class SkeletalBakeContext(
|
||||
) {
|
||||
|
||||
fun copy(element: SkeletalElement): SkeletalBakeContext {
|
||||
val offset = this.offset + (element.offset / 16.0f)
|
||||
val offset = this.offset + (element.offset / BLOCK_SIZE)
|
||||
val inflate = this.inflate + element.inflate
|
||||
val transparency = this.transparency && element.transparency
|
||||
val texture = element.texture ?: texture
|
||||
|
@ -15,6 +15,9 @@ package de.bixilon.minosoft.gui.rendering.skeletal.instance
|
||||
|
||||
import de.bixilon.kotlinglm.mat4x4.Mat4
|
||||
import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||
import de.bixilon.minosoft.data.direction.Directions
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.shader.Shader
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||
@ -42,9 +45,19 @@ class SkeletalInstance(
|
||||
|
||||
fun update(position: Vec3, rotation: Vec3) {
|
||||
val matrix = Mat4()
|
||||
.translateAssign(Vec3(position - context.camera.offset.offset))
|
||||
.translateAssign(position)
|
||||
.rotateRadAssign(rotation)
|
||||
|
||||
transform.value = matrix
|
||||
}
|
||||
|
||||
fun update(position: Vec3d, rotation: Vec3) {
|
||||
update(Vec3(position - context.camera.offset.offset), rotation)
|
||||
}
|
||||
|
||||
fun update(position: Vec3i, direction: Directions) {
|
||||
val position = Vec3(position - context.camera.offset.offset)
|
||||
position.x -= 0.5f; position.z -= 0.5f
|
||||
update(position, direction.rotation)
|
||||
}
|
||||
}
|
||||
|
@ -25,12 +25,17 @@ class TransformInstance(
|
||||
var value = Mat4()
|
||||
|
||||
fun pack(buffer: FloatBuffer) {
|
||||
pack(buffer, value)
|
||||
pack(buffer, Mat4())
|
||||
}
|
||||
|
||||
private fun pack(buffer: FloatBuffer, parent: Mat4) {
|
||||
val value = parent * value
|
||||
val value = value * parent
|
||||
val offset = this.id * Mat4.length
|
||||
buffer.put(value.array, offset, Mat4.length)
|
||||
for (index in 0 until Mat4.length) {
|
||||
buffer.put(offset + index, value.array[index])
|
||||
}
|
||||
for ((name, child) in children) {
|
||||
child.pack(buffer, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.minosoft.data.Axes
|
||||
import de.bixilon.minosoft.data.direction.Directions
|
||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.element.ModelElement.Companion.BLOCK_SIZE
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.element.face.FaceUV
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.legacy.ModelBakeUtil
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.SkeletalBakeContext
|
||||
@ -30,7 +31,7 @@ data class SkeletalFace(
|
||||
) {
|
||||
|
||||
fun bake(context: SkeletalBakeContext, direction: Directions, element: SkeletalElement, transform: Int) {
|
||||
val positions = direction.getPositions(context.offset + element.from - context.inflate, context.offset + element.to + context.inflate)
|
||||
val positions = direction.getPositions(context.offset + (element.from - context.inflate) / BLOCK_SIZE, context.offset + (element.to + context.inflate) / BLOCK_SIZE)
|
||||
|
||||
val texture = context.textures[texture ?: context.texture ?: throw IllegalStateException("element has no texture set!")] ?: throw IllegalStateException("Texture not found!")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user