From 817591076eb383e980bf028fb1a3f05d59c91e43 Mon Sep 17 00:00:00 2001 From: "bre..ns" Date: Fri, 16 Dec 2011 17:29:15 +0000 Subject: [PATCH] removed the remaining awt dependencies from terrain grid and its utils git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8939 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../terrain/com/jme3/terrain/MapUtils.java | 61 ---------- .../geomipmap/grid/FractalTileLoader.java | 99 +++++++--------- .../heightmap/FractalHeightMapGrid.java | 107 ------------------ .../heightmap/Grayscale16BitHeightMap.java | 96 ---------------- .../heightmap/ImageBasedHeightMapGrid.java | 1 - .../terrain/TerrainFractalGridTest.java | 2 +- .../terrain/TerrainGridAlphaMapTest.java | 4 +- .../terrain/TerrainTestModifyHeight.java | 5 +- 8 files changed, 48 insertions(+), 327 deletions(-) delete mode 100644 engine/src/terrain/com/jme3/terrain/MapUtils.java delete mode 100644 engine/src/terrain/com/jme3/terrain/heightmap/FractalHeightMapGrid.java delete mode 100644 engine/src/terrain/com/jme3/terrain/heightmap/Grayscale16BitHeightMap.java diff --git a/engine/src/terrain/com/jme3/terrain/MapUtils.java b/engine/src/terrain/com/jme3/terrain/MapUtils.java deleted file mode 100644 index df5804357..000000000 --- a/engine/src/terrain/com/jme3/terrain/MapUtils.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.jme3.terrain; - -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.nio.FloatBuffer; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.imageio.ImageIO; -import org.novyon.noise.ShaderUtils; - -public class MapUtils { - - public static FloatBuffer clip(FloatBuffer src, int origSize, int newSize, int offset) { - FloatBuffer result = FloatBuffer.allocate(newSize * newSize); - - float[] orig = src.array(); - for (int i = offset; i < offset + newSize; i++) { - result.put(orig, i * origSize + offset, newSize); - } - - return result; - } - - public static BufferedImage toGrayscale16Image(FloatBuffer buff, int size) { - BufferedImage retval = new BufferedImage(size, size, BufferedImage.TYPE_USHORT_GRAY); - buff.rewind(); - for (int y = 0; y < size; y++) { - for (int x = 0; x < size; x++) { - short c = (short) (ShaderUtils.clamp(buff.get(), 0, 1) * 65532); - retval.getRaster().setDataElements(x, y, new short[]{c}); - } - } - return retval; - } - - public static BufferedImage toGrayscaleRGBImage(FloatBuffer buff, int size) { - BufferedImage retval = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB); - buff.rewind(); - for (int y = 0; y < size; y++) { - for (int x = 0; x < size; x++) { - int c = (int) (ShaderUtils.clamp(buff.get(), 0, 1) * 255); - retval.setRGB(x, y, 0xFF000000 | c << 16 | c << 8 | c); - } - } - return retval; - } - - public static void saveImage(BufferedImage im, String file) { - MapUtils.saveImage(im, new File(file)); - } - - public static void saveImage(BufferedImage im, File file) { - try { - ImageIO.write(im, "PNG", file); - Logger.getLogger(MapUtils.class.getCanonicalName()).log(Level.INFO, "Saved image as : {0}", file.getAbsolutePath()); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/engine/src/terrain/com/jme3/terrain/geomipmap/grid/FractalTileLoader.java b/engine/src/terrain/com/jme3/terrain/geomipmap/grid/FractalTileLoader.java index 8b5c85aff..4b2ed64e4 100644 --- a/engine/src/terrain/com/jme3/terrain/geomipmap/grid/FractalTileLoader.java +++ b/engine/src/terrain/com/jme3/terrain/geomipmap/grid/FractalTileLoader.java @@ -4,20 +4,17 @@ */ package com.jme3.terrain.geomipmap.grid; + +import com.jme3.asset.AssetManager; import com.jme3.export.JmeExporter; import com.jme3.export.JmeImporter; import com.jme3.math.Vector3f; -import com.jme3.terrain.MapUtils; import com.jme3.terrain.geomipmap.TerrainGridTileLoader; import com.jme3.terrain.geomipmap.TerrainQuad; import com.jme3.terrain.heightmap.AbstractHeightMap; -import com.jme3.terrain.heightmap.Grayscale16BitHeightMap; import com.jme3.terrain.heightmap.HeightMap; -import java.awt.image.BufferedImage; -import java.io.File; import java.io.IOException; import java.nio.FloatBuffer; -import javax.imageio.ImageIO; import org.novyon.noise.Basis; /** @@ -25,58 +22,46 @@ import org.novyon.noise.Basis; * @author Anthyon, normenhansen */ public class FractalTileLoader implements TerrainGridTileLoader{ - public class FloatBufferHeightMap extends AbstractHeightMap { - - private final FloatBuffer buffer; - - public FloatBufferHeightMap(FloatBuffer buffer) { - this.buffer = buffer; - } - - @Override - public boolean load() { - this.heightData = this.buffer.array(); - return true; - } - - } - - private int patchSize; - private int quadSize; - private final Basis base; - private final String cacheDir; - private final float heightScale; - - public FractalTileLoader(Basis base, String cacheDir, float heightScale) { - this.base = base; - this.cacheDir = cacheDir; - this.heightScale = heightScale; - } - - private HeightMap getHeightMapAt(Vector3f location) { - AbstractHeightMap heightmap = null; - if (this.cacheDir != null && new File(this.cacheDir, "terrain_" + (int) location.x + "_" + (int) location.z + ".png").exists()) { - try { - BufferedImage im = null; - im = ImageIO.read(new File(this.cacheDir, "terrain_" + (int) location.x + "_" + (int) location.z + ".png")); - heightmap = new Grayscale16BitHeightMap(im); - heightmap.setHeightScale(heightScale); - } catch (IOException e) {} - } else { - FloatBuffer buffer = this.base.getBuffer(location.x * (this.quadSize - 1), location.z * (this.quadSize - 1), 0, this.quadSize); - if (this.cacheDir != null) { - MapUtils.saveImage(MapUtils.toGrayscale16Image(buffer, this.quadSize), new File(this.cacheDir, "terrain_" + (int) location.x - + "_" + (int) location.z + ".png")); - } - float[] arr = buffer.array(); - for (int i = 0; i < arr.length; i++) { - arr[i] = arr[i] * this.heightScale; - } - heightmap = new FloatBufferHeightMap(buffer); - } - heightmap.load(); - return heightmap; - } + + public class FloatBufferHeightMap extends AbstractHeightMap { + + private final FloatBuffer buffer; + + public FloatBufferHeightMap(FloatBuffer buffer) { + this.buffer = buffer; + } + + @Override + public boolean load() { + this.heightData = this.buffer.array(); + return true; + } + + } + + private int patchSize; + private int quadSize; + private final Basis base; + private final float heightScale; + + public FractalTileLoader(Basis base, float heightScale) { + this.base = base; + this.heightScale = heightScale; + } + + private HeightMap getHeightMapAt(Vector3f location) { + AbstractHeightMap heightmap = null; + + FloatBuffer buffer = this.base.getBuffer(location.x * (this.quadSize - 1), location.z * (this.quadSize - 1), 0, this.quadSize); + + float[] arr = buffer.array(); + for (int i = 0; i < arr.length; i++) { + arr[i] = arr[i] * this.heightScale; + } + heightmap = new FloatBufferHeightMap(buffer); + heightmap.load(); + return heightmap; + } public TerrainQuad getTerrainQuadAt(Vector3f location) { HeightMap heightMapAt = getHeightMapAt(location); diff --git a/engine/src/terrain/com/jme3/terrain/heightmap/FractalHeightMapGrid.java b/engine/src/terrain/com/jme3/terrain/heightmap/FractalHeightMapGrid.java deleted file mode 100644 index 483bc5da4..000000000 --- a/engine/src/terrain/com/jme3/terrain/heightmap/FractalHeightMapGrid.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2009-2010 jMonkeyEngine - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'jMonkeyEngine' nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.jme3.terrain.heightmap; - -import com.jme3.math.Vector3f; -import com.jme3.terrain.MapUtils; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.nio.FloatBuffer; -import javax.imageio.ImageIO; -import org.novyon.noise.Basis; - -@Deprecated -/** - * @Deprecated in favor of FractalTileLoader - */ -public class FractalHeightMapGrid implements HeightMapGrid { - - public class FloatBufferHeightMap extends AbstractHeightMap { - - private final FloatBuffer buffer; - - public FloatBufferHeightMap(FloatBuffer buffer) { - this.buffer = buffer; - } - - @Override - public boolean load() { - this.heightData = this.buffer.array(); - return true; - } - - } - - private int size; - private final Basis base; - private final String cacheDir; - private final float heightScale; - - public FractalHeightMapGrid(Basis base, String cacheDir, float heightScale) { - this.base = base; - this.cacheDir = cacheDir; - this.heightScale = heightScale; - } - - @Override - public HeightMap getHeightMapAt(Vector3f location) { - AbstractHeightMap heightmap = null; - if (this.cacheDir != null && new File(this.cacheDir, "terrain_" + (int) location.x + "_" + (int) location.z + ".png").exists()) { - try { - BufferedImage im = null; - im = ImageIO.read(new File(this.cacheDir, "terrain_" + (int) location.x + "_" + (int) location.z + ".png")); - heightmap = new Grayscale16BitHeightMap(im); - heightmap.setHeightScale(heightScale); - } catch (IOException e) {} - } else { - FloatBuffer buffer = this.base.getBuffer(location.x * (this.size - 1), location.z * (this.size - 1), 0, this.size); - if (this.cacheDir != null) { - MapUtils.saveImage(MapUtils.toGrayscale16Image(buffer, this.size), new File(this.cacheDir, "terrain_" + (int) location.x - + "_" + (int) location.z + ".png")); - } - float[] arr = buffer.array(); - for (int i = 0; i < arr.length; i++) { - arr[i] = arr[i] * this.heightScale; - } - heightmap = new FloatBufferHeightMap(buffer); - } - heightmap.load(); - return heightmap; - } - - @Override - public void setSize(int size) { - this.size = size; - } - -} diff --git a/engine/src/terrain/com/jme3/terrain/heightmap/Grayscale16BitHeightMap.java b/engine/src/terrain/com/jme3/terrain/heightmap/Grayscale16BitHeightMap.java deleted file mode 100644 index 7c117fbce..000000000 --- a/engine/src/terrain/com/jme3/terrain/heightmap/Grayscale16BitHeightMap.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2009-2010 jMonkeyEngine - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'jMonkeyEngine' nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.jme3.terrain.heightmap; - -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.imageio.ImageIO; - -/** - * - * @author Anthyon - * @deprecated use assetManager instead - */ -public class Grayscale16BitHeightMap extends AbstractHeightMap { - - private BufferedImage image; - - public Grayscale16BitHeightMap() { - } - - public Grayscale16BitHeightMap(BufferedImage image) { - this.image = image; - } - - public Grayscale16BitHeightMap(String filename) { - this(new File(filename)); - } - - public Grayscale16BitHeightMap(File file) { - try { - this.image = ImageIO.read(file); - } catch (IOException ex) { - Logger.getLogger(Grayscale16BitHeightMap.class.getName()).log(Level.SEVERE, null, ex); - } - } - - @Override - public boolean load() { - return load(false, false); - } - - public boolean load(boolean flipX, boolean flipY) { - int imageWidth = image.getWidth(); - int imageHeight = image.getHeight(); - - if (imageWidth != imageHeight) { - throw new RuntimeException("imageWidth: " + imageWidth - + " != imageHeight: " + imageHeight); - } - - Object out = new short[imageWidth * imageHeight]; - out = image.getData().getDataElements(0, 0, imageWidth, imageHeight, out); - short[] values = (short[]) out; - heightData = new float[imageWidth * imageHeight]; - int i = 0; - for (int y = 0; y < imageHeight; y++) { - for (int x = 0; x < imageWidth; x++, i++) { - heightData[i] = heightScale * (values[i] & 0x0000FFFF) / 65536f; - } - } - - return true; - } -} diff --git a/engine/src/terrain/com/jme3/terrain/heightmap/ImageBasedHeightMapGrid.java b/engine/src/terrain/com/jme3/terrain/heightmap/ImageBasedHeightMapGrid.java index 6c12f3e4b..1ba5f3e64 100644 --- a/engine/src/terrain/com/jme3/terrain/heightmap/ImageBasedHeightMapGrid.java +++ b/engine/src/terrain/com/jme3/terrain/heightmap/ImageBasedHeightMapGrid.java @@ -9,7 +9,6 @@ import com.jme3.asset.AssetNotFoundException; import com.jme3.asset.TextureKey; import com.jme3.math.Vector3f; import com.jme3.texture.Texture; -import java.awt.image.BufferedImage; import java.util.logging.Level; import java.util.logging.Logger; diff --git a/engine/src/test/jme3test/terrain/TerrainFractalGridTest.java b/engine/src/test/jme3test/terrain/TerrainFractalGridTest.java index 9a2b503bc..60b6f07b6 100644 --- a/engine/src/test/jme3test/terrain/TerrainFractalGridTest.java +++ b/engine/src/test/jme3test/terrain/TerrainFractalGridTest.java @@ -121,7 +121,7 @@ public class TerrainFractalGridTest extends SimpleApplication { ground.addPreFilter(this.iterate); - this.terrain = new TerrainGrid("terrain", 33, 129, new FractalTileLoader(ground, null, 256f)); + this.terrain = new TerrainGrid("terrain", 33, 129, new FractalTileLoader(ground, 256f)); this.terrain.setMaterial(this.mat_terrain); this.terrain.setLocalTranslation(0, 0, 0); diff --git a/engine/src/test/jme3test/terrain/TerrainGridAlphaMapTest.java b/engine/src/test/jme3test/terrain/TerrainGridAlphaMapTest.java index 2cae145b9..9399f5f44 100644 --- a/engine/src/test/jme3test/terrain/TerrainGridAlphaMapTest.java +++ b/engine/src/test/jme3test/terrain/TerrainGridAlphaMapTest.java @@ -151,7 +151,7 @@ public class TerrainGridAlphaMapTest extends SimpleApplication { ground.addPreFilter(this.iterate); - this.terrain = new TerrainGrid("terrain", 33, 257, new FractalTileLoader(ground, null, 256)); + this.terrain = new TerrainGrid("terrain", 33, 257, new FractalTileLoader(ground, 256)); this.terrain.setMaterial(this.material); this.terrain.setLocalTranslation(0, 0, 0); @@ -170,7 +170,7 @@ public class TerrainGridAlphaMapTest extends SimpleApplication { this.getCamera().setLocation(new Vector3f(0, 256, 0)); - //this.viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f)); + this.viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f)); if (usePhysics) { CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(0.5f, 1.8f, 1); diff --git a/engine/src/test/jme3test/terrain/TerrainTestModifyHeight.java b/engine/src/test/jme3test/terrain/TerrainTestModifyHeight.java index 7996f8e93..ef608f7b2 100644 --- a/engine/src/test/jme3test/terrain/TerrainTestModifyHeight.java +++ b/engine/src/test/jme3test/terrain/TerrainTestModifyHeight.java @@ -54,9 +54,9 @@ import com.jme3.scene.shape.Sphere; import com.jme3.terrain.geomipmap.TerrainGrid; import com.jme3.terrain.geomipmap.TerrainLodControl; import com.jme3.terrain.geomipmap.TerrainQuad; +import com.jme3.terrain.geomipmap.grid.FractalTileLoader; import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; import com.jme3.terrain.heightmap.AbstractHeightMap; -import com.jme3.terrain.heightmap.FractalHeightMapGrid; import com.jme3.terrain.heightmap.ImageBasedHeightMap; import com.jme3.texture.Texture; import com.jme3.texture.Texture.WrapMode; @@ -280,6 +280,7 @@ public class TerrainTestModifyHeight extends SimpleApplication { matTerrain = new Material(assetManager, "Common/MatDefs/Terrain/TerrainLighting.j3md"); matTerrain.setBoolean("useTriPlanarMapping", false); matTerrain.setBoolean("WardIso", true); + matTerrain.setFloat("Shininess", 0); // ALPHA map (for splat textures) matTerrain.setTexture("AlphaMap", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png")); @@ -401,7 +402,7 @@ public class TerrainTestModifyHeight extends SimpleApplication { ground.addPreFilter(iterate); - this.terrain = new TerrainGrid("terrain", 65, 257, new FractalHeightMapGrid(ground, null, 256f)); + this.terrain = new TerrainGrid("terrain", 65, 257, new FractalTileLoader(ground, 256f)); terrain.setMaterial(matTerrain);