001: /*
002: * $RCSfile: DirectionalLight.java,v $
003: *
004: * @(#)DirectionalLight.java 1.19 98/11/05 20:34:23
005: *
006: * Copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
007: *
008: * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
009: * modify and redistribute this software in source and binary code form,
010: * provided that i) this copyright notice and license appear on all copies of
011: * the software; and ii) Licensee does not utilize the software in a manner
012: * which is disparaging to Sun.
013: *
014: * This software is provided "AS IS," without a warranty of any kind. ALL
015: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
016: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
017: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
018: * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
019: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
020: * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
021: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
022: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
023: * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
024: * POSSIBILITY OF SUCH DAMAGES.
025: *
026: * This software is not designed or intended for use in on-line control of
027: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
028: * the design, construction, operation or maintenance of any nuclear
029: * facility. Licensee represents and warrants that it will not use or
030: * redistribute the Software for such purposes.
031: *
032: * $Revision: 1.2 $
033: * $Date: 2005/02/03 23:06:55 $
034: * $State: Exp $
035: */
036: /*
037: *@Author: Rick Goldberg
038: *@Author: Doug Gehringer
039: */
040: package org.jdesktop.j3d.loaders.vrml97.impl;
041:
042: import javax.media.j3d.AmbientLight;
043: import javax.media.j3d.BoundingSphere;
044:
045: import javax.media.j3d.SharedGroup;
046: import javax.vecmath.Color3f;
047: import javax.vecmath.Point3d;
048: import javax.vecmath.Vector3f;
049:
050: /** Description of the Class */
051: public class DirectionalLight extends Light {
052:
053: // exposedField
054: SFFloat ambientIntensity;
055: SFColor color;
056: SFVec3f direction;
057: SFFloat intensity;
058: SFBool on;
059:
060: Color3f lightColor;
061: Vector3f lightDir;
062: javax.media.j3d.DirectionalLight dirLight;
063:
064: /**
065: *Constructor for the DirectionalLight object
066: *
067: *@param loader Description of the Parameter
068: */
069: public DirectionalLight(Loader loader) {
070: super (loader);
071: ambientIntensity = new SFFloat(0.0f);
072: color = new SFColor(1.0f, 1.0f, 1.0f);
073: direction = new SFVec3f(0.0f, 0.0f, -1.0f);
074: intensity = new SFFloat(1.0f);
075: on = new SFBool(true);
076:
077: initFields();
078: }
079:
080: /**
081: *Constructor for the DirectionalLight object
082: *
083: *@param loader Description of the Parameter
084: *@param ambientIntensity Description of the Parameter
085: *@param color Description of the Parameter
086: *@param direction Description of the Parameter
087: *@param intensity Description of the Parameter
088: *@param on Description of the Parameter
089: */
090: DirectionalLight(Loader loader, SFFloat ambientIntensity,
091: SFColor color, SFVec3f direction, SFFloat intensity,
092: SFBool on) {
093: super (loader);
094: this .ambientIntensity = ambientIntensity;
095: this .color = color;
096: this .direction = direction;
097: this .intensity = intensity;
098: this .on = on;
099:
100: initFields();
101: }
102:
103: /** Description of the Method */
104: void initImpl() {
105: lightColor = new Color3f();
106: lightDir = new Vector3f();
107: sharedGroup = new SharedGroup();
108: lightColor.x = color.color[0] * ambientIntensity.value;
109: lightColor.y = color.color[1] * ambientIntensity.value;
110: lightColor.z = color.color[2] * ambientIntensity.value;
111: ambLight = new AmbientLight(on.value, lightColor);
112: sharedGroup.addChild(ambLight);
113: lightColor.x = color.color[0] * intensity.value;
114: lightColor.y = color.color[1] * intensity.value;
115: lightColor.z = color.color[2] * intensity.value;
116: lightDir.x = direction.value[0];
117: lightDir.y = direction.value[1];
118: lightDir.z = direction.value[2];
119: light = dirLight = new javax.media.j3d.DirectionalLight(
120: on.value, lightColor, lightDir);
121: ambLight.setInfluencingBounds(loader.infiniteBounds);
122: dirLight.setInfluencingBounds(loader.infiniteBounds);
123: sharedGroup.addChild(dirLight);
124: implReady = true;
125: }
126:
127: /**
128: * Sets the scope attribute of the DirectionalLight object
129: *
130: *@param scopeGroup The new scope value
131: */
132: void setScope(javax.media.j3d.Group scopeGroup) {
133: ambLight.addScope(scopeGroup);
134: dirLight.addScope(scopeGroup);
135: }
136:
137: /**
138: * Description of the Method
139: *
140: *@return Description of the Return Value
141: */
142: public Object clone() {
143: return new DirectionalLight(loader, (SFFloat) ambientIntensity
144: .clone(), (SFColor) color.clone(), (SFVec3f) direction
145: .clone(), (SFFloat) intensity.clone(), (SFBool) on
146: .clone());
147: }
148:
149: /**
150: * Description of the Method
151: *
152: *@param eventInName Description of the Parameter
153: *@param time Description of the Parameter
154: */
155: public void notifyMethod(String eventInName, double time) {
156: if (eventInName.equals("ambientIntensity")) {
157: lightColor.x = color.color[0] * ambientIntensity.value;
158: lightColor.y = color.color[1] * ambientIntensity.value;
159: lightColor.z = color.color[2] * ambientIntensity.value;
160: ambLight.setColor(lightColor);
161: } else if (eventInName.equals("color")
162: || eventInName.equals("intensity")) {
163: lightColor.x = color.color[0] * ambientIntensity.value;
164: lightColor.y = color.color[1] * ambientIntensity.value;
165: lightColor.z = color.color[2] * ambientIntensity.value;
166: ambLight.setColor(lightColor);
167: lightColor.x = color.color[0] * intensity.value;
168: lightColor.y = color.color[1] * intensity.value;
169: lightColor.z = color.color[2] * intensity.value;
170: dirLight.setColor(lightColor);
171: } else if (eventInName.equals("direction")) {
172: lightDir.x = direction.value[0];
173: lightDir.y = direction.value[1];
174: lightDir.z = direction.value[2];
175: dirLight.setDirection(lightDir);
176: } else if (eventInName.equals("on")) {
177: ambLight.setEnable(on.value);
178: dirLight.setEnable(on.value);
179: } else if (eventInName.equals("route_on")) {
180: ambLight
181: .setCapability(javax.media.j3d.Light.ALLOW_STATE_WRITE);
182: dirLight
183: .setCapability(javax.media.j3d.Light.ALLOW_STATE_WRITE);
184: } else if (eventInName.equals("route_direction")) {
185: dirLight
186: .setCapability(javax.media.j3d.DirectionalLight.ALLOW_DIRECTION_WRITE);
187: } else if (eventInName.equals("route_color")
188: || eventInName.equals("route_intensity")) {
189: ambLight
190: .setCapability(javax.media.j3d.Light.ALLOW_COLOR_WRITE);
191: dirLight
192: .setCapability(javax.media.j3d.Light.ALLOW_COLOR_WRITE);
193: } else if (eventInName.equals("route_ambientIntensity")) {
194: ambLight
195: .setCapability(javax.media.j3d.Light.ALLOW_COLOR_WRITE);
196: }
197: }
198:
199: /**
200: * Gets the type attribute of the DirectionalLight object
201: *
202: *@return The type value
203: */
204: public String getType() {
205: return "DirectionalLight";
206: }
207:
208: /** Description of the Method */
209: void initFields() {
210: ambientIntensity.init(this , FieldSpec, Field.EXPOSED_FIELD,
211: "ambientIntensity");
212: color.init(this , FieldSpec, Field.EXPOSED_FIELD, "color");
213: direction.init(this , FieldSpec, Field.EXPOSED_FIELD,
214: "direction");
215: intensity.init(this , FieldSpec, Field.EXPOSED_FIELD,
216: "intensity");
217: on.init(this , FieldSpec, Field.EXPOSED_FIELD, "on");
218: }
219: }
|