001: /*
002: * $RCSfile: Fog.java,v $
003: *
004: * @(#)Fog.java 1.19 98/11/05 20:34:28
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: */
041: package org.jdesktop.j3d.loaders.vrml97.impl;
042:
043: import javax.media.j3d.ExponentialFog;
044: import javax.media.j3d.LinearFog;
045:
046: /** Description of the Class */
047: public class Fog extends BindableNode {
048:
049: // In BindableNode
050: // eventIn
051: //SFBool set_bind;
052: // eventOut
053: //SFBool isBound;
054:
055: // exposedField
056: SFColor color;
057: SFString fogType;
058: SFFloat visibilityRange;
059:
060: // The fog does not have an impl which gets added to the tree directly
061: // so implNode=null
062:
063: // When the fog is bound, it's fogImpl is attached to the browserRoot
064: javax.media.j3d.BranchGroup fogImpl;
065: javax.media.j3d.Fog fog;
066:
067: /**
068: *Constructor for the Fog object
069: *
070: *@param loader Description of the Parameter
071: */
072: public Fog(Loader loader) {
073: super (loader, loader.getFogStack());
074:
075: // exposedFields
076: color = new SFColor(1.0f, 1.0f, 1.0f);
077: fogType = new SFString("LINEAR");
078: visibilityRange = new SFFloat(0.0f);
079:
080: loader.addFog(this );
081: initFields();
082:
083: }
084:
085: /**
086: *Constructor for the Fog object
087: *
088: *@param loader Description of the Parameter
089: *@param bind Description of the Parameter
090: *@param bindTime Description of the Parameter
091: *@param isBound Description of the Parameter
092: *@param color Description of the Parameter
093: *@param fogType Description of the Parameter
094: *@param visibilityRange Description of the Parameter
095: */
096: Fog(Loader loader, SFBool bind, SFTime bindTime, SFBool isBound,
097: SFColor color, SFString fogType, SFFloat visibilityRange) {
098: super (loader, loader.getFogStack(), bind, bindTime, isBound);
099:
100: this .color = color;
101: this .fogType = fogType;
102: this .visibilityRange = visibilityRange;
103:
104: loader.addFog(this );
105: initFields();
106: }
107:
108: /** Description of the Method */
109: public void initImpl() {
110: //TODO: add event handlers for fogType eventIns.
111: //TOTO: move setCapabilities() event handler to be set only if ROUTE
112: if (fogType.getValue().equals("LINEAR")) {
113: LinearFog linearFog = new LinearFog(color.color[0],
114: color.color[1], color.color[2]);
115: linearFog.setCapability(LinearFog.ALLOW_DISTANCE_WRITE);
116: linearFog.setBackDistance(visibilityRange.getValue());
117: linearFog
118: .setFrontDistance(visibilityRange.getValue() / 10.0);
119: fog = linearFog;
120: } else {
121: ExponentialFog expFog = new ExponentialFog(color.color[0],
122: color.color[1], color.color[2]);
123: expFog.setCapability(ExponentialFog.ALLOW_DENSITY_WRITE);
124: expFog.setDensity(visibilityRange.getValue());
125: fog = expFog;
126: }
127:
128: // TODO: do only if ROUTE
129: fog.setCapability(javax.media.j3d.Fog.ALLOW_COLOR_READ);
130: fog.setCapability(javax.media.j3d.Fog.ALLOW_COLOR_WRITE);
131:
132: fogImpl = new RGroup();
133: if (visibilityRange.getValue() == 0.0) {
134: fog.setInfluencingBounds(loader.zeroBounds);
135: } else {
136: fog.setInfluencingBounds(loader.infiniteBounds);
137: }
138: fogImpl.addChild(fog);
139: implReady = true;
140: }
141:
142: /**
143: * Gets the fogImpl attribute of the Fog object
144: *
145: *@return The fogImpl value
146: */
147: public javax.media.j3d.BranchGroup getFogImpl() {
148: return fogImpl;
149: }
150:
151: /** Description of the Method */
152: public void initFields() {
153: initBindableFields();
154: color.init(this , FieldSpec, Field.EXPOSED_FIELD, "color");
155: fogType.init(this , FieldSpec, Field.EXPOSED_FIELD, "fogType");
156: visibilityRange.init(this , FieldSpec, Field.EXPOSED_FIELD,
157: "visibilityRange");
158: }
159:
160: /**
161: * Description of the Method
162: *
163: *@return Description of the Return Value
164: */
165: public Object clone() {
166: return new Fog(loader, (SFBool) bind.clone(),
167: (SFTime) bindTime, (SFBool) isBound, (SFColor) color
168: .clone(), (SFString) fogType.clone(),
169: (SFFloat) visibilityRange.clone());
170: }
171:
172: /**
173: * Description of the Method
174: *
175: *@return Description of the Return Value
176: */
177: public vrml.BaseNode wrap() {
178: return new org.jdesktop.j3d.loaders.vrml97.node.Fog(this );
179: }
180:
181: /**
182: * Gets the type attribute of the Fog object
183: *
184: *@return The type value
185: */
186: public String getType() {
187: return "Fog";
188: }
189:
190: }
|