From dfa06ee8a7f9f18b6189552ead9673fd689b6d1b Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 4 Jul 2023 21:15:19 -0700 Subject: [PATCH] Remove octree check ignoring air intersections. Hack to make water octree not get confused since its now considering air. --- .../src/java/se/llbit/chunky/renderer/scene/Scene.java | 10 ++++++++-- chunky/src/java/se/llbit/math/Octree.java | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java b/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java index 5deefffcbf..0a42b262b4 100644 --- a/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java +++ b/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java @@ -725,12 +725,18 @@ private boolean worldIntersection(Ray ray) { } } else { r = new Ray(start); - r.setCurrentMaterial(start.getPrevMaterial(), start.getPrevData()); + Material mat = start.getPrevMaterial(); + int data = start.getPrevData(); + if (mat != Air.INSTANCE && !mat.isWater()) { + r.setCurrentMaterial(Air.INSTANCE, data); + } else { + r.setCurrentMaterial(mat, data); + } if (waterOctree.enterBlock(this, r, palette) && r.distance < ray.t) { ray.t = r.distance; ray.setNormal(r.getNormal()); ray.color.set(r.color); - ray.setPrevMaterial(r.getPrevMaterial(), r.getPrevData()); + ray.setPrevMaterial(mat, r.getPrevData()); ray.setCurrentMaterial(r.getCurrentMaterial(), r.getCurrentData()); hit = true; } diff --git a/chunky/src/java/se/llbit/math/Octree.java b/chunky/src/java/se/llbit/math/Octree.java index 3243d9d725..221d06e626 100644 --- a/chunky/src/java/se/llbit/math/Octree.java +++ b/chunky/src/java/se/llbit/math/Octree.java @@ -556,7 +556,7 @@ public boolean enterBlock(Scene scene, Ray ray, BlockPalette palette) { offsetZ = -ray.o.z * invDz; continue; } - } else if (!currentBlock.isSameMaterial(prevBlock) && currentBlock != Air.INSTANCE) { + } else if (!currentBlock.isSameMaterial(prevBlock)) { // Origin and distance of ray need to be updated ray.o.scaleAdd(distance, ray.d); ray.distance += distance;