From bceab238d5da6e64efac2f126b67b9ab03dc65b2 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 11 Aug 2021 01:45:18 +0200 Subject: [PATCH 1/2] Small fix to the offset --- .../builders/lodNodeTemplates/CubicLodNodeTemplate.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/lodNodeTemplates/CubicLodNodeTemplate.java b/src/main/java/com/seibel/lod/builders/lodNodeTemplates/CubicLodNodeTemplate.java index 67d18f0da..52b1a3c30 100644 --- a/src/main/java/com/seibel/lod/builders/lodNodeTemplates/CubicLodNodeTemplate.java +++ b/src/main/java/com/seibel/lod/builders/lodNodeTemplates/CubicLodNodeTemplate.java @@ -71,8 +71,8 @@ public class CubicLodNodeTemplate extends AbstractLodNodeTemplate for(int i = 0; i < detail.dataPointLengthCount * detail.dataPointLengthCount; i++) { int startX = detail.startX[i]; int startZ = detail.startZ[i]; - int posX = LodUtil.convertLevelPos((int) xOffset+startX,0, detail.detailLevel); - int posZ = LodUtil.convertLevelPos((int) zOffset+startZ,0, detail.detailLevel);; + int posX = LodUtil.convertLevelPos((int) xOffset+startX-halfWidth,0, detail.detailLevel); + int posZ = LodUtil.convertLevelPos((int) zOffset+startZ-halfWidth,0, detail.detailLevel);; //LodQuadTreeNode newLod = chunkTree.getNodeAtPos(posX ,posZ ,detail.detailLevel); LodQuadTreeNode newLod = lodDim.getLodFromCoordinates(posX ,posZ ,detail.detailLevel); if(newLod != null) { @@ -80,9 +80,9 @@ public class CubicLodNodeTemplate extends AbstractLodNodeTemplate newLod.getLodDataPoint().height, newLod.getLodDataPoint().depth, newLod.width, - xOffset + startX, + xOffset + startX - halfWidth, yOffset, - zOffset + startZ); + zOffset + startZ - halfWidth); if (bbox != null) { addBoundingBoxToBuffer(buffer, bbox, newLod.getLodDataPoint().color); From 8cede4760e8cf4ecec4194a0450b2730ce43a326 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Wed, 11 Aug 2021 01:46:11 +0200 Subject: [PATCH 2/2] reduced quality to improve performance --- .../com/seibel/lod/builders/LodNodeBufferBuilder.java | 8 +++++--- src/main/java/com/seibel/lod/builders/LodNodeBuilder.java | 2 +- src/main/java/com/seibel/lod/objects/LodQuadTreeNode.java | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/LodNodeBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodNodeBufferBuilder.java index 3708f7108..fcfa737a2 100644 --- a/src/main/java/com/seibel/lod/builders/LodNodeBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodNodeBufferBuilder.java @@ -276,15 +276,17 @@ public class LodNodeBufferBuilder // add this LOD to the buffer int distance = (int) Math.sqrt(Math.pow((mc.player.getX() - lod.startBlockPos.getX()),2) + Math.pow((mc.player.getZ() - lod.startBlockPos.getZ()),2)); LodDetail detail; - if(distance < 200){ + /* + if(distance < 100){ detail = LodDetail.HALF; - }else if(distance < 400){ + }else */if(distance < 200){ detail = LodDetail.QUAD; - }else if(distance < 600){ + }else if(distance < 400){ detail = LodDetail.DOUBLE; }else{ detail = LodDetail.SINGLE; } + //detail = LodDetail.SINGLE; LodConfig.CLIENT.lodTemplate.get(). template.addLodToBuffer(currentBuffer, lodDim, lod, xOffset , yOffset, zOffset, renderer.debugging, detail); diff --git a/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java b/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java index 1b7503125..91418f7e7 100644 --- a/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodNodeBuilder.java @@ -131,7 +131,7 @@ public class LodNodeBuilder { * @throws IllegalArgumentException thrown if either the chunk or world is null. */ public List generateLodNodeFromChunk(IChunk chunk, LodBuilderConfig config) throws IllegalArgumentException { - LodDetail detail = LodDetail.HALF; + LodDetail detail = LodDetail.QUAD; List lodNodeList = new ArrayList<>(); if (chunk == null) throw new IllegalArgumentException("generateLodFromChunk given a null chunk"); diff --git a/src/main/java/com/seibel/lod/objects/LodQuadTreeNode.java b/src/main/java/com/seibel/lod/objects/LodQuadTreeNode.java index 55bf81e98..eb8c0e327 100644 --- a/src/main/java/com/seibel/lod/objects/LodQuadTreeNode.java +++ b/src/main/java/com/seibel/lod/objects/LodQuadTreeNode.java @@ -313,9 +313,9 @@ public class LodQuadTreeNode { // TODO would it be better to use the average height/depth? // get the lowest height from the all the given LodQuadTreeNodes - short height = (short) dataList.stream().mapToInt(x -> (int) x.getLodDataPoint().height).max().getAsInt(); + short height = (short) dataList.stream().mapToInt(x -> (int) x.getLodDataPoint().height).min().getAsInt(); // get the highest depth - short depth = (short) dataList.stream().mapToInt(x -> (int) x.getLodDataPoint().depth).min().getAsInt(); + short depth = (short) dataList.stream().mapToInt(x -> (int) x.getLodDataPoint().depth).max().getAsInt(); // get the average color int red = dataList.stream().mapToInt(x -> x.getLodDataPoint().color.getRed()).sum() / dataList.size();