/** * Make a donation http://sourceforge.net/donate/index.php?group_id=98797 * Microcrowd * * 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.media.j3d.Appearance; import javax.media.j3d.Material; import javax.media.j3d.PolygonAttributes; import javax.media.j3d.Texture; import javax.media.j3d.TransparencyAttributes; import javax.vecmath.Color3f; import com.microcrowd.loader.java3d.max3ds.ChunkChopper; import com.microcrowd.loader.java3d.max3ds.ChunkMap; /** * Loads material chunks with ambient, diffuse and specular colors, * shininess, transparency, two sidedness and texture. */ public class MaterialChunk extends Chunk { //public static final Integer SELF_ILLUMINATED = new Integer((short)0xA084); /** * This will set the ambient, diffuse and specular * colors as well as the textures, two sidedness * and transparency of the material. * * @param chopper the chopper containing the data * needed to set the attributes. */ public void initialize(ChunkChopper chopper) { Appearance appearance = new Appearance(); Material material = new Material(); Color3f ambientColor = (Color3f)chopper.popData(ChunkMap.AMBIENT_COLOR); if (ambientColor != null) { material.setAmbientColor(ambientColor); } Color3f color = (Color3f)chopper.popData(ChunkMap.DIFFUSE_COLOR); if (color != null) { material.setDiffuseColor(color); } color = (Color3f)chopper.popData(ChunkMap.SPECULAR_COLOR); if (color != null) { material.setSpecularColor(color); } Texture texture = (Texture)chopper.popData(ChunkMap.TEXTURE); if(texture != null) { appearance.setTexture(texture); } Boolean twoSided = (Boolean)chopper.popData(ChunkMap.TWO_SIDED); if (twoSided != null) //Just being there is equivalent to a boolean true. { PolygonAttributes polyAttributes = appearance.getPolygonAttributes(); if(polyAttributes == null) { polyAttributes = new PolygonAttributes(); } polyAttributes.setCullFace(PolygonAttributes.CULL_NONE); appearance.setPolygonAttributes(polyAttributes); } Float transparency = (Float)chopper.popData(ChunkMap.TRANSPARENCY); if (transparency != null) { if (transparency.floatValue() > 0.01f) { TransparencyAttributes transparencyAttributes = new TransparencyAttributes(TransparencyAttributes.FASTEST, transparency.floatValue()); appearance.setTransparencyAttributes(transparencyAttributes); } } String name = (String)chopper.popData(ChunkMap.MATERIAL_NAME); Float shininess = (Float)chopper.popData(ChunkMap.SHININESS); if (shininess != null) { float shine = shininess.floatValue() * 1024f; material.setShininess(shine); } /* Boolean illuminated = (Boolean)chopper.popData(SELF_ILLUMINATED); if(illuminated != null && illuminated.booleanValue() == true) { material.setEmissiveColor(ambientColor); } */ appearance.setMaterial(material); chopper.setNamedObject(name, appearance); } }