159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.scene.plugins.blender.textures; 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.ColorRGBA; 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.FastMath; 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.Image.Format; 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.nio.ByteBuffer; 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.logging.Level; 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.logging.Logger; 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The class that stores the pixel values of a texture. 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Marcin Roguski (Kaelthas) 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class TexturePixel implements Cloneable { 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private static final Logger LOGGER = Logger.getLogger(TexturePixel.class.getName()); 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** The pixel data. */ 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float intensity, red, green, blue, alpha; 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copies the values from the given pixel. 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param pixel 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the pixel that we read from 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void fromPixel(TexturePixel pixel) { 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity = pixel.intensity; 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = pixel.red; 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = pixel.green; 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = pixel.blue; 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = pixel.alpha; 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copies the values from the given color. 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param colorRGBA 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color that we read from 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void fromColor(ColorRGBA colorRGBA) { 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = colorRGBA.r; 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = colorRGBA.g; 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = colorRGBA.b; 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = colorRGBA.a; 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copies the values from the given values. 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param a 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the alpha value 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param r 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the red value 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param g 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the green value 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param b 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the blue value 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void fromARGB8(float a, float r, float g, float b) { 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = a; 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = r; 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = g; 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = b; 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copies the values from the given integer that stores the ARGB8 data. 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param argb8 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the data stored in an integer 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void fromARGB8(int argb8) { 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta byte pixelValue = (byte) ((argb8 & 0xFF000000) >> 24); 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = (byte) ((argb8 & 0xFF0000) >> 16); 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = (byte) ((argb8 & 0xFF00) >> 8); 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = (byte) (argb8 & 0xFF); 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copies the data from the given image. 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param imageFormat 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the image format 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param data 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the image data 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param pixelIndex 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the index of the required pixel 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void fromImage(Format imageFormat, ByteBuffer data, int pixelIndex) { 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int firstByteIndex; 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta byte pixelValue; 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta switch (imageFormat) { 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case ABGR8: 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta firstByteIndex = pixelIndex << 2; 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex); 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 1); 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 2); 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 3); 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta break; 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGBA8: 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta firstByteIndex = pixelIndex << 2; 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex); 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 1); 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 2); 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 3); 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta break; 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case BGR8: 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta firstByteIndex = pixelIndex * 3; 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex); 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 1); 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 2); 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = 1.0f; 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta break; 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB8: 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta firstByteIndex = pixelIndex * 3; 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex); 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 1); 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(firstByteIndex + 2); 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = 1.0f; 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta break; 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case Luminance8: 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta pixelValue = data.get(pixelIndex); 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity = pixelValue >= 0 ? pixelValue / 255.0f : 1.0f - (~pixelValue) / 255.0f; 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta break; 14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta default: 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta LOGGER.log(Level.FINEST, "Unknown type of texture: {0}. Black pixel used!", imageFormat); 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity = this.blue = this.red = this.green = this.alpha = 0.0f; 14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Stores RGBA values in the given array. 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param result 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the array to store values 15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void toRGBA(float[] result) { 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[0] = this.red; 15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[1] = this.green; 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[2] = this.blue; 16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[3] = this.alpha; 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Stores the data in the given table. 16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param result 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the result table 16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void toRGBA8(byte[] result) { 17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[0] = (byte) (this.red * 255.0f); 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[1] = (byte) (this.green * 255.0f); 17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[2] = (byte) (this.blue * 255.0f); 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result[3] = (byte) (this.alpha * 255.0f); 17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Stores the pixel values in the integer. 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the integer that stores the pixel values 18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int toARGB8() { 18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int result = 0; 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int b = (int) (this.alpha * 255.0f); 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result |= b << 24; 18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = (int) (this.red * 255.0f); 18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result |= b << 16; 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = (int) (this.green * 255.0f); 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result |= b << 8; 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = (int) (this.blue * 255.0f); 19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta result |= b; 19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return result; 19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Merges two pixels (adds the values of each color). 19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param pixel 19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the pixel we merge with 19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void merge(TexturePixel pixel) { 20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float oneMinusAlpha = 1 - pixel.alpha; 20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = oneMinusAlpha * this.red + pixel.alpha * pixel.red; 20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = oneMinusAlpha * this.green + pixel.alpha * pixel.green; 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = oneMinusAlpha * this.blue + pixel.alpha * pixel.blue; 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // alpha should be always 1.0f as a result 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method negates the colors. 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void negate() { 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = 1.0f - this.red; 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = 1.0f - this.green; 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = 1.0f - this.blue; 21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = 1.0f - this.alpha; 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method clears the pixel values. 22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void clear() { 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity = this.blue = this.red = this.green = this.alpha = 0.0f; 22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method adds the calues of the given pixel to the current pixel. 22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param pixel 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the pixel we add 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void add(TexturePixel pixel) { 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red += pixel.red; 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green += pixel.green; 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue += pixel.blue; 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha += pixel.alpha; 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity += pixel.intensity; 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method multiplies the values of the given pixel by the given value. 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param value 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * multiplication factor 24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void mult(float value) { 24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red *= value; 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green *= value; 24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue *= value; 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha *= value; 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity *= value; 25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method divides the values of the given pixel by the given value. 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * ATTENTION! Beware of the zero value. This will cause you NaN's in the 25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * pixel values. 25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param value 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * division factor 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void divide(float value) { 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red /= value; 26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green /= value; 26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue /= value; 26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha /= value; 26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity /= value; 26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method clamps the pixel values to the given borders. 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param min 27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the minimum value 27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param max 27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the maximum value 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void clamp(float min, float max) { 27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.red = FastMath.clamp(this.red, min, max); 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.green = FastMath.clamp(this.green, min, max); 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blue = FastMath.clamp(this.blue, min, max); 28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.alpha = FastMath.clamp(this.alpha, min, max); 28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.intensity = FastMath.clamp(this.intensity, min, max); 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Object clone() throws CloneNotSupportedException { 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return super.clone(); 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public String toString() { 29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return "[" + red + ", " + green + ", " + blue + ", " + alpha + " {" + intensity + "}]"; 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 295