001: /*
002: * $RCSfile: ColorCube.java,v $
003: *
004: * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * - Redistribution of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * - Redistribution in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * Neither the name of Sun Microsystems, Inc. or the names of
019: * contributors may be used to endorse or promote products derived
020: * from this software without specific prior written permission.
021: *
022: * This software is provided "AS IS," without a warranty of any
023: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
024: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
025: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
026: * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
027: * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
028: * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
029: * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
030: * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
031: * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
032: * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
033: * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
034: * POSSIBILITY OF SUCH DAMAGES.
035: *
036: * You acknowledge that this software is not designed, licensed or
037: * intended for use in the design, construction, operation or
038: * maintenance of any nuclear facility.
039: *
040: * $Revision: 1.4 $
041: * $Date: 2007/02/09 17:20:18 $
042: * $State: Exp $
043: */
044:
045: package com.sun.j3d.utils.geometry;
046:
047: import javax.media.j3d.*;
048:
049: /**
050: * Simple color-per-vertex cube with a different color for each face
051: */
052: public class ColorCube extends Shape3D {
053: private static final float[] verts = {
054: // front face
055: 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f,
056: 1.0f,
057: 1.0f,
058: -1.0f,
059: -1.0f,
060: 1.0f,
061: // back face
062: -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f,
063: -1.0f,
064: 1.0f,
065: -1.0f,
066: -1.0f,
067: // right face
068: 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f,
069: 1.0f,
070: -1.0f,
071: 1.0f,
072: // left face
073: -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f,
074: -1.0f, -1.0f,
075: -1.0f,
076: // top face
077: 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f,
078: -1.0f, 1.0f, 1.0f,
079: // bottom face
080: -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f,
081: -1.0f, 1.0f, -1.0f, 1.0f, };
082:
083: private static final float[] colors = {
084: // front face (red)
085: 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
086: 0.0f,
087: 0.0f,
088: 1.0f,
089: 0.0f,
090: 0.0f,
091: // back face (green)
092: 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
093: 0.0f,
094: 0.0f,
095: 1.0f,
096: 0.0f,
097: // right face (blue)
098: 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
099: 0.0f,
100: 0.0f,
101: 1.0f,
102: // left face (yellow)
103: 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f,
104: 1.0f,
105: 0.0f,
106: // top face (magenta)
107: 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f,
108: 0.0f, 1.0f,
109: // bottom face (cyan)
110: 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f,
111: 1.0f, 1.0f, };
112:
113: double scale;
114:
115: /**
116: * Constructs a color cube with unit scale. The corners of the
117: * color cube are [-1,-1,-1] and [1,1,1].
118: */
119: public ColorCube() {
120: QuadArray cube = new QuadArray(24, QuadArray.COORDINATES
121: | QuadArray.COLOR_3);
122:
123: cube.setCoordinates(0, verts);
124: cube.setColors(0, colors);
125:
126: this .setGeometry(cube);
127:
128: scale = 1.0;
129: }
130:
131: /**
132: * Constructs a color cube with the specified scale. The corners of the
133: * color cube are [-scale,-scale,-scale] and [scale,scale,scale].
134: * @param scale the scale of the cube
135: */
136: public ColorCube(double scale) {
137: QuadArray cube = new QuadArray(24, QuadArray.COORDINATES
138: | QuadArray.COLOR_3);
139:
140: float scaledVerts[] = new float[verts.length];
141: for (int i = 0; i < verts.length; i++)
142: scaledVerts[i] = verts[i] * (float) scale;
143:
144: cube.setCoordinates(0, scaledVerts);
145: cube.setColors(0, colors);
146:
147: this .setGeometry(cube);
148:
149: this .scale = scale;
150: }
151:
152: /**
153: * @deprecated ColorCube now extends shape so it is no longer necessary
154: * to call this method.
155: */
156: public Shape3D getShape() {
157: return this ;
158: }
159:
160: /**
161: * Returns the scale of the Cube
162: *
163: * @since Java 3D 1.2.1
164: */
165: public double getScale() {
166: return scale;
167: }
168: }
|