/* * Copyright (c) 2003-2009 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 automenta.spacenet.space.geom.text3d.effects; public class Font3DGradient /*implements Font3DEffect*/ { // private Vector3f direction = new Vector3f(); // ColorRGBA start_color = new ColorRGBA(); // ColorRGBA end_color = new ColorRGBA(); // // public Font3DGradient() // { // this(Vector3f.UNIT_Y.clone(), ColorRGBA.white.clone(), ColorRGBA.red.clone()); // } // // public Font3DGradient(Vector3f direction, ColorRGBA start_color, ColorRGBA end_color) // { // this.direction.set(direction); // this.start_color.set(start_color); // this.end_color.set(end_color); // } // // public void applyEffect(Font3D font) // { // boolean mesh_locked = font.isMeshLocked(); // if(mesh_locked) // { // font.unlockMesh(); // } // // // We must add a material-state to use lighting and vertex-colours at the same time // font.enableDiffuseMaterial(); // // does any of these contain any alpha ? // if(start_color.a != 1 || end_color.a != 1) // { // font.enableBlendState(); // } // // // Get the min and max // for(Glyph3D g : font.getGlyphs()) // { // if(g != null && g.getMesh() != null) // { // applyEffect(g.getMesh()); // } // } // // // // If it was locked, lock it again. // if(mesh_locked) // { // font.lockMesh(); // } // } // // private void applyEffect(Glyph3DMesh mesh) // { // // Calculate the max/min of the vertices in the mesh. // Vector3f max = null,min = null; // Vector3f[] verts = BufferUtils.getVector3Array(mesh.getVertexBuffer()); // for(Vector3f v : verts) // { // if(max == null || direction.dot(v) > direction.dot(max)) // { // max = v; // } // if(min == null || direction.dot(v) < direction.dot(min)) // { // min = v; // } // } // float max_dot = direction.dot(max), min_dot = direction.dot(min); // float dot_dist = max_dot - min_dot; // // // Create a color-array // int color_pos = 0; // ColorRGBA[] colors = new ColorRGBA[verts.length]; // // // Iterate through all the vertices and create the colours // for(Vector3f v : verts) // { // float dot_val = direction.dot(v); // ColorRGBA c = colors[color_pos] = new ColorRGBA(start_color); // c.interpolate(end_color, (dot_val-min_dot)/dot_dist); // //logger.info("c:"+c); // color_pos++; // } // // // Apply the colors // mesh.setColorBuffer(BufferUtils.createFloatBuffer(colors)); // } }