Renderer/src/test/java/electrosphere/renderer/meshgen/BlockMeshgenTests.java
austin 1b1876643d
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
Asset manager queueing + cube voxel meshing
2024-11-23 21:29:21 -05:00

1098 lines
27 KiB
Java

package electrosphere.renderer.meshgen;
import static org.junit.jupiter.api.Assertions.*;
import java.util.LinkedList;
import java.util.List;
import org.joml.Vector2f;
import org.joml.Vector3f;
import electrosphere.client.block.BlockChunkData;
import electrosphere.renderer.meshgen.BlockMeshgen.BlockMeshData;
import electrosphere.renderer.meshgen.BlockMeshgen.QuadMesh;
import electrosphere.test.annotations.UnitTest;
/**
* Tests for block mesh generation
*/
public class BlockMeshgenTests {
/**
* If a normal vector has same length across all three axis, this will be the length
*/
static final float NORMAL_MULTIPLIER = 0.57735026f;
@UnitTest
public void test_fillQuadMeshes_1(){
//expected data
QuadMesh[] expectedData = new QuadMesh[]{
new QuadMesh(0,0,0,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(0, 0, 0, (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_fillQuadMeshes_2(){
//expected data
QuadMesh[] expectedData = new QuadMesh[]{
new QuadMesh(0,0,0,1,2),
};
//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(0, 0, 0, (short)1);
chunkData.setType(0, 1, 0, (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_fillQuadMeshes_3(){
//expected data
QuadMesh[] expectedData = new QuadMesh[]{
new QuadMesh(0,0,0,2,2),
};
//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(0, 0, 0, (short)1);
chunkData.setType(0, 1, 0, (short)1);
chunkData.setType(1, 0, 0, (short)1);
chunkData.setType(1, 1, 0, (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_fillQuadMeshes_4(){
//expected data
QuadMesh[] expectedData = new QuadMesh[]{
new QuadMesh(0,0,0,1,1),
new QuadMesh(0,2,0,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(0, 0, 0, (short)1);
chunkData.setType(0, 2, 0, (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_fillQuadMeshes_5(){
//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);
List<QuadMesh> quadMeshes = new LinkedList<QuadMesh>();
//call
BlockMeshgen.fillQuadMeshes(quadMeshes, chunkData);
//error check result
assertEquals(0, quadMeshes.size());
}
@UnitTest
public void test_meshifyBox_verts(){
//expected data
float[] expectedData = new float[]{
0,0,0,
1,0,0,
0,1,0,
1,1,0,
0,0,0,
0,0,1,
0,1,0,
0,1,1,
0,0,0,
0,0,1,
1,0,0,
1,0,1,
0,0,1,
1,0,1,
0,1,1,
1,1,1,
1,0,0,
1,0,1,
1,1,0,
1,1,1,
0,1,0,
0,1,1,
1,1,0,
1,1,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//setup data
List<Vector3f> verts = new LinkedList<Vector3f>();
List<Vector3f> normals = new LinkedList<Vector3f>();
List<Vector2f> uvs = new LinkedList<Vector2f>();
List<Integer> indices = new LinkedList<Integer>();
QuadMesh quad = new QuadMesh(0, 0, 0, 1, 1);
//call
BlockMeshgen.meshifyBox(verts, normals, uvs, indices, quad, 1);
//error check result
assertEquals(expectedData.length / 3, verts.size());
int i = 0;
for(Vector3f vert : verts){
assertEquals(expectedData[i + 0], vert.x);
assertEquals(expectedData[i + 1], vert.y);
assertEquals(expectedData[i + 2], vert.z);
i = i + 3;
}
}
@UnitTest
public void test_meshifyBox_normals(){
//expected data
float[] expectedData = new float[]{
0, 0,-1,
0, 0,-1,
0, 0,-1,
0, 0,-1,
-1, 0, 0,
-1, 0, 0,
-1, 0, 0,
-1, 0, 0,
0,-1, 0,
0,-1, 0,
0,-1, 0,
0,-1, 0,
0, 0, 1,
0, 0, 1,
0, 0, 1,
0, 0, 1,
1, 0, 0,
1, 0, 0,
1, 0, 0,
1, 0, 0,
0, 1, 0,
0, 1, 0,
0, 1, 0,
0, 1, 0,
};
//setup data
List<Vector3f> verts = new LinkedList<Vector3f>();
List<Vector3f> normals = new LinkedList<Vector3f>();
List<Vector2f> uvs = new LinkedList<Vector2f>();
List<Integer> indices = new LinkedList<Integer>();
QuadMesh quad = new QuadMesh(0, 0, 0, 1, 1);
//call
BlockMeshgen.meshifyBox(verts, normals, uvs, indices, quad, 1);
//error check result
assertEquals(expectedData.length / 3, normals.size());
int i = 0;
for(Vector3f normal : normals){
assertEquals(expectedData[i + 0], normal.x);
assertEquals(expectedData[i + 1], normal.y);
assertEquals(expectedData[i + 2], normal.z);
i = i + 3;
}
}
@UnitTest
public void test_meshifyBox_uvs(){
//expected data
float[] expectedData = new float[]{
0, 0,
1, 0,
0, 1,
1, 1,
0, 0,
1, 0,
0, 1,
1, 1,
0, 0,
1, 0,
0, 1,
1, 1,
0, 0,
1, 0,
0, 1,
1, 1,
0, 0,
1, 0,
0, 1,
1, 1,
0, 0,
1, 0,
0, 1,
1, 1,
};
//setup data
List<Vector3f> verts = new LinkedList<Vector3f>();
List<Vector3f> normals = new LinkedList<Vector3f>();
List<Vector2f> uvs = new LinkedList<Vector2f>();
List<Integer> indices = new LinkedList<Integer>();
QuadMesh quad = new QuadMesh(0, 0, 0, 1, 1);
//call
BlockMeshgen.meshifyBox(verts, normals, uvs, indices, quad, 1);
//error check result
assertEquals(expectedData.length / 2, uvs.size());
int i = 0;
for(Vector2f uv : uvs){
assertEquals(expectedData[i + 0], uv.x);
assertEquals(expectedData[i + 1], uv.y);
i = i + 2;
}
}
@UnitTest
public void test_rasterize_1(){
//expected data
float[] expectedData = new float[]{
0,0,0,
1,0,0,
0,1,0,
1,1,0,
0,0,0,
0,0,1,
0,1,0,
0,1,1,
0,0,0,
0,0,1,
1,0,0,
1,0,1,
0,0,1,
1,0,1,
0,1,1,
1,1,1,
1,0,0,
1,0,1,
1,1,0,
1,1,1,
0,1,0,
0,1,1,
1,1,0,
1,1,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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(0, 0, 0, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_2(){
//expected data
float[] expectedData = new float[]{
0,0,0,
1,0,0,
0,2,0,
1,2,0,
0,0,0,
0,0,1,
0,2,0,
0,2,1,
0,0,0,
0,0,1,
1,0,0,
1,0,1,
0,0,1,
1,0,1,
0,2,1,
1,2,1,
1,0,0,
1,0,1,
1,2,0,
1,2,1,
0,2,0,
0,2,1,
1,2,0,
1,2,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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(0, 0, 0, (short)1);
chunkData.setType(0, 1, 0, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_3(){
//expected data
float[] expectedData = new float[]{
0,0,0,
2,0,0,
0,2,0,
2,2,0,
0,0,0,
0,0,1,
0,2,0,
0,2,1,
0,0,0,
0,0,1,
2,0,0,
2,0,1,
0,0,1,
2,0,1,
0,2,1,
2,2,1,
2,0,0,
2,0,1,
2,2,0,
2,2,1,
0,2,0,
0,2,1,
2,2,0,
2,2,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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(0, 0, 0, (short)1);
chunkData.setType(0, 1, 0, (short)1);
chunkData.setType(1, 0, 0, (short)1);
chunkData.setType(1, 1, 0, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_4(){
//expected data
float[] expectedData = new float[]{
0,0,0,
2,0,0,
0,2,0,
2,2,0,
0,0,0,
0,0,2,
0,2,0,
0,2,2,
0,0,0,
0,0,2,
2,0,0,
2,0,2,
0,0,2,
2,0,2,
0,2,2,
2,2,2,
2,0,0,
2,0,2,
2,2,0,
2,2,2,
0,2,0,
0,2,2,
2,2,0,
2,2,2,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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(0, 0, 0, (short)1);
chunkData.setType(0, 1, 0, (short)1);
chunkData.setType(1, 0, 0, (short)1);
chunkData.setType(1, 1, 0, (short)1);
chunkData.setType(0, 0, 1, (short)1);
chunkData.setType(0, 1, 1, (short)1);
chunkData.setType(1, 0, 1, (short)1);
chunkData.setType(1, 1, 1, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_5(){
//expected data
float[] expectedData = new float[]{
//block 1
0,0,0,
1,0,0,
0,1,0,
1,1,0,
0,0,0,
0,0,1,
0,1,0,
0,1,1,
0,0,0,
0,0,1,
1,0,0,
1,0,1,
0,0,1,
1,0,1,
0,1,1,
1,1,1,
1,0,0,
1,0,1,
1,1,0,
1,1,1,
0,1,0,
0,1,1,
1,1,0,
1,1,1,
//block 2
0,2,0,
1,2,0,
0,3,0,
1,3,0,
0,2,0,
0,2,1,
0,3,0,
0,3,1,
0,2,0,
0,2,1,
1,2,0,
1,2,1,
0,2,1,
1,2,1,
0,3,1,
1,3,1,
1,2,0,
1,2,1,
1,3,0,
1,3,1,
0,3,0,
0,3,1,
1,3,0,
1,3,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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);
//block 1
chunkData.setType(0, 0, 0, (short)1);
//block 2
chunkData.setType(0, 2, 0, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_6(){
//expected data
float[] expectedData = new float[]{
//block 1
0,0,0,
1,0,0,
0,1,0,
1,1,0,
0,0,0,
0,0,1,
0,1,0,
0,1,1,
0,0,0,
0,0,1,
1,0,0,
1,0,1,
0,0,1,
1,0,1,
0,1,1,
1,1,1,
1,0,0,
1,0,1,
1,1,0,
1,1,1,
0,1,0,
0,1,1,
1,1,0,
1,1,1,
//block 2
0,0,2,
1,0,2,
0,1,2,
1,1,2,
0,0,2,
0,0,3,
0,1,2,
0,1,3,
0,0,2,
0,0,3,
1,0,2,
1,0,3,
0,0,3,
1,0,3,
0,1,3,
1,1,3,
1,0,2,
1,0,3,
1,1,2,
1,1,3,
0,1,2,
0,1,3,
1,1,2,
1,1,3,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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);
//block 1
chunkData.setType(0, 0, 0, (short)1);
//block 2
chunkData.setType(0, 0, 2, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_7(){
//expected data
float[] expectedData = new float[]{
//block 1
0,0,0,
1,0,0,
0,1,0,
1,1,0,
0,0,0,
0,0,1,
0,1,0,
0,1,1,
0,0,0,
0,0,1,
1,0,0,
1,0,1,
0,0,1,
1,0,1,
0,1,1,
1,1,1,
1,0,0,
1,0,1,
1,1,0,
1,1,1,
0,1,0,
0,1,1,
1,1,0,
1,1,1,
//block 2
2,0,0,
3,0,0,
2,1,0,
3,1,0,
2,0,0,
2,0,1,
2,1,0,
2,1,1,
2,0,0,
2,0,1,
3,0,0,
3,0,1,
2,0,1,
3,0,1,
2,1,1,
3,1,1,
3,0,0,
3,0,1,
3,1,0,
3,1,1,
2,1,0,
2,1,1,
3,1,0,
3,1,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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);
//block 1
chunkData.setType(0, 0, 0, (short)1);
//block 2
chunkData.setType(2, 0, 0, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_8(){
//expected data
float[] expectedData = new float[]{};
//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);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_9(){
//expected data
float[] expectedData = new float[]{
//block 1
0,0,0,
1,0,0,
0,2,0,
1,2,0,
0,0,0,
0,0,2,
0,2,0,
0,2,2,
0,0,0,
0,0,2,
1,0,0,
1,0,2,
0,0,2,
1,0,2,
0,2,2,
1,2,2,
1,0,0,
1,0,2,
1,2,0,
1,2,2,
0,2,0,
0,2,2,
1,2,0,
1,2,2,
//block 2
2,0,0,
3,0,0,
2,1,0,
3,1,0,
2,0,0,
2,0,1,
2,1,0,
2,1,1,
2,0,0,
2,0,1,
3,0,0,
3,0,1,
2,0,1,
3,0,1,
2,1,1,
3,1,1,
3,0,0,
3,0,1,
3,1,0,
3,1,1,
2,1,0,
2,1,1,
3,1,0,
3,1,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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);
//block 1
chunkData.setType(0, 0, 0, (short)1);
chunkData.setType(0, 1, 0, (short)1);
chunkData.setType(0, 1, 1, (short)1);
chunkData.setType(0, 0, 1, (short)1);
//block 2
chunkData.setType(2, 0, 0, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
@UnitTest
public void test_rasterize_10(){
//expected data
float[] expectedData = new float[]{
//block 1
0,0,0,
1,0,0,
0,2,0,
1,2,0,
0,0,0,
0,0,2,
0,2,0,
0,2,2,
0,0,0,
0,0,2,
1,0,0,
1,0,2,
0,0,2,
1,0,2,
0,2,2,
1,2,2,
1,0,0,
1,0,2,
1,2,0,
1,2,2,
0,2,0,
0,2,2,
1,2,0,
1,2,2,
//block 2
1,0,0,
2,0,0,
1,1,0,
2,1,0,
1,0,0,
1,0,1,
1,1,0,
1,1,1,
1,0,0,
1,0,1,
2,0,0,
2,0,1,
1,0,1,
2,0,1,
1,1,1,
2,1,1,
2,0,0,
2,0,1,
2,1,0,
2,1,1,
1,1,0,
1,1,1,
2,1,0,
2,1,1,
};
for(int i = 0; i < expectedData.length; i++){
expectedData[i] = expectedData[i] * BlockChunkData.BLOCK_SIZE_MULTIPLIER;
}
//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);
//block 1
chunkData.setType(0, 0, 0, (short)1);
chunkData.setType(0, 1, 0, (short)1);
chunkData.setType(0, 1, 1, (short)1);
chunkData.setType(0, 0, 1, (short)1);
//block 2
chunkData.setType(1, 0, 0, (short)1);
//call
BlockMeshData meshData = BlockMeshgen.rasterize(chunkData);
//error check result
assertEquals(expectedData.length, meshData.vertices.length);
for(int i = 0; i < expectedData.length; i++){
assertEquals(expectedData[i], meshData.vertices[i]);
}
}
}