Strided terrain data
Some checks failed
studiorailgun/Renderer/pipeline/pr-master There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/pr-master There was a failure building this commit
This commit is contained in:
parent
4b8e4cb542
commit
c045c0a0d4
@ -548,48 +548,50 @@ public class ClientDrawCellManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
// if(highResFaces != null){
|
||||
// for(DrawCellFace highResFace : highResFaces){
|
||||
// //x & y are in face-space
|
||||
// for(int x = 0; x < 4; x++){
|
||||
// for(int y = 0; y < 4; y++){
|
||||
// Vector3i posToCheck = null;
|
||||
// //implicitly performing transforms to adapt from face-space to world space
|
||||
// switch(highResFace){
|
||||
// case X_POSITIVE: {
|
||||
// posToCheck = new Vector3i(cell.getWorldPos()).add(lodMultiplitier,x,y);
|
||||
// } break;
|
||||
// case X_NEGATIVE: {
|
||||
// posToCheck = new Vector3i(cell.getWorldPos()).add(-1,x,y);
|
||||
// } break;
|
||||
// case Y_POSITIVE: {
|
||||
// posToCheck = new Vector3i(cell.getWorldPos()).add(x,lodMultiplitier,y);
|
||||
// } break;
|
||||
// case Y_NEGATIVE: {
|
||||
// posToCheck = new Vector3i(cell.getWorldPos()).add(x,-1,y);
|
||||
// } break;
|
||||
// case Z_POSITIVE: {
|
||||
// posToCheck = new Vector3i(cell.getWorldPos()).add(x,y,lodMultiplitier);
|
||||
// } break;
|
||||
// case Z_NEGATIVE: {
|
||||
// posToCheck = new Vector3i(cell.getWorldPos()).add(x,y,-1);
|
||||
// } break;
|
||||
// }
|
||||
// if(
|
||||
// posToCheck.x >= 0 &&
|
||||
// posToCheck.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// posToCheck.y >= 0 &&
|
||||
// posToCheck.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// posToCheck.z >= 0 &&
|
||||
// posToCheck.z < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
// !Globals.clientTerrainManager.containsChunkDataAtWorldPoint(posToCheck.x, posToCheck.y, posToCheck.z, ChunkData.NO_STRIDE)
|
||||
// ){
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
int highResLod = this.chunkTree.getMaxLevel() - (node.getLevel() + 1);
|
||||
int highResSpacingFactor = (int)Math.pow(2,highResLod);
|
||||
if(highResFaces != null){
|
||||
for(DrawCellFace highResFace : highResFaces){
|
||||
//x & y are in face-space
|
||||
for(int x = 0; x < 3; x++){
|
||||
for(int y = 0; y < 3; y++){
|
||||
Vector3i posToCheck = null;
|
||||
//implicitly performing transforms to adapt from face-space to world space
|
||||
switch(highResFace){
|
||||
case X_POSITIVE: {
|
||||
posToCheck = new Vector3i(cell.getWorldPos()).add(spacingFactor,x*highResSpacingFactor,y*highResSpacingFactor);
|
||||
} break;
|
||||
case X_NEGATIVE: {
|
||||
posToCheck = new Vector3i(cell.getWorldPos()).add(0,x*highResSpacingFactor,y*highResSpacingFactor);
|
||||
} break;
|
||||
case Y_POSITIVE: {
|
||||
posToCheck = new Vector3i(cell.getWorldPos()).add(x*highResSpacingFactor,spacingFactor,y*highResSpacingFactor);
|
||||
} break;
|
||||
case Y_NEGATIVE: {
|
||||
posToCheck = new Vector3i(cell.getWorldPos()).add(x*highResSpacingFactor,0,y*highResSpacingFactor);
|
||||
} break;
|
||||
case Z_POSITIVE: {
|
||||
posToCheck = new Vector3i(cell.getWorldPos()).add(x*highResSpacingFactor,y*highResSpacingFactor,spacingFactor);
|
||||
} break;
|
||||
case Z_NEGATIVE: {
|
||||
posToCheck = new Vector3i(cell.getWorldPos()).add(x*highResSpacingFactor,y*highResSpacingFactor,0);
|
||||
} break;
|
||||
}
|
||||
if(
|
||||
posToCheck.x >= 0 &&
|
||||
posToCheck.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.y >= 0 &&
|
||||
posToCheck.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.z >= 0 &&
|
||||
posToCheck.z < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
!Globals.clientTerrainManager.containsChunkDataAtWorldPoint(posToCheck.x, posToCheck.y, posToCheck.z, highResLod)
|
||||
){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -12,7 +12,9 @@ import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.ClientEntityUtils;
|
||||
import electrosphere.entity.Entity;
|
||||
import electrosphere.entity.types.terrain.TerrainChunk;
|
||||
import electrosphere.renderer.meshgen.TransvoxelModelGeneration;
|
||||
import electrosphere.renderer.meshgen.TransvoxelModelGeneration.TransvoxelChunkData;
|
||||
import electrosphere.server.terrain.manager.ServerTerrainChunk;
|
||||
|
||||
/**
|
||||
* A single drawcell - contains an entity that has a physics mesh and potentially graphics
|
||||
@ -232,201 +234,202 @@ public class DrawCell {
|
||||
* @return true if successfully filled in data, false otherwise
|
||||
*/
|
||||
private boolean fillInFaceData(TransvoxelChunkData chunkData, DrawCellFace higherLODFace, int lod){
|
||||
// int mainSpacing = (int)Math.pow(2,lod);
|
||||
// int higherResSpacing = (int)Math.pow(2,lod - 1);
|
||||
// float[][] faceWeights = new float[TransvoxelModelGeneration.FACE_DATA_DIMENSIONS][TransvoxelModelGeneration.FACE_DATA_DIMENSIONS];
|
||||
// int[][] faceTypes = new int[TransvoxelModelGeneration.FACE_DATA_DIMENSIONS][TransvoxelModelGeneration.FACE_DATA_DIMENSIONS];
|
||||
// //allocate face array
|
||||
// for(int x = 0; x < TransvoxelModelGeneration.FACE_DATA_DIMENSIONS; x++){
|
||||
// for(int y = 0; y < TransvoxelModelGeneration.FACE_DATA_DIMENSIONS; y++){
|
||||
// int worldCoordOffset1 = (x * higherResSpacing) / ChunkData.CHUNK_SIZE;
|
||||
// int worldCoordOffset2 = (y * higherResSpacing) / ChunkData.CHUNK_SIZE;
|
||||
// //solve coordinates relative to the face
|
||||
// int localCoord1 = (x * higherResSpacing) % ChunkData.CHUNK_SIZE;
|
||||
// int localCoord2 = (y * higherResSpacing) % ChunkData.CHUNK_SIZE;
|
||||
int mainSpacing = (int)Math.pow(2,lod);
|
||||
int higherLOD = lod - 1;
|
||||
int higherResSpacing = (int)Math.pow(2,higherLOD);
|
||||
float[][] faceWeights = new float[TransvoxelModelGeneration.FACE_DATA_DIMENSIONS][TransvoxelModelGeneration.FACE_DATA_DIMENSIONS];
|
||||
int[][] faceTypes = new int[TransvoxelModelGeneration.FACE_DATA_DIMENSIONS][TransvoxelModelGeneration.FACE_DATA_DIMENSIONS];
|
||||
//allocate face array
|
||||
for(int x = 0; x < TransvoxelModelGeneration.FACE_DATA_DIMENSIONS; x++){
|
||||
for(int y = 0; y < TransvoxelModelGeneration.FACE_DATA_DIMENSIONS; y++){
|
||||
int worldCoordOffset1 = x / ChunkData.CHUNK_SIZE * higherResSpacing;
|
||||
int worldCoordOffset2 = y / ChunkData.CHUNK_SIZE * higherResSpacing;
|
||||
//solve coordinates relative to the face
|
||||
int localCoord1 = x % ChunkData.CHUNK_SIZE;
|
||||
int localCoord2 = y % ChunkData.CHUNK_SIZE;
|
||||
|
||||
// //implicitly performing transforms to adapt from face-space to world & local space
|
||||
// switch(higherLODFace){
|
||||
// case X_POSITIVE: {
|
||||
// ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
// new Vector3i(
|
||||
// worldPos.x + (17 * mainSpacing) / ChunkData.CHUNK_SIZE,
|
||||
// worldPos.y + worldCoordOffset1,
|
||||
// worldPos.z + worldCoordOffset2
|
||||
// ),
|
||||
// ChunkData.NO_STRIDE
|
||||
// );
|
||||
// if(currentChunk == null){
|
||||
// return false;
|
||||
// }
|
||||
// faceWeights[x][y] = currentChunk.getWeight(
|
||||
// 0,
|
||||
// localCoord1,
|
||||
// localCoord2
|
||||
// );
|
||||
// faceTypes[x][y] = currentChunk.getType(
|
||||
// 0,
|
||||
// localCoord1,
|
||||
// localCoord2
|
||||
// );
|
||||
// } break;
|
||||
// case X_NEGATIVE: {
|
||||
// ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
// new Vector3i(
|
||||
// worldPos.x,
|
||||
// worldPos.y + worldCoordOffset1,
|
||||
// worldPos.z + worldCoordOffset2
|
||||
// ),
|
||||
// ChunkData.NO_STRIDE
|
||||
// );
|
||||
// if(currentChunk == null){
|
||||
// return false;
|
||||
// }
|
||||
// faceWeights[x][y] = currentChunk.getWeight(
|
||||
// 0,
|
||||
// localCoord1,
|
||||
// localCoord2
|
||||
// );
|
||||
// faceTypes[x][y] = currentChunk.getType(
|
||||
// 0,
|
||||
// localCoord1,
|
||||
// localCoord2
|
||||
// );
|
||||
// } break;
|
||||
// case Y_POSITIVE: {
|
||||
// ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
// new Vector3i(
|
||||
// worldPos.x + worldCoordOffset1,
|
||||
// worldPos.y + (17 * mainSpacing) / ChunkData.CHUNK_SIZE,
|
||||
// worldPos.z + worldCoordOffset2
|
||||
// ),
|
||||
// ChunkData.NO_STRIDE
|
||||
// );
|
||||
// if(currentChunk == null){
|
||||
// return false;
|
||||
// }
|
||||
// faceWeights[x][y] = currentChunk.getWeight(
|
||||
// localCoord1,
|
||||
// 0,
|
||||
// localCoord2
|
||||
// );
|
||||
// faceTypes[x][y] = currentChunk.getType(
|
||||
// localCoord1,
|
||||
// 0,
|
||||
// localCoord2
|
||||
// );
|
||||
// } break;
|
||||
// case Y_NEGATIVE: {
|
||||
// ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
// new Vector3i(
|
||||
// worldPos.x + worldCoordOffset1,
|
||||
// worldPos.y,
|
||||
// worldPos.z + worldCoordOffset2
|
||||
// ),
|
||||
// ChunkData.NO_STRIDE
|
||||
// );
|
||||
// if(currentChunk == null){
|
||||
// return false;
|
||||
// }
|
||||
// faceWeights[x][y] = currentChunk.getWeight(
|
||||
// localCoord1,
|
||||
// 0,
|
||||
// localCoord2
|
||||
// );
|
||||
// faceTypes[x][y] = currentChunk.getType(
|
||||
// localCoord1,
|
||||
// 0,
|
||||
// localCoord2
|
||||
// );
|
||||
// } break;
|
||||
// case Z_POSITIVE: {
|
||||
// ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
// new Vector3i(
|
||||
// worldPos.x + worldCoordOffset1,
|
||||
// worldPos.y + worldCoordOffset2,
|
||||
// worldPos.z + (17 * mainSpacing) / ChunkData.CHUNK_SIZE
|
||||
// ),
|
||||
// ChunkData.NO_STRIDE
|
||||
// );
|
||||
// if(currentChunk == null){
|
||||
// return false;
|
||||
// }
|
||||
// faceWeights[x][y] = currentChunk.getWeight(
|
||||
// localCoord1,
|
||||
// localCoord2,
|
||||
// 0
|
||||
// );
|
||||
// faceTypes[x][y] = currentChunk.getType(
|
||||
// localCoord1,
|
||||
// localCoord2,
|
||||
// 0
|
||||
// );
|
||||
// } break;
|
||||
// case Z_NEGATIVE: {
|
||||
// ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
// new Vector3i(
|
||||
// worldPos.x + worldCoordOffset1,
|
||||
// worldPos.y + worldCoordOffset2,
|
||||
// worldPos.z
|
||||
// ),
|
||||
// ChunkData.NO_STRIDE
|
||||
// );
|
||||
// if(currentChunk == null){
|
||||
// return false;
|
||||
// }
|
||||
// faceWeights[x][y] = currentChunk.getWeight(
|
||||
// localCoord1,
|
||||
// localCoord2,
|
||||
// 0
|
||||
// );
|
||||
// faceTypes[x][y] = currentChunk.getType(
|
||||
// localCoord1,
|
||||
// localCoord2,
|
||||
// 0
|
||||
// );
|
||||
// } break;
|
||||
// }
|
||||
// // Vector3i sampleChunkWorldPos = new Vector3i(
|
||||
// // worldPos.x + (x * higherResSpacing) / ChunkData.CHUNK_SIZE,
|
||||
// // worldPos.y + (y * higherResSpacing) / ChunkData.CHUNK_SIZE,
|
||||
// // worldPos.z + (z * spacingFactor) / ChunkData.CHUNK_SIZE
|
||||
// // );
|
||||
// // ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(sampleChunkWorldPos);
|
||||
// // if(currentChunk == null){
|
||||
// // throw new Error("Chunk is null! " + worldPos);
|
||||
// // }
|
||||
// // weights[x][y][z] = currentChunk.getWeight(
|
||||
// // (x * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// // (y * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// // (z * spacingFactor) % ChunkData.CHUNK_SIZE
|
||||
// // );
|
||||
// // types[x][y][z] = currentChunk.getType(
|
||||
// // (x * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// // (y * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// // (z * spacingFactor) % ChunkData.CHUNK_SIZE
|
||||
// // );
|
||||
// }
|
||||
// }
|
||||
// switch(higherLODFace){
|
||||
// case X_POSITIVE: {
|
||||
// chunkData.addXPositiveEdge(faceWeights, faceTypes);
|
||||
// } break;
|
||||
// case X_NEGATIVE: {
|
||||
// chunkData.addXNegativeEdge(faceWeights, faceTypes);
|
||||
// } break;
|
||||
// case Y_POSITIVE: {
|
||||
// chunkData.addYPositiveEdge(faceWeights, faceTypes);
|
||||
// } break;
|
||||
// case Y_NEGATIVE: {
|
||||
// chunkData.addYNegativeEdge(faceWeights, faceTypes);
|
||||
// } break;
|
||||
// case Z_POSITIVE: {
|
||||
// chunkData.addZPositiveEdge(faceWeights, faceTypes);
|
||||
// } break;
|
||||
// case Z_NEGATIVE: {
|
||||
// chunkData.addZNegativeEdge(faceWeights, faceTypes);
|
||||
// } break;
|
||||
// }
|
||||
//implicitly performing transforms to adapt from face-space to world & local space
|
||||
switch(higherLODFace){
|
||||
case X_POSITIVE: {
|
||||
ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
new Vector3i(
|
||||
worldPos.x + mainSpacing,
|
||||
worldPos.y + worldCoordOffset1,
|
||||
worldPos.z + worldCoordOffset2
|
||||
),
|
||||
higherLOD
|
||||
);
|
||||
if(currentChunk == null){
|
||||
return false;
|
||||
}
|
||||
faceWeights[x][y] = currentChunk.getWeight(
|
||||
0,
|
||||
localCoord1,
|
||||
localCoord2
|
||||
);
|
||||
faceTypes[x][y] = currentChunk.getType(
|
||||
0,
|
||||
localCoord1,
|
||||
localCoord2
|
||||
);
|
||||
} break;
|
||||
case X_NEGATIVE: {
|
||||
ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
new Vector3i(
|
||||
worldPos.x,
|
||||
worldPos.y + worldCoordOffset1,
|
||||
worldPos.z + worldCoordOffset2
|
||||
),
|
||||
higherLOD
|
||||
);
|
||||
if(currentChunk == null){
|
||||
return false;
|
||||
}
|
||||
faceWeights[x][y] = currentChunk.getWeight(
|
||||
0,
|
||||
localCoord1,
|
||||
localCoord2
|
||||
);
|
||||
faceTypes[x][y] = currentChunk.getType(
|
||||
0,
|
||||
localCoord1,
|
||||
localCoord2
|
||||
);
|
||||
} break;
|
||||
case Y_POSITIVE: {
|
||||
ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
new Vector3i(
|
||||
worldPos.x + worldCoordOffset1,
|
||||
worldPos.y + mainSpacing,
|
||||
worldPos.z + worldCoordOffset2
|
||||
),
|
||||
higherLOD
|
||||
);
|
||||
if(currentChunk == null){
|
||||
return false;
|
||||
}
|
||||
faceWeights[x][y] = currentChunk.getWeight(
|
||||
localCoord1,
|
||||
0,
|
||||
localCoord2
|
||||
);
|
||||
faceTypes[x][y] = currentChunk.getType(
|
||||
localCoord1,
|
||||
0,
|
||||
localCoord2
|
||||
);
|
||||
} break;
|
||||
case Y_NEGATIVE: {
|
||||
ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
new Vector3i(
|
||||
worldPos.x + worldCoordOffset1,
|
||||
worldPos.y,
|
||||
worldPos.z + worldCoordOffset2
|
||||
),
|
||||
higherLOD
|
||||
);
|
||||
if(currentChunk == null){
|
||||
return false;
|
||||
}
|
||||
faceWeights[x][y] = currentChunk.getWeight(
|
||||
localCoord1,
|
||||
0,
|
||||
localCoord2
|
||||
);
|
||||
faceTypes[x][y] = currentChunk.getType(
|
||||
localCoord1,
|
||||
0,
|
||||
localCoord2
|
||||
);
|
||||
} break;
|
||||
case Z_POSITIVE: {
|
||||
ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
new Vector3i(
|
||||
worldPos.x + worldCoordOffset1,
|
||||
worldPos.y + worldCoordOffset2,
|
||||
worldPos.z + mainSpacing
|
||||
),
|
||||
higherLOD
|
||||
);
|
||||
if(currentChunk == null){
|
||||
return false;
|
||||
}
|
||||
faceWeights[x][y] = currentChunk.getWeight(
|
||||
localCoord1,
|
||||
localCoord2,
|
||||
0
|
||||
);
|
||||
faceTypes[x][y] = currentChunk.getType(
|
||||
localCoord1,
|
||||
localCoord2,
|
||||
0
|
||||
);
|
||||
} break;
|
||||
case Z_NEGATIVE: {
|
||||
ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(
|
||||
new Vector3i(
|
||||
worldPos.x + worldCoordOffset1,
|
||||
worldPos.y + worldCoordOffset2,
|
||||
worldPos.z
|
||||
),
|
||||
higherLOD
|
||||
);
|
||||
if(currentChunk == null){
|
||||
return false;
|
||||
}
|
||||
faceWeights[x][y] = currentChunk.getWeight(
|
||||
localCoord1,
|
||||
localCoord2,
|
||||
0
|
||||
);
|
||||
faceTypes[x][y] = currentChunk.getType(
|
||||
localCoord1,
|
||||
localCoord2,
|
||||
0
|
||||
);
|
||||
} break;
|
||||
}
|
||||
// Vector3i sampleChunkWorldPos = new Vector3i(
|
||||
// worldPos.x + (x * higherResSpacing) / ChunkData.CHUNK_SIZE,
|
||||
// worldPos.y + (y * higherResSpacing) / ChunkData.CHUNK_SIZE,
|
||||
// worldPos.z + (z * spacingFactor) / ChunkData.CHUNK_SIZE
|
||||
// );
|
||||
// ChunkData currentChunk = Globals.clientTerrainManager.getChunkDataAtWorldPoint(sampleChunkWorldPos);
|
||||
// if(currentChunk == null){
|
||||
// throw new Error("Chunk is null! " + worldPos);
|
||||
// }
|
||||
// weights[x][y][z] = currentChunk.getWeight(
|
||||
// (x * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// (y * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// (z * spacingFactor) % ChunkData.CHUNK_SIZE
|
||||
// );
|
||||
// types[x][y][z] = currentChunk.getType(
|
||||
// (x * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// (y * higherResSpacing) % ChunkData.CHUNK_SIZE,
|
||||
// (z * spacingFactor) % ChunkData.CHUNK_SIZE
|
||||
// );
|
||||
}
|
||||
}
|
||||
switch(higherLODFace){
|
||||
case X_POSITIVE: {
|
||||
chunkData.addXPositiveEdge(faceWeights, faceTypes);
|
||||
} break;
|
||||
case X_NEGATIVE: {
|
||||
chunkData.addXNegativeEdge(faceWeights, faceTypes);
|
||||
} break;
|
||||
case Y_POSITIVE: {
|
||||
chunkData.addYPositiveEdge(faceWeights, faceTypes);
|
||||
} break;
|
||||
case Y_NEGATIVE: {
|
||||
chunkData.addYNegativeEdge(faceWeights, faceTypes);
|
||||
} break;
|
||||
case Z_POSITIVE: {
|
||||
chunkData.addZPositiveEdge(faceWeights, faceTypes);
|
||||
} break;
|
||||
case Z_NEGATIVE: {
|
||||
chunkData.addZNegativeEdge(faceWeights, faceTypes);
|
||||
} break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -1335,7 +1335,7 @@ public class TransvoxelModelGeneration {
|
||||
chunkData.yNegativeEdgeAtlas[(x+0)*2+0][(z+0)*2+0], chunkData.yNegativeEdgeAtlas[(x+1)*2+0][(z+0)*2+0],
|
||||
chunkData.yNegativeEdgeAtlas[(x+0)*2+0][(z+1)*2+0], chunkData.yNegativeEdgeAtlas[(x+1)*2+0][(z+1)*2+0]
|
||||
);
|
||||
polygonizeTransition(currentTransitionCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, false);
|
||||
polygonizeTransition(currentTransitionCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, true);
|
||||
|
||||
//
|
||||
//Generate the normal cell with half width
|
||||
@ -1349,7 +1349,7 @@ public class TransvoxelModelGeneration {
|
||||
chunkData.yNegativeEdgeAtlas[(x+0)*2+0][(z+0)*2+0], chunkData.yNegativeEdgeAtlas[(x+0)*2+0][(z+1)*2+0], chunkData.yNegativeEdgeAtlas[(x+1)*2+0][(z+1)*2+0], chunkData.yNegativeEdgeAtlas[(x+1)*2+0][(z+0)*2+0]
|
||||
);
|
||||
//polygonize the current gridcell
|
||||
polygonize(currentCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, false);
|
||||
polygonize(currentCell, TerrainChunkModelGeneration.MIN_ISO_VALUE, triangles, samplerTriangles, vertMap, verts, normals, trianglesSharingVert, true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user