From 617a797743afae53a13f7ec670b55975e05de534 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 12 Nov 2021 16:45:44 -0500 Subject: [PATCH] Image maps working mostly --- .../com/volmit/iris/core/loader/IrisData.java | 5 +++- .../iris/core/project/SchemaBuilder.java | 2 +- .../engine/object/IrisGeneratorStyle.java | 2 +- .../volmit/iris/engine/object/IrisImage.java | 24 +++++++++++++++++++ .../iris/engine/object/IrisImageMap.java | 17 +++++++++---- .../volmit/iris/util/noise/ImageNoise.java | 2 +- 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/loader/IrisData.java b/src/main/java/com/volmit/iris/core/loader/IrisData.java index c29196199..9c837205c 100644 --- a/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -297,7 +297,10 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { rr.getTypeName()); } else if (registrant.equals(IrisScript.class)) { r = (ResourceLoader) new ScriptResourceLoader(dataFolder, this, rr.getFolderName(), - rr.getTypeName()); + rr.getTypeName()); + }else if (registrant.equals(IrisImage.class)) { + r = (ResourceLoader) new ImageResourceLoader(dataFolder, this, rr.getFolderName(), + rr.getTypeName()); } else { J.attempt(() -> registrant.getConstructor().newInstance().registerTypeAdapters(builder)); r = new ResourceLoader<>(dataFolder, this, rr.getFolderName(), rr.getTypeName(), registrant); diff --git a/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java b/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java index 7f9f75f41..c5aaca024 100644 --- a/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java +++ b/src/main/java/com/volmit/iris/core/project/SchemaBuilder.java @@ -675,7 +675,7 @@ public class SchemaBuilder { } if (!r.isPrimitive() && !r.equals(KList.class) && !r.equals(KMap.class) && r.getCanonicalName().startsWith("com.volmit.")) { - warnings.addIfMissing("Missing @Desc on " + r.getSimpleName() + " in " + r.getDeclaringClass().getCanonicalName()); + warnings.addIfMissing("Missing @Desc on " + r.getSimpleName() + " in " + (r.getDeclaringClass() != null ? r.getDeclaringClass().getCanonicalName() : " NOSRC")); } return ""; } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisGeneratorStyle.java b/src/main/java/com/volmit/iris/engine/object/IrisGeneratorStyle.java index 7caba6ea0..de0435ca7 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisGeneratorStyle.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisGeneratorStyle.java @@ -97,7 +97,7 @@ public class IrisGeneratorStyle { { CNG cng = new CNG(rng, new ImageNoise(data, getImageMap()), 1D, 1).bake().scale(1D/zoom).pow(exponent).bake(); cng.setTrueFracturing(axialFracturing); - + if (fracture != null) { cng.fractureWith(fracture.create(rng.nextParallelRNG(2934), data), fracture.getMultiplier()); } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisImage.java b/src/main/java/com/volmit/iris/engine/object/IrisImage.java index 431faf6c6..0ddf9c287 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisImage.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisImage.java @@ -18,12 +18,16 @@ package com.volmit.iris.engine.object; +import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisRegistrant; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.plugin.VolmitSender; +import javax.imageio.ImageIO; import java.awt.Color; import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; public class IrisImage extends IrisRegistrant { private BufferedImage image; @@ -125,4 +129,24 @@ public class IrisImage extends IrisRegistrant { public void scanForErrors(JSONObject p, VolmitSender sender) { } + + public void writeDebug(IrisImageChannel channel) { + + + try { + File at = new File(getLoadFile().getParentFile(), "debug-see-" + getLoadFile().getName()); + BufferedImage b = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); + for(int i = 0; i < getWidth(); i++) + { + for(int j = 0; j < getHeight(); j++) + { + b.setRGB(i, j, Color.getHSBColor(0, 0, (float) getValue(channel, i, j)).getRGB()); + } + } + ImageIO.write(b, "png", at); + Iris.warn("Debug image written to " + at.getPath() + " for channel " + channel.name()); + } catch(IOException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisImageMap.java b/src/main/java/com/volmit/iris/engine/object/IrisImageMap.java index 57b2961d2..08bb0d058 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisImageMap.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisImageMap.java @@ -20,6 +20,7 @@ package com.volmit.iris.engine.object; import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.core.project.SchemaBuilder; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.mantle.MantleWriter; @@ -43,7 +44,7 @@ import lombok.experimental.Accessors; @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor -@Desc("Represents a carving configuration") +@Desc("Represents an image map") @Data public class IrisImageMap { @RegistryListResource(IrisImage.class) @@ -69,11 +70,19 @@ public class IrisImageMap { @Desc("Center 0,0 to the center of the image instead of the top left.") private boolean centered = true; - private AtomicCache imageCache = new AtomicCache(); + private transient AtomicCache imageCache = new AtomicCache(); public double getNoise(IrisData data, int x, int z) { - IrisImage i = imageCache.aquire(() -> data.getImageLoader().load(image)); + IrisImage i = imageCache.aquire(() -> { + IrisImage ii = data.getImageLoader().load(image); + return ii; + }); + if(i == null) + { + Iris.error("NULL IMAGE FOR " + image); + } + return IrisInterpolation.getNoise(interpolationMethod, x, z, coordinateScale, (xx,zz) -> rawNoise(i, xx, zz)); } @@ -85,7 +94,7 @@ public class IrisImageMap { z = isTiled() ? z % i.getHeight() : z; x = isCentered() ? x + ((i.getWidth() / 2D) * coordinateScale) : x; z = isCentered() ? z + ((i.getHeight() / 2D) * coordinateScale) : z; - double v = i.getValue(getChannel(), (int)(x/coordinateScale), (int)(z/coordinateScale)); + double v = i.getValue(getChannel(), (int)x, (int)z); return isInverted() ? 1D - v : v; } } diff --git a/src/main/java/com/volmit/iris/util/noise/ImageNoise.java b/src/main/java/com/volmit/iris/util/noise/ImageNoise.java index 138e53c5c..4b7603000 100644 --- a/src/main/java/com/volmit/iris/util/noise/ImageNoise.java +++ b/src/main/java/com/volmit/iris/util/noise/ImageNoise.java @@ -44,6 +44,6 @@ public class ImageNoise implements NoiseGenerator { @Override public double noise(double x, double y, double z) { - return noise(x, y, 0); + return noise(x, z + y); } }