/* Copyright (C) 2001, 2006 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. */ package gov.nasa.worldwind.render; import gov.nasa.worldwind.util.Logging; import java.awt.*; /** * @author tag * @version $Id: Material.java 2677 2007-08-25 06:41:38Z tgaskins $ */ public class Material { public static final int SPECULAR = 0; public static final int DIFFUSE = 1; public static final int AMBIENT = 2; public static final int EMISSION = 3; public static final Material WHITE = new Material(new Color(0.9f, 0.9f, 0.9f, 0.0f), new Color(0.8f, 0.8f, 0.8f, 0.0f), new Color(0.2f, 0.2f, 0.2f, 0.0f), new Color(0.0f, 0.0f, 0.0f, 0.0f), 20f); public static final Material RED = new Material(new Color(0.75f, 0.0f, 0.0f, 0.0f), new Color(0.8f, 0.0f, 0.0f, 0.0f), new Color(0.2f, 0.0f, 0.0f, 0.0f), new Color(0.0f, 0.0f, 0.0f, 0.0f), 80f); public static final Material GREEN = new Material(new Color(0.0f, 0.75f, 0.0f, 0.0f), new Color(0.0f, 0.8f, 0.0f, 0.0f), new Color(0.0f, 0.2f, 0.0f, 0.0f), new Color(0.0f, 0.0f, 0.0f, 0.0f), 20f); public static final Material BLUE = new Material(new Color(0.0f, 0.0f, 0.75f, 0.0f), new Color(0.0f, 0.0f, 0.8f, 0.0f), new Color(0.0f, 0.0f, 0.2f, 0.0f), new Color(0.0f, 0.0f, 0.0f, 0.0f), 20f); public static final Material YELLOW = new Material(new Color(0.75f, 0.75f, 0.55f, 0.0f), new Color(0.8f, 0.8f, 0.0f, 0.0f), new Color(0.2f, 0.2f, 0.01f, 0.0f), new Color(0.0f, 0.0f, 0.0f, 0.0f), 20f); private final Color specular; private final Color diffuse; private final Color ambient; private final Color emission; private final float shininess; /** * @param specular * @param diffuse * @param ambient * @param emission * @param shininess * @throws IllegalArgumentException if <code>specular</code>, <code>diffuse</code>, <code>ambient</code> or * <code>emission</code> is null */ public Material(Color specular, Color diffuse, Color ambient, Color emission, float shininess) { if (specular == null || diffuse == null || ambient == null || emission == null) { String msg = Logging.getMessage("nullValue.ColorIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } this.specular = specular; this.diffuse = diffuse; this.ambient = ambient; this.emission = emission; this.shininess = shininess; } public Material(Color color) { if (color == null) { String msg = Logging.getMessage("nullValue.ColorIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } this.specular = new Color(0.75f, 0.75f, 0.55f, 0.0f); this.diffuse = color; this.ambient = new Color(0.2f, 0.2f, 0.01f, 0.0f); this.emission = new Color(0.0f, 0.0f, 0.0f, 0.0f); this.shininess = 20f; } public Color getSpecular() { return this.specular; } public Color getDiffuse() { return this.diffuse; } public Color getAmbient() { return this.ambient; } public Color getEmission() { return this.emission; } public float getShininess() { return this.shininess; } public void apply(javax.media.opengl.GL gl, int face) { float[] rgba = new float[4]; gl.glMaterialfv(face, javax.media.opengl.GL.GL_SPECULAR, this.specular.getRGBComponents(rgba), 0); gl.glMaterialfv(face, javax.media.opengl.GL.GL_DIFFUSE, this.diffuse.getRGBComponents(rgba), 0); gl.glMaterialfv(face, javax.media.opengl.GL.GL_AMBIENT, this.ambient.getRGBComponents(rgba), 0); gl.glMaterialf(face, javax.media.opengl.GL.GL_SHININESS, this.shininess); gl.glMaterialfv(face, javax.media.opengl.GL.GL_EMISSION, this.emission.getRGBComponents(rgba), 0); } }