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
|
Grass height variance with control from ui + file
|
||||||
Fix block mesh ray casting bug due to trimesh overlap
|
Fix block mesh ray casting bug due to trimesh overlap
|
||||||
Fix block mesh samplers incorrectly buffering
|
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)){
|
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);
|
BlockChunkData data = Globals.clientBlockManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z, ChunkData.NO_STRIDE);
|
||||||
if(data != null){
|
if(data != null){
|
||||||
System.out.println("Set " + message.getvoxelX() + " " + message.getvoxelY() + " " + message.getvoxelZ() + " to " + message.getblockType());
|
|
||||||
data.setType(
|
data.setType(
|
||||||
message.getvoxelX(),
|
message.getvoxelX(),
|
||||||
message.getvoxelY(),
|
message.getvoxelY(),
|
||||||
|
|||||||
@ -82,7 +82,7 @@ public class BlockMeshgen {
|
|||||||
currentQuad.h = y - currentQuad.y;
|
currentQuad.h = y - currentQuad.y;
|
||||||
//check if should merge with previous quad
|
//check if should merge with previous quad
|
||||||
for(QuadMesh prevMesh : quadMeshes){
|
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;
|
prevMesh.w = prevMesh.w + 1;
|
||||||
currentQuad = null;
|
currentQuad = null;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -193,6 +193,47 @@ public class BlockMeshgenTests {
|
|||||||
assertEquals(0, quadMeshes.size());
|
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
|
@UnitTest
|
||||||
public void test_meshifyBox_verts(){
|
public void test_meshifyBox_verts(){
|
||||||
//expected data
|
//expected data
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user