1 |
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
|
3 | <X3D profile='Immersive' version='3.3' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.3.xsd'> |
4 | <head> |
5 | <meta name='title' content='BackgroundTimeOfDay.x3d'/> |
6 | <meta name='description' content='Interpolate between Background color arrays to show a gradually changing time-of-day effect.'/> |
7 | <meta name='creator' content='Don Brutzman and MV4205 class'/> |
8 | <meta name='created' content='22 April 2009'/> |
9 | <meta name='modified' content='20 October 2019'/> |
10 | <meta name='reference' content='https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter11LightingEnvironment/BackgroundSelector.x3d'/> |
11 | <meta name='subject' content='X3D Background example'/> |
12 | <meta name='identifier' content='https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter11LightingEnvironmentalEffects/BackgroundTimeOfDay.x3d'/> |
13 | <meta name='generator' content='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/> |
14 | <meta name='license' content='../license.html'/> |
15 | </head> |
16 | <Scene> |
17 | <WorldInfo title='BackgroundTimeOfDay.x3d'/> |
18 | <Transform translation='0 3 0'> |
19 | <Shape> |
20 | <Text string='"Background Time Of Day"'> |
21 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
22 | </Text> |
23 | <Appearance> |
24 | <Material/> |
25 | </Appearance> |
26 | </Shape> |
27 | </Transform> |
28 |
<!-- ROUTE information for TimeOfDayClock node:
[from fraction_changed to BackgroundColorInterpolator.set_fraction
]
-->
<TimeSensor DEF='TimeOfDayClock' cycleInterval='6' loop='true'/> |
29 |
<!-- ROUTE information for BackgroundColorInterpolator node:
[from TimeOfDayClock.fraction_changed to set_fraction
]
[from groundColor_changed to AnimatedBackground.groundColor
]
[from skyColor_changed to AnimatedBackground.skyColor
]
-->
<Script DEF='BackgroundColorInterpolator'> |
30 | <field name='set_fraction' type='SFFloat' accessType='inputOnly'/> |
31 | <field name='groundColorSunrise' type='MFColor' value='0.133 0.419 0 0.36 0.1 0 1 0.74 0.4 1 0.74 0.4 0 0.2 0.75 0 0.1 0.5' accessType='initializeOnly'/> |
32 | <field name='groundColorNoon' type='MFColor' value='0.133 0.419 0 0.36 0.1 0 1 0.74 0.4 1 0.74 0.4 0 0 0.5 0 0 0.2' accessType='initializeOnly'/> |
33 | <field name='groundColorSunset' type='MFColor' value='0.133 0.419 0 0.36 0.1 0 1 0.74 0.4 1 0.74 0.4 0 0 0.5 0 0 0.2' accessType='initializeOnly'/> |
34 | <field name='groundColorNight' type='MFColor' value='0.133 0.419 0 0.36 0.1 0 1 0.74 0.4 1 0.74 0.4 0 0 0.5 0 0 0.2' accessType='initializeOnly'/> |
35 | <field name='skyColorSunrise' type='MFColor' value='1 1 0.2 1 1 0 0.36 0.63 1 0 0.4 1 0 0.4 1' accessType='initializeOnly'/> |
36 | <field name='skyColorNoon' type='MFColor' value='0 0.035 0.34 0 0.015 0.44 0 0.05 0.5 0 0.1 0.6 0.44 0.8 1 1 1 0.7' accessType='initializeOnly'/> |
37 | <field name='skyColorSunset' type='MFColor' value='0 0 0.38 0 0 0.68 0.5 0.2 1 0.5 0.2 1 1 0.3 0 1 0.2 0.8' accessType='initializeOnly'/> |
38 | <field name='skyColorNight' type='MFColor' value='1 1 1 0.8 0.8 0.8 0.1 0.1 0.1 0 0 0 0 0 0' accessType='initializeOnly'/> |
39 | <field name='groundColor_changed' type='MFColor' accessType='outputOnly'/> |
40 | <field name='skyColor_changed' type='MFColor' accessType='outputOnly'/> |
<![CDATA[
ecmascript: function initialize() { Browser.println ('groundColorSunrise length=' + groundColorSunrise.length + ' ' + groundColorSunrise.toString()); Browser.println ('groundColorNoon length=' + groundColorNoon.length + ' ' + groundColorNoon.toString()); Browser.println ('groundColorSunset length=' + groundColorSunset.length + ' ' + groundColorSunset.toString()); Browser.println ('groundColorNight length=' + groundColorNight.length + ' ' + groundColorNight.toString()); Browser.println ('skyColorSunrise length=' + skyColorSunrise.length + ' ' + skyColorSunrise.toString()); Browser.println ('skyColorNoon length=' + skyColorNoon.length + ' ' + skyColorNoon.toString()); Browser.println ('skyColorSunset length=' + skyColorSunset.length + ' ' + skyColorSunset.toString()); Browser.println ('skyColorNight length=' + skyColorNight.length + ' ' + skyColorNight.toString()); } function set_fraction (fraction) // fraction is input value sent by TimeSensor clock { // Sunrise to Noon, fraction 0.0 to 0.25, interval=0.25 if (fraction < 0.25) { groundColor_changed = interpolate (groundColorSunrise, groundColorNoon, fraction, 0.00, 0.25); skyColor_changed = interpolate ( skyColorSunrise, skyColorNoon, fraction, 0.00, 0.25); } // Noon to Evening, fraction 0.25 to 0.5, interval=0.25 else if (fraction < 0.5) { groundColor_changed = interpolate (groundColorNoon, groundColorSunset, fraction, 0.25, 0.25); skyColor_changed = interpolate ( skyColorNoon, skyColorSunset, fraction, 0.25, 0.25); } // Evening to Night, fraction 0.5 to 0.6, interval=0.1 else if (fraction < 0.6) { groundColor_changed = interpolate (groundColorSunset, groundColorNight, fraction, 0.5, 0.1); skyColor_changed = interpolate ( skyColorSunset, skyColorNight, fraction, 0.5, 0.1); } // Night (unchanging), fraction 0.6 to 0.95, interval=0.35 else if (fraction < 0.95) { groundColor_changed = groundColorNight; skyColor_changed = skyColorNight; } // Night to Sunrise, fraction 0.95 to 1.0, interval=0.05 else // (fraction < 1.0) { groundColor_changed = interpolate (groundColorNight, groundColorSunrise, fraction, 0.95, 0.05); skyColor_changed = interpolate ( skyColorNight, skyColorSunrise, fraction, 0.95, 0.05); } // Browser.println ('groundColor_changed=' + groundColor_changed.toString()); // Browser.println (' skyColor_changed=' + skyColor_changed.toString()); } function interpolate (firstColorArray, secondColorArray, fraction, initialFraction, interval) { f = (fraction - initialFraction) / interval; // f should range from 0 to 1 // Browser.println ('initialFraction=' + initialFraction + ', fraction=' + fraction + ', f=' + f); color0 = firstColorArray[0] + (secondColorArray[0] - firstColorArray[0]) * f; color1 = firstColorArray[1] + (secondColorArray[1] - firstColorArray[1]) * f; color2 = firstColorArray[2] + (secondColorArray[2] - firstColorArray[2]) * f; color3 = firstColorArray[3] + (secondColorArray[3] - firstColorArray[3]) * f; color4 = firstColorArray[4] + (secondColorArray[4] - firstColorArray[4]) * f; return new MFColor (color0, color1, color2, color3, color4); }
]]>
|
|
42 | </Script> |
43 | < ROUTE fromNode='TimeOfDayClock' fromField='fraction_changed' toNode='BackgroundColorInterpolator' toField='set_fraction'/> |
44 |
<!-- ROUTE information for AnimatedBackground node:
[from BackgroundColorInterpolator.groundColor_changed to groundColor
]
[from BackgroundColorInterpolator.skyColor_changed to skyColor
]
-->
<Background DEF='AnimatedBackground' groundAngle='0.03 1.26 1.5 1.57' groundColor='0.133333 0.419608 0 0.36 0.1 0 1 0.74 0.4 0 0 0.5 0 0 0.2' skyAngle='0.03 0.05 1.5 1.57' skyColor='1 1 1 0.8 0.8 0.8 0.1 0.1 0.1 0 0 0 0 0 0'/> |
45 | < ROUTE fromNode='BackgroundColorInterpolator' fromField='groundColor_changed' toNode='AnimatedBackground' toField='groundColor'/> |
46 | < ROUTE fromNode='BackgroundColorInterpolator' fromField='skyColor_changed' toNode='AnimatedBackground' toField='skyColor'/> |
47 | </Scene> |
48 | </X3D> |
Event Graph ROUTE Table entries with 3 ROUTE connections total, showing X3D event-model relationships for this scene.
Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.
TimeOfDayClock
TimeSensor fraction_changed SFFloat |
BackgroundColorInterpolator
Script set_fraction SFFloat |
then
|
BackgroundColorInterpolator
Script groundColor_changed MFColor |
AnimatedBackground
Background groundColor MFColor |
||
then
|
BackgroundColorInterpolator
Script skyColor_changed MFColor |
AnimatedBackground
Background skyColor MFColor |
BackgroundColorInterpolator
Script groundColor_changed MFColor |
AnimatedBackground
Background groundColor MFColor |
|
BackgroundColorInterpolator
Script skyColor_changed MFColor |
AnimatedBackground
Background skyColor MFColor |
<!--
Color legend: X3D terminology
<X3dNode
DEF='idName' field='value'/>
matches XML terminology
<XmlElement
DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement)
(Grey background inside box: inserted documentation)
(Magenta background: X3D Extensibility)
-->
<!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->