use a single BoundingBox for both opaque+alpha chunk meshes combined

This commit is contained in:
Gered 2013-10-20 12:02:19 -04:00
parent 4c248d2fda
commit e506d13d21

View file

@ -31,8 +31,7 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
Mesh alphaMesh;
final Material opaqueMaterial = new Material();
final Material alphaMaterial = new Material();
final BoundingBox opaqueMeshBounds = new BoundingBox();
final BoundingBox alphaMeshBounds = new BoundingBox();
final BoundingBox meshBounds = new BoundingBox();
public final TileMap tileMap;
@ -98,6 +97,11 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
return tmpBounds;
}
public BoundingBox getMeshBounds() {
tmpBounds.set(meshBounds);
return tmpBounds;
}
public int getNumVertices() {
return opaqueMesh != null ? opaqueMesh.getNumVertices() : 0;
}
@ -137,21 +141,21 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
public void updateVertices(ChunkVertexGenerator generator) {
ChunkVertexGenerator.GeneratedChunkMeshes generatedMeshes = generator.generate(this);
meshBounds.clr();
if (generatedMeshes.opaqueMesh.getNumVertices() > 0) {
opaqueMesh = generatedMeshes.opaqueMesh;
opaqueMesh.calculateBoundingBox(opaqueMeshBounds);
} else {
opaqueMesh.calculateBoundingBox(tmpBounds);
meshBounds.ext(tmpBounds);
} else
opaqueMesh = null;
opaqueMeshBounds.clr();
}
if (generatedMeshes.alphaMesh.getNumVertices() > 0) {
alphaMesh = generatedMeshes.alphaMesh;
alphaMesh.calculateBoundingBox(alphaMeshBounds);
} else {
alphaMesh.calculateBoundingBox(tmpBounds);
meshBounds.ext(tmpBounds);
} else
alphaMesh = null;
alphaMeshBounds.clr();
}
}
public Tile getWithinSelfOrNeighbour(int x, int y, int z) {
@ -192,9 +196,9 @@ public class TileChunk extends TileContainer implements TileRawDataContainer, Re
@Override
public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool) {
if (opaqueMesh != null)
renderables.add(getRenderableFor(pool, opaqueMesh, opaqueMaterial, opaqueMeshBounds));
renderables.add(getRenderableFor(pool, opaqueMesh, opaqueMaterial, 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) {