| 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://www.web3d.org/x3d/tools/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-coding 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.
-->