mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-19 04:15:14 -04:00
unify skeletal uv with block model uv
This commit is contained in:
parent
87b113fce9
commit
c9188da5c6
@ -16,3 +16,13 @@ Entity rendering is a quite hard topic.
|
||||
- BakedSkeletalModel (baked mesh)
|
||||
- SkeletalInstance (renders baked mesh, contains transform values)
|
||||
- Wrapper (indirectly accesses skeletal instance transforms)
|
||||
|
||||
## Model designing
|
||||
|
||||
### Block entities
|
||||
|
||||
Block entity models (e.g. chests) are always `facing`=`north` by default.
|
||||
|
||||
### Entities
|
||||
|
||||
Entities are always designed without any rotation (i.e. `yaw`=`0`)
|
||||
|
@ -13,14 +13,13 @@
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.skeletal
|
||||
|
||||
import de.bixilon.kotlinglm.vec2.Vec2
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.element.FaceVertexData
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.mesh.SkeletalConsumer
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderTexture
|
||||
|
||||
class DummySkeletalConsumer : SkeletalConsumer {
|
||||
|
||||
override fun addQuad(positions: FaceVertexData, uv: Array<Vec2>, transform: Int, texture: ShaderTexture) {
|
||||
override fun addQuad(positions: FaceVertexData, uv: FaceVertexData, transform: Int, texture: ShaderTexture) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
@ -13,11 +13,10 @@
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.skeletal.mesh
|
||||
|
||||
import de.bixilon.kotlinglm.vec2.Vec2
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.element.FaceVertexData
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderTexture
|
||||
|
||||
interface SkeletalConsumer {
|
||||
|
||||
fun addQuad(positions: FaceVertexData, uv: Array<Vec2>, transform: Int, texture: ShaderTexture)
|
||||
fun addQuad(positions: FaceVertexData, uv: FaceVertexData, transform: Int, texture: ShaderTexture)
|
||||
}
|
||||
|
@ -25,21 +25,20 @@ import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
|
||||
class SkeletalMesh(context: RenderContext, initialCacheSize: Int) : Mesh(context, SkeletalMeshStruct, initialCacheSize = initialCacheSize), SkeletalConsumer {
|
||||
override val order = context.system.quadOrder
|
||||
|
||||
private fun addVertex(position: FloatArray, offset: Int, transformedUV: Vec2, transform: Float, textureShaderId: Float) {
|
||||
private fun addVertex(position: FaceVertexData, positionOffset: Int, uv: FaceVertexData, uvOffset: Int, transform: Float, textureShaderId: Float) {
|
||||
data.add(
|
||||
position[offset + 0], position[offset + 1], position[offset + 2],
|
||||
position[positionOffset + 0], position[positionOffset + 1], position[positionOffset + 2],
|
||||
uv[uvOffset + 0], uv[uvOffset + 1],
|
||||
transform, textureShaderId
|
||||
)
|
||||
data.add(transformedUV.array)
|
||||
data.add(transform, textureShaderId)
|
||||
}
|
||||
|
||||
override fun addQuad(positions: FaceVertexData, uv: Array<Vec2>, transform: Int, texture: ShaderTexture) {
|
||||
override fun addQuad(positions: FaceVertexData, uv: FaceVertexData, transform: Int, texture: ShaderTexture) {
|
||||
val transform = transform.buffer()
|
||||
val textureShaderId = texture.shaderId.buffer()
|
||||
|
||||
order.iterate { position, uvIndex ->
|
||||
val transformedUV = texture.transformUV(uv[uvIndex])
|
||||
addVertex(positions, position * Vec3.length, transformedUV, transform, textureShaderId)
|
||||
addVertex(positions, position * Vec3.length, uv, uvIndex * Vec2.length, transform, textureShaderId)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,10 @@ data class SkeletalFace(
|
||||
|
||||
val texture = context.textures[texture ?: context.texture ?: throw IllegalStateException("Element has no texture set!")] ?: throw IllegalStateException("Texture not found!")
|
||||
|
||||
val texturePositions = getTexturePositions(uv.start / texture.properties.resolution, uv.end / texture.properties.resolution)
|
||||
val uv = FaceUV(
|
||||
texture.texture.transformUV(uv.start / texture.properties.resolution),
|
||||
texture.texture.transformUV(uv.end / texture.properties.resolution),
|
||||
).toArray(direction, 0)
|
||||
|
||||
|
||||
for (rotation in context.rotations) {
|
||||
@ -62,6 +65,6 @@ data class SkeletalFace(
|
||||
}
|
||||
}
|
||||
|
||||
context.consumer.addQuad(positions, texturePositions, transform, texture.texture)
|
||||
context.consumer.addQuad(positions, uv, transform, texture.texture)
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2021 Moritz Zwerger
|
||||
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex
|
||||
enum class PrimitiveTypes(val vertices: Int) {
|
||||
POINT(1),
|
||||
LINE(2),
|
||||
TRIANGLE(4),
|
||||
TRIANGLE(3),
|
||||
|
||||
@Deprecated("Removed in OpenGL 3.1+")
|
||||
QUAD(4),
|
||||
|
Loading…
x
Reference in New Issue
Block a user