/** * Make a donation http://sourceforge.net/donate/index.php?group_id=98797 * Microcrowd.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact Josh DeFord jdeford@microcrowd.com */ package com.microcrowd.loader.java3d.max3ds.chunks; import javax.vecmath.Color3f; import com.microcrowd.loader.java3d.max3ds.ChunkChopper; /** * Loads colors from binary data representing them. */ public class ColorChunk extends Chunk { protected int currentColorType; private static final int FLOAT_COLOR = 0x10; private static final int BYTE_COLOR = 0x11; private static final int BYTE_COLOR_GAMMA = 0x12; private static final int FLOAT_COLOR_GAMMA = 0x13; /** * Based on the color type retrieved * from {@link #getColorType} loads * an rgb or float color and pushes * it onto the chunk chopper. * * @param chopper the chopper that will store the color data. */ public void loadData(ChunkChopper chopper) { int colorType = getColorType(chopper); if (colorType == BYTE_COLOR) { float r = (chopper.getUnsignedByte()) / 255f; float g = (chopper.getUnsignedByte()) / 255f; float b = (chopper.getUnsignedByte()) / 255f; Color3f color = new Color3f(r, g, b); chopper.pushData(chopper.getID(), color); } else if (colorType == FLOAT_COLOR) { Color3f color = new Color3f(chopper.getFloat(), chopper.getFloat(), chopper.getFloat()); chopper.pushData(chopper.getID(), color); } else { throw new IllegalArgumentException("Only RGB colors are enabled. ChunkID=" + Integer.toHexString((byte)chopper.getID().intValue()) + " Color type = " + Integer.toHexString((byte)colorType)); } } /** * Gets the color type for this chunk. * @param chopper with the information the * chunk may use to determine color type * @return the color type for the chunk retrieved * from the chopper using this chunks id. */ protected int getColorType(ChunkChopper chopper) { return chopper.getID().intValue(); } }