use a single BoundingBox for both opaque+alpha chunk meshes combined
This commit is contained in:
parent
4c248d2fda
commit
e506d13d21
|
@ -31,8 +31,7 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
|
||||||
Mesh alphaMesh;
|
Mesh alphaMesh;
|
||||||
final Material opaqueMaterial = new Material();
|
final Material opaqueMaterial = new Material();
|
||||||
final Material alphaMaterial = new Material();
|
final Material alphaMaterial = new Material();
|
||||||
final BoundingBox opaqueMeshBounds = new BoundingBox();
|
final BoundingBox meshBounds = new BoundingBox();
|
||||||
final BoundingBox alphaMeshBounds = new BoundingBox();
|
|
||||||
|
|
||||||
public final TileMap tileMap;
|
public final TileMap tileMap;
|
||||||
|
|
||||||
|
@ -98,6 +97,11 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
|
||||||
return tmpBounds;
|
return tmpBounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BoundingBox getMeshBounds() {
|
||||||
|
tmpBounds.set(meshBounds);
|
||||||
|
return tmpBounds;
|
||||||
|
}
|
||||||
|
|
||||||
public int getNumVertices() {
|
public int getNumVertices() {
|
||||||
return opaqueMesh != null ? opaqueMesh.getNumVertices() : 0;
|
return opaqueMesh != null ? opaqueMesh.getNumVertices() : 0;
|
||||||
}
|
}
|
||||||
|
@ -137,21 +141,21 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
|
||||||
public void updateVertices(ChunkVertexGenerator generator) {
|
public void updateVertices(ChunkVertexGenerator generator) {
|
||||||
ChunkVertexGenerator.GeneratedChunkMeshes generatedMeshes = generator.generate(this);
|
ChunkVertexGenerator.GeneratedChunkMeshes generatedMeshes = generator.generate(this);
|
||||||
|
|
||||||
|
meshBounds.clr();
|
||||||
|
|
||||||
if (generatedMeshes.opaqueMesh.getNumVertices() > 0) {
|
if (generatedMeshes.opaqueMesh.getNumVertices() > 0) {
|
||||||
opaqueMesh = generatedMeshes.opaqueMesh;
|
opaqueMesh = generatedMeshes.opaqueMesh;
|
||||||
opaqueMesh.calculateBoundingBox(opaqueMeshBounds);
|
opaqueMesh.calculateBoundingBox(tmpBounds);
|
||||||
} else {
|
meshBounds.ext(tmpBounds);
|
||||||
|
} else
|
||||||
opaqueMesh = null;
|
opaqueMesh = null;
|
||||||
opaqueMeshBounds.clr();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (generatedMeshes.alphaMesh.getNumVertices() > 0) {
|
if (generatedMeshes.alphaMesh.getNumVertices() > 0) {
|
||||||
alphaMesh = generatedMeshes.alphaMesh;
|
alphaMesh = generatedMeshes.alphaMesh;
|
||||||
alphaMesh.calculateBoundingBox(alphaMeshBounds);
|
alphaMesh.calculateBoundingBox(tmpBounds);
|
||||||
} else {
|
meshBounds.ext(tmpBounds);
|
||||||
|
} else
|
||||||
alphaMesh = null;
|
alphaMesh = null;
|
||||||
alphaMeshBounds.clr();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tile getWithinSelfOrNeighbour(int x, int y, int z) {
|
public Tile getWithinSelfOrNeighbour(int x, int y, int z) {
|
||||||
|
@ -192,9 +196,9 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
|
||||||
@Override
|
@Override
|
||||||
public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool) {
|
public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool) {
|
||||||
if (opaqueMesh != null)
|
if (opaqueMesh != null)
|
||||||
renderables.add(getRenderableFor(pool, opaqueMesh, opaqueMaterial, opaqueMeshBounds));
|
renderables.add(getRenderableFor(pool, opaqueMesh, opaqueMaterial, null));
|
||||||
if (alphaMesh != null)
|
if (alphaMesh != null)
|
||||||
renderables.add(getRenderableFor(pool, alphaMesh, alphaMaterial, alphaMeshBounds));
|
renderables.add(getRenderableFor(pool, alphaMesh, alphaMaterial, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Renderable getRenderableFor(Pool<Renderable> pool, Mesh mesh, Material material, Object userData) {
|
private Renderable getRenderableFor(Pool<Renderable> pool, Mesh mesh, Material material, Object userData) {
|
||||||
|
|
Loading…
Reference in a new issue