Skip to content

Commit bc2a3c5

Browse files
committed
Model viewer: .bsp: models:
working on fixing the origin
1 parent df37158 commit bc2a3c5

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

cake-model-viewer/src/main/kotlin/org/demoth/cake/modelviewer/BspLoader.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,22 @@ import java.nio.ByteBuffer
1818
private const val prefix = "/home/daniil/GameDev/quake/q2/quake2/baseq2/textures/"
1919

2020
class BspLoader {
21-
fun loadBspModelTextured(file: File): ModelInstance {
21+
fun loadBspModelTextured(file: File): List<ModelInstance> {
22+
val result = mutableListOf<ModelInstance>()
2223
val bsp = Bsp(ByteBuffer.wrap(file.readBytes()))
23-
24-
val modelBuilder = ModelBuilder()
25-
modelBuilder.begin()
24+
val palette = readPaletteFile(Gdx.files.internal("q2palette.bin").read())
2625

2726
// split all faces by texture name
2827

2928
bsp.models.forEach { model ->
29+
val modelBuilder = ModelBuilder()
30+
modelBuilder.begin()
31+
32+
3033
val modelFaces = (0..<model.faceCount).map { it + model.firstFace }.map { bsp.faces[it] }
3134

3235
val facesByTexture = modelFaces.groupBy { bsp.textures[it.textureInfoIndex].name }
3336

34-
val palette = readPaletteFile(Gdx.files.internal("q2palette.bin").read())
3537
facesByTexture.forEach { (textureName, faces) ->
3638
val walTexture = WAL(findFile(textureName).readBytes())
3739
val texture = Texture(WalTextureData(fromWal(walTexture, palette)))
@@ -87,9 +89,13 @@ class BspLoader {
8789

8890
}
8991

92+
val instance = ModelInstance(modelBuilder.end())
93+
val origin = (model.maxs - model.mins).times(0.5f)
94+
instance.transform.translate(origin.x, origin.y, origin.z)
95+
result.add(instance)
96+
9097
}
91-
val model = modelBuilder.end()
92-
return ModelInstance(model)
98+
return result
9399
}
94100

95101
private fun findFile(textureName: String): File {

cake-model-viewer/src/main/kotlin/org/demoth/cake/modelviewer/CakeModelViewer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class CakeModelViewer(val args: Array<String>) : ApplicationAdapter() {
6565
}
6666
"bsp" -> {
6767
// models.add(BspLoader().loadBSPModelWireFrame(file).transformQ2toLibgdx())
68-
models.add(BspLoader().loadBspModelTextured(file).transformQ2toLibgdx())
68+
models.addAll(BspLoader().loadBspModelTextured(file).map { it.transformQ2toLibgdx(); it })
6969
models.add(createOriginArrows(GRID_SIZE))
7070
models.add(createGrid(GRID_SIZE, GRID_DIVISIONS))
7171
}

qcommon/src/main/kotlin/jake2/qcommon/filesystem/bsp.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class Bsp(buffer: ByteBuffer) {
124124
mins = Vector3f(buffer.getFloat(), buffer.getFloat(), buffer.getFloat()),
125125
maxs = Vector3f(buffer.getFloat(), buffer.getFloat(), buffer.getFloat()),
126126
origin = Vector3f(buffer.getFloat(), buffer.getFloat(), buffer.getFloat()),
127-
head = buffer.getInt(),
127+
headNode = buffer.getInt(),
128128
firstFace = buffer.getInt(),
129129
faceCount = buffer.getInt()
130130
)
@@ -208,7 +208,7 @@ data class BspModel(
208208
val mins: Vector3f,
209209
val maxs: Vector3f,
210210
val origin: Vector3f,
211-
val head: Int,
211+
val headNode: Int,
212212
val firstFace: Int, // unsigned
213213
val faceCount: Int, // unsigned
214214
)

0 commit comments

Comments
 (0)