fix block meshgen algo bug
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
dae678f0c7
commit
72e329d855
@ -1355,6 +1355,7 @@ Fix TextureInstancedActor packing data texture incorrectly (column major instead
|
||||
Grass height variance with control from ui + file
|
||||
Fix block mesh ray casting bug due to trimesh overlap
|
||||
Fix block mesh samplers incorrectly buffering
|
||||
Fix block mesh gen algorithm merging quads incorrectly
|
||||
|
||||
|
||||
|
||||
|
||||
@ -208,7 +208,6 @@ public class TerrainProtocol implements ClientProtocolTemplate<TerrainMessage> {
|
||||
if(Globals.clientBlockManager.containsChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z, ChunkData.NO_STRIDE)){
|
||||
BlockChunkData data = Globals.clientBlockManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z, ChunkData.NO_STRIDE);
|
||||
if(data != null){
|
||||
System.out.println("Set " + message.getvoxelX() + " " + message.getvoxelY() + " " + message.getvoxelZ() + " to " + message.getblockType());
|
||||
data.setType(
|
||||
message.getvoxelX(),
|
||||
message.getvoxelY(),
|
||||
|
||||
@ -82,7 +82,7 @@ public class BlockMeshgen {
|
||||
currentQuad.h = y - currentQuad.y;
|
||||
//check if should merge with previous quad
|
||||
for(QuadMesh prevMesh : quadMeshes){
|
||||
if(prevMesh.x + prevMesh.w == currentQuad.x && prevMesh.y == currentQuad.y && prevMesh.h == currentQuad.h){
|
||||
if(prevMesh.x + prevMesh.w == currentQuad.x && prevMesh.y == currentQuad.y && prevMesh.h == currentQuad.h && prevMesh.z == currentQuad.z){
|
||||
prevMesh.w = prevMesh.w + 1;
|
||||
currentQuad = null;
|
||||
break;
|
||||
|
||||
@ -193,6 +193,47 @@ public class BlockMeshgenTests {
|
||||
assertEquals(0, quadMeshes.size());
|
||||
}
|
||||
|
||||
@UnitTest
|
||||
public void test_fillQuadMeshes_6(){
|
||||
//expected data
|
||||
QuadMesh[] expectedData = new QuadMesh[]{
|
||||
new QuadMesh(5,0,8,1,1,1),
|
||||
new QuadMesh(8,0,8,1,1,1),
|
||||
new QuadMesh(7,0,4,1,1,1),
|
||||
};
|
||||
|
||||
//setup data
|
||||
BlockChunkData chunkData = new BlockChunkData();
|
||||
short[] types = new short[BlockChunkData.CHUNK_DATA_WIDTH * BlockChunkData.CHUNK_DATA_WIDTH * BlockChunkData.CHUNK_DATA_WIDTH];
|
||||
chunkData.setType(types);
|
||||
chunkData.setType(5, 0, 8, (short)1);
|
||||
chunkData.setType(8, 0, 8, (short)1);
|
||||
chunkData.setType(7, 0, 4, (short)1);
|
||||
List<QuadMesh> quadMeshes = new LinkedList<QuadMesh>();
|
||||
|
||||
//call
|
||||
BlockMeshgen.fillQuadMeshes(quadMeshes, chunkData);
|
||||
|
||||
|
||||
//error check result
|
||||
assertEquals(expectedData.length, quadMeshes.size());
|
||||
|
||||
for(QuadMesh expected : expectedData){
|
||||
boolean found = false;
|
||||
for(QuadMesh actual : quadMeshes){
|
||||
if(expected.x == actual.x && expected.y == actual.y && expected.w == actual.w && expected.h == actual.h){
|
||||
found = true;
|
||||
assertEquals(expected.x, actual.x);
|
||||
assertEquals(expected.y, actual.y);
|
||||
assertEquals(expected.w, actual.w);
|
||||
assertEquals(expected.h, actual.h);
|
||||
break;
|
||||
}
|
||||
}
|
||||
assertEquals(true, found);
|
||||
}
|
||||
}
|
||||
|
||||
@UnitTest
|
||||
public void test_meshifyBox_verts(){
|
||||
//expected data
|
||||
|
||||
Loading…
Reference in New Issue
Block a user