<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"Segoe UI Emoji";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>John,<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>I’m not sure whether there is a problem with your file, the Schema, or both.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>I have a modified Schema, which is ahead of the publicly available one because Don is still working through my very long list of changes. ShaderPart was one of those changes. Against my local version of the Schema your file validates.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>I don’t know if you are adding the text in the correct way. I’ve no reason to think not. But I haven’t seen any other example to compare against. And I haven’t played with shaders myself.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Can  talk tomorrow evening (my time, e.g. after about 1800 GMT) if that helps.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Roy<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> x3d-public [mailto:x3d-public-bounces@web3d.org] <b>On Behalf Of </b>John Carlson<br><b>Sent:</b> 01 February 2016 21:29<br><b>To:</b> Don Brutzman; X3D Graphics public mailing list<br><b>Subject:</b> Re: [x3d-public] ShaderPart fails schema validation. Why?<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Here’s a video <a href="https://www.youtube.com/watch?v=BumWtNDTidY">https://www.youtube.com/watch?v=BumWtNDTidY</a> (it’s slow, yes)</span><span lang=EN-US style='font-family:"Segoe UI Emoji","sans-serif"'>😊</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US>Sent from <a href="http://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:"Times New Roman","serif"'><o:p> </o:p></span></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US><br><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Monday, February 1, 2016 4:02 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a><br><b>Subject: </b>ShaderPart fails schema validation. Why?<o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:"Times New Roman","serif"'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Don, this file fails DTD and Schema validation in X3D-Edit.  I am not quite sure why.  Perhaps there is a bug, or I don’t understand shader syntax?  Help! It displays fine in FreeWRL. Thanks,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><?xml version="1.0" encoding="UTF-8"?><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "<a href="http://www.web3d.org/specifications/x3d-3.3.dtd">http://www.web3d.org/specifications/x3d-3.3.dtd</a>"><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><X3D profile="Immersive" version="3.3" xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.3.xsd' xmlns:xsd='http://www.web3d.org/specifications/x3d-namespace'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>  <Scene><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    <NavigationInfo type="&quot;EXAMINE&quot; &quot;ANY&quot;"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>       <Background backUrl='"cubemap/BK.png"' bottomUrl='"cubemap/BT.png"'<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                frontUrl='"cubemap/FR.png"' leftUrl='"cubemap/LF.png"' <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                rightUrl='"cubemap/RT.png"' topUrl='"cubemap/TP.png"' /><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <Viewpoint position='0 0 40' description="Transparent rose"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <Transform DEF='Rose01' ><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <Shape><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <Appearance DEF='_01_-_Default' ><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>        <Material diffuseColor=".7 .7 .7" specularColor=".5 .5 .5" /><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <ComposedCubeMapTexture><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <ImageTexture url='"cubemap/BK.png" "<a href="http://coderextreme.net/cubemap/BK.png">http://coderextreme.net/cubemap/BK.png</a>"' containerField="back"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <ImageTexture url='"cubemap/BT.png" "<a href="http://coderextreme.net/cubemap/BT.png">http://coderextreme.net/cubemap/BT.png</a>"' containerField="bottom"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <ImageTexture url='"cubemap/FR.png" "<a href="http://coderextreme.net/cubemap/FR.png">http://coderextreme.net/cubemap/FR.png</a>"' containerField="front"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <ImageTexture url='"cubemap/LF.png" "<a href="http://coderextreme.net/cubemap/LF.png">http://coderextreme.net/cubemap/LF.png</a>"' containerField="left"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <ImageTexture url='"cubemap/RT.png" "<a href="http://coderextreme.net/cubemap/RT.png">http://coderextreme.net/cubemap/RT.png</a>"' containerField="right"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <ImageTexture url='"cubemap/TP.png" "<a href="http://coderextreme.net/cubemap/TP.png">http://coderextreme.net/cubemap/TP.png</a>"' containerField="top"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                </ComposedCubeMapTexture><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>        <ComposedShader DEF='ComposedShader' language="GLSL"><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <field name='cube' type='SFInt32' accessType='inputOutput' value='0'/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <field name='chromaticDispertion' accessType='inputOutput' type='SFVec3f' value='0.98 1.0 1.033'/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <field name='bias' type='SFFloat' accessType='inputOutput' value='0.5'/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <field name='scale' type='SFFloat' accessType='inputOutput' value='0.5'/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <field name='power' type='SFFloat' accessType='inputOutput' value='2'/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <ShaderPart type='VERTEX'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>/*<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>The MIT License (MIT)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Copyright (c) 2011 Authors of J3D. All rights reserved.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>*/<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>attribute vec3 position;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>attribute vec3 normal;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>attribute vec2 texcoord;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform mat4 modelViewProjectionMatrix;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform mat4 modelViewMatrix;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform mat4 modelViewMatrixInverse;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform mat4 normalMatrix;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform vec3 chromaticDispertion;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform float bias;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform float scale;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform float power;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 t;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 tr;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 tg;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 tb;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying float rfac;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>void main()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    mat3 mvm3=mat3(<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[0].x,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[0].y,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[0].z,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[1].x,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[1].y,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[1].z,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[2].x,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[2].y,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                modelViewMatrix[2].z<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    );<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    vec3 fragNormal = mvm3*normal;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    gl_Position = modelViewProjectionMatrix*vec4(position, 1.0);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    vec3 incident = normalize((modelViewMatrix * vec4(position, 1.0)).xyz);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>    t = reflect(incident, fragNormal)*mvm3;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    tr = refract(incident, fragNormal, chromaticDispertion.x)*mvm3;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    tg = refract(incident, fragNormal, chromaticDispertion.y)*mvm3;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    tb = refract(incident, fragNormal, chromaticDispertion.z)*mvm3;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>    rfac = bias + scale * pow(0.5+0.5*dot(incident, fragNormal), power);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  </ShaderPart><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <ShaderPart type='FRAGMENT'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>/*<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>The MIT License (MIT)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Copyright (c) 2011 Authors of J3D. All rights reserved.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>*/<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#ifdef GL_ES<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>  precision highp float;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#endif<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>uniform samplerCube cube;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 t;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 tr;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 tg;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying vec3 tb;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>varying float rfac;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>void main()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    vec4 ref = textureCube(cube, t);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    vec4 ret = vec4(1.0);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>    ret.r = textureCube(cube, tr).r;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    ret.g = textureCube(cube, tg).g;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    ret.b = textureCube(cube, tb).b;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>    gl_FragColor = ret * rfac + ref * (1.0 - rfac);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>       <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  </ShaderPart><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                </ComposedShader><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                </Appearance><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                <!--Sphere/--><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <IndexedFaceSet DEF="Orbit" creaseAngle="1.57"><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                  <Coordinate DEF="OrbitCoordinates"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                </IndexedFaceSet><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                </Shape><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>      </Transform><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    <Script DEF="OrbitScript"><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <field accessType="inputOnly" name="set_fraction" type="SFFloat"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <field accessType="inputOutput" name="coordinates" type="MFVec3f"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                <field accessType="inputOutput" name="coordIndexes" type="MFInt32"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><![CDATA[<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>ecmascript:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>var e = 5;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>var f = 5;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>var g = 5;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>var h = 5;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>function initialize() {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     resolution = 100;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    updateCoordinates(resolution);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     if (typeof coordIndexes == 'undefined' || coordIndexes == null) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>               coordIndexes = new MFInt32();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     ci = 0;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     for ( i = 0; i < resolution-1; i++) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>               for ( j = 0; j < resolution-1; j++) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                     coordIndexes[ci] = i*resolution+j;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                     coordIndexes[ci+1] = i*resolution+j+1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                     coordIndexes[ci+2] = (i+1)*resolution+j+1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                     coordIndexes[ci+3] = (i+1)*resolution+j;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                     coordIndexes[ci+4] = -1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                     ci += 5;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>function updateCoordinates(resolution) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     theta = 0.0;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     phi = 0.0;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     delta = (2 * 3.141592653) / (resolution-1);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     if (typeof coordinates == 'undefined' || coordinates == null) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>               coordinates = new MFVec3f();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     for ( i = 0; i < resolution; i++) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>               for ( j = 0; j < resolution; j++) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                rho = e + f * Math.cos(g * theta) * Math.cos(h * phi);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                coordinates[i*resolution+j][0] = rho * Math.cos(phi) * Math.cos(theta);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                coordinates[i*resolution+j][1] = rho * Math.cos(phi) * Math.sin(theta);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                coordinates[i*resolution+j][2] = rho * Math.sin(phi);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                theta += delta;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                phi += delta;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>     }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>function set_fraction(fraction, eventTime) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                choice = Math.floor(Math.random() * 4);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                switch (choice) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                case 0:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                e += Math.floor(Math.random() * 2) * 2 - 1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                break;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                case 1:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                f += Math.floor(Math.random() * 2) * 2 - 1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                break;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                case 2:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                g += Math.floor(Math.random() * 2) * 2 - 1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                break;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                case 3:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                h += Math.floor(Math.random() * 2) * 2 - 1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                break;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                if (f < 1) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                f = 10;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                if (g < 1) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                g = 4;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                if (h < 1) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                                h = 4;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                resolution = 100;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                updateCoordinates(resolution);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>      ]]></Script><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    <TimeSensor DEF="Clock" cycleInterval="16" loop="true"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    <ROUTE fromField="coordIndexes" fromNode="OrbitScript"<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>      toField="set_coordIndex" toNode="Orbit"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    <ROUTE fromField="coordinates" fromNode="OrbitScript"<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>      toField="set_point" toNode="OrbitCoordinates"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    <ROUTE fromField="fraction_changed" fromNode="Clock"<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>      toField="set_fraction" toNode="OrbitScript"/><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>    </Scene>   <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US></X3D></span><span lang=EN-US style='font-size:12.0pt;font-family:"Times New Roman","serif"'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></body></html>