From 7018135a5b431dc70b699430dfa430d737da63c4 Mon Sep 17 00:00:00 2001 From: Athanasios <ath.kouk.oid@gmail.com> Date: Wed, 19 May 2021 15:49:13 +0200 Subject: [PATCH] Add X3DOM tutorials --- public/X3DOMTutorial/addnode.html | 88 + public/X3DOMTutorial/barchart.html | 162 + public/X3DOMTutorial/colorbrewer.html | 137 + public/X3DOMTutorial/colorbrewer2.html | 133 + public/X3DOMTutorial/coordinatesystem.html | 119 + public/X3DOMTutorial/hellox3dom.html | 82 + public/X3DOMTutorial/ifsandmaterial.html | 103 + public/X3DOMTutorial/ifsandtexturecoord.html | 94 + public/X3DOMTutorial/ifsandtextures.html | 87 + .../img/HFT_DL3_CMYK_maxH27mm.jpg | Bin 0 -> 686731 bytes public/X3DOMTutorial/img/Logo_bisH27mm.jpg | Bin 0 -> 10454 bytes .../img/brick_stone_wall_0119_01_preview.jpg | Bin 0 -> 69996 bytes public/X3DOMTutorial/index.html | 141 +- public/X3DOMTutorial/indexedfaceset.html | 244 + public/X3DOMTutorial/indexedfaceset2.html | 249 ++ public/X3DOMTutorial/terrain.html | 92 + public/X3DOMTutorial/toytown.html | 104 + public/X3DOMTutorial/transform.html | 86 + public/X3DOMTutorial/x3dom.css | 222 + public/X3DOMTutorial/x3dom.js | 3959 +++++++++++++++++ public/index.html | 44 +- 21 files changed, 6056 insertions(+), 90 deletions(-) create mode 100644 public/X3DOMTutorial/addnode.html create mode 100644 public/X3DOMTutorial/barchart.html create mode 100644 public/X3DOMTutorial/colorbrewer.html create mode 100644 public/X3DOMTutorial/colorbrewer2.html create mode 100644 public/X3DOMTutorial/coordinatesystem.html create mode 100644 public/X3DOMTutorial/hellox3dom.html create mode 100644 public/X3DOMTutorial/ifsandmaterial.html create mode 100644 public/X3DOMTutorial/ifsandtexturecoord.html create mode 100644 public/X3DOMTutorial/ifsandtextures.html create mode 100644 public/X3DOMTutorial/img/HFT_DL3_CMYK_maxH27mm.jpg create mode 100644 public/X3DOMTutorial/img/Logo_bisH27mm.jpg create mode 100644 public/X3DOMTutorial/img/brick_stone_wall_0119_01_preview.jpg create mode 100644 public/X3DOMTutorial/indexedfaceset.html create mode 100644 public/X3DOMTutorial/indexedfaceset2.html create mode 100644 public/X3DOMTutorial/terrain.html create mode 100644 public/X3DOMTutorial/toytown.html create mode 100644 public/X3DOMTutorial/transform.html create mode 100644 public/X3DOMTutorial/x3dom.css create mode 100644 public/X3DOMTutorial/x3dom.js diff --git a/public/X3DOMTutorial/addnode.html b/public/X3DOMTutorial/addnode.html new file mode 100644 index 0000000..8332aff --- /dev/null +++ b/public/X3DOMTutorial/addnode.html @@ -0,0 +1,88 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>Add/Remove Nodes example</title> + <link rel="stylesheet" type="text/css" href="./x3dom.css"> +</head> + +<body> + <h1>Add/Remove Nodes Example</h1> + <p> + simple example which shows how to add/remove nodes using a simple DOM appendChild()/removeChild() function + </p> + <x3d id="boxes" showstat="true" x="0px" y="0px" width="600px" height="300px"> + <scene render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" pickmode="idBuf" dopickpass="true"> + <viewpoint position="4.88104 4.59865 7.4181" orientation="-0.69017 0.723467 -0.0161809 0.735134" + fieldofview="0.785398" centerofrotation="0,0,0" znear="-1" zfar="-1"></viewpoint> + <background def="bgnd" transparency="0" skycolor="1 1 1" groundcolor="" groundangle="" skyangle="" backurl="" + bottomurl="" fronturl="" lefturl="" righturl="" topurl=""></background> + <transform id="root" translation="0 0 0" render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" center="0,0,0" + rotation="0,0,0,0" scale="1,1,1" scaleorientation="0,0,0,0"> + <shape render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" ispickable="true"> + <appearance sorttype="auto"> + <material ambientintensity="0.2" diffusecolor="0.8,0.8,0.8" emissivecolor="0,0,0" shininess="0.2" + specularcolor="0,0,0"></material> + </appearance> + <box solid="true" ccw="true" usegeocache="true" lit="true" size="2,2,2"></box> + </shape> + <transform translation="1.5160652180202305 1.489243873860687 -2.648085524328053" + scale="1.2286848302464932 0.7494203578680754 1.357877661474049" render="true" bboxcenter="0,0,0" + bboxsize="-1,-1,-1" center="0,0,0" rotation="0,0,0,0" scaleorientation="0,0,0,0"> + <shape render="true" bboxcenter="0,0,0" bboxsize="-1,-1,-1" ispickable="true"> + <appearance sorttype="auto"> + <material ambientintensity="0.2" diffusecolor="0.8,0.8,0.8" emissivecolor="0,0,0" shininess="0.2" + specularcolor="0,0,0"></material> + </appearance> + <box solid="true" ccw="true" usegeocache="true" lit="true" size="2,2,2"></box> + </shape> + </transform> + </transform> + </scene> + <div class="x3dom-progress" style="display: none;"><strong>Loading: 0</strong><span style="width: 25%;"> </span> + </div> + </x3d> + <p>Dynamic childtree update</p> + <input type="button" value="Add Child" onclick="addNode();"> + <input type="button" value="Remove Child" onclick="removeNode();"> + <script type="text/javascript"> + function addNode() { + x = Math.random() * 6 - 3; + y = Math.random() * 6 - 3; + z = Math.random() * 6 - 3; + s0 = Math.random() + 0.5; + s1 = Math.random() + 0.5; + s2 = Math.random() + 0.5; + var t = document.createElement('Transform'); + t.setAttribute("translation", x + " " + y + " " + z); + t.setAttribute("scale", s0 + " " + s1 + " " + s2); + var s = document.createElement('Shape'); + // Appearance Node + var app = document.createElement('Appearance'); + // Material Node + var mat = document.createElement('Material'); + app.appendChild(mat); + s.appendChild(app); + t.appendChild(s); + var b = document.createElement('Box'); + s.appendChild(b); + var ot = document.getElementById('root'); + ot.appendChild(t); + return false; + }; + function removeNode() { + var ot = document.getElementById('root'); + for (var i = 0; i < ot.childNodes.length; i++) { + // check if we have a real X3DOM Node; not just e.g. a Text-tag + if (ot.childNodes[i].nodeType === Node.ELEMENT_NODE) { + ot.removeChild(ot.childNodes[i]); + break; + } + } + return false; + }; + </script> + <script type="text/javascript" src="./x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/barchart.html b/public/X3DOMTutorial/barchart.html new file mode 100644 index 0000000..5698694 --- /dev/null +++ b/public/X3DOMTutorial/barchart.html @@ -0,0 +1,162 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> Bar Chart </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1> Coordinate system </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 1 1'> </background> + <!-- Invoke CoordinateAxes in other scenes as an Inline child inside a scaling Transform node, at the topmost level of the scene graph. --> + <!-- Each arrow goes from +1m to -1m to allow linear scaling to fit a scene --> + <!-- Note each label rotates about the scene's vertical Y axis for consistency, enabling local orientation by user --> + <Group> + <!-- Vertical Y arrow and label --> + <Group DEF='ArrowGreen'> + <Transform translation='0 1 0'> + <Shape> + <Appearance DEF='Green'> + <Material diffuseColor='0 1 0'> </Material> + </Appearance> + <Cylinder DEF='ArrowCylinder' radius='.025' top='false'> </Cylinder> + </Shape> + </Transform> + <Transform translation='0 2 0'> + <Shape> + <Appearance USE='Green'> </Appearance> + <Cone DEF='ArrowCone' bottomRadius='.05' height='.1'> </Cone> + </Shape> + </Transform> + </Group> + <Transform translation='0 2.08 0'> + <Billboard> + <Shape> + <Appearance DEF='LABEL_APPEARANCE'> + <Material diffuseColor='0 0 0'> </Material> + </Appearance> + <Text id='chartlabel-y' string='"year"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + <Transform rotation='0 0 1 -1.57079'> + <!-- Horizontal X arrow and label --> + <Group DEF='ArrowRed'> + <Transform translation='0 1 0'> + <Shape> + <Appearance DEF='Red'> + <Material diffuseColor='.7 .1 .1' emissiveColor='.33 0 0' /> + </Appearance> + <Cylinder USE='ArrowCylinder'> </Cylinder> + </Shape> + </Transform> + <Transform translation='0 2 0'> + <Shape> + <Appearance USE='Red'> </Appearance> + <Cone USE='ArrowCone'> </Cone> + </Shape> + </Transform> + </Group> + <Transform rotation='0 0 1 1.57079' translation='0 2 0'> + <!-- note label rotated back to original coordinate frame --> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text id='chartlabel-x' string='"building id"'> + <FontStyle USE='LABEL_FONT'> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- bars --> + <Transform id="bar1" translation='0.25 0.5 0'> + <Shape> + <Appearance DEF='BAR_COLOR'> + <Material diffuseColor='1 0 1'> + </Material> + </Appearance> + <Box size='0.025 1 0.025'> </Box> + </Shape> + </Transform> + <Transform id="bar2" translation='0.75 0.5 0'> + <Shape> + <Appearance USE='BAR_COLOR'> + </Appearance> + <Box size='0.025 1.0 0.025'> </Box> + </Shape> + </Transform> + <Transform id="bar3" translation='1.25 0.5 0'> + <Shape> + <Appearance USE='BAR_COLOR'> + </Appearance> + <Box size='0.025 1.0 0.025'> </Box> + </Shape> + </Transform> + <Transform id="bar4" translation='1.75 0.5 0'> + <Shape> + <Appearance USE='BAR_COLOR'> + </Appearance> + <Box size='0.025 1.0 0.025'> </Box> + </Shape> + </Transform> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + Bar chart example <br> <br> + label x-axis: <input type="text" id="label-x" value="building id" size="12" /> <br> + label y-axis: <input type="text" id="label-y" value="year" size="12" /><br> + attribute year of construction: <br> + <input type="text" id="yoc-b1" value="1960" size="12" /><br> + <input type="text" id="yoc-b2" value="1968" size="12" /><br> + <input type="text" id="yoc-b3" value="1980" size="12" /><br> + <input type="text" id="yoc-b4" value="1985" size="12" /><br> + <input type="button" value="draw" onclick="drawBarChart()" /> <br> + </td> + <script type="text/javascript" src="x3dom.js"></script> + <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> + <script> + function drawBarChart() { + var labelx = document.getElementById("label-x").value; + var chartlabelx = document.getElementById("chartlabel-x"); + chartlabelx.setAttribute("string", labelx); + var labely = document.getElementById("label-y").value; + var chartlabely = document.getElementById("chartlabel-y"); + chartlabely.setAttribute("string", labely); + var yocb1 = document.getElementById("yoc-b1").value; + var yocb2 = document.getElementById("yoc-b2").value; + var yocb3 = document.getElementById("yoc-b3").value; + var yocb4 = document.getElementById("yoc-b4").value; + yocb1 = (yocb1 - 1950) / 10; + var bar1 = document.getElementById("bar1"); + bar1.setAttribute("translation", "0.25 " + yocb1 / 2.0 + " 0"); + bar1.setAttribute("scale", "1 " + yocb1 + " 1"); + yocb2 = (yocb2 - 1950) / 10; + var bar2 = document.getElementById("bar2"); + bar2.setAttribute("translation", "0.75 " + yocb2 / 2.0 + " 0"); + bar2.setAttribute("scale", "1 " + yocb2 + " 1"); + yocb3 = (yocb3 - 1950) / 10; + var bar3 = document.getElementById("bar3"); + bar3.setAttribute("translation", "1.25 " + yocb3 / 2.0 + " 0"); + bar3.setAttribute("scale", "1 " + yocb3 + " 1"); + yocb4 = (yocb4 - 1950) / 10; + var bar4 = document.getElementById("bar4"); + bar4.setAttribute("translation", "1.75 " + yocb4 / 2.0 + " 0"); + bar4.setAttribute("scale", "1 " + yocb4 + " 1"); + } + </script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/colorbrewer.html b/public/X3DOMTutorial/colorbrewer.html new file mode 100644 index 0000000..4597adf --- /dev/null +++ b/public/X3DOMTutorial/colorbrewer.html @@ -0,0 +1,137 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>Material brewer</title> + <link rel="stylesheet" type="text/css" href="x3dom.css"></link> +</head> + +<body class="ui-widget-content" style="border:0;"> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material id="material"> </Material> + </Appearance> + <Sphere radius="2.0"> </Sphere> + </Shape> + </Scene> + </X3D> + </td> + <td width="50%" align="left" valign="top" scope="col"> + The following example will show you haw to interactively modify the 3D scene. + See <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/shape.html#Material" + target="_blank"> + X3D Material node definition </a> for an explanation of the different color attributes. + <br> + <br><b>ambientIntensity</b><br> + ambientIntensity: 0 <input type="range" id="ambientIntensity" min="0.0" max="1.0" step="0.05" value="0.2" + onchange="changeColor()" />1<br> + <br> + <b>diffue color</b> + <br> + red: 0 <input type="range" id="diffuse_r" min="0.0" max="1.0" step="0.05" value="0.8" + onchange="changeColor()" />1<br> + green: 0 <input type="range" id="diffuse_g" min="0.0" max="1.0" step="0.05" value="0.8" + onchange="changeColor()" />1<br> + blue: 0 <input type="range" id="diffuse_b" min="0.0" max="1.0" step="0.05" value="0.8" + onchange="changeColor()" />1<br> + <br><b>emissive color</b><br> + red: 0 <input type="range" id="emissive_r" min="0.0" max="1.0" step="0.05" value="0.0" + onchange="changeColor()" />1<br> + green: 0 <input type="range" id="emissive_g" min="0.0" max="1.0" step="0.05" value="0.0" + onchange="changeColor()" />1<br> + blue: 0 <input type="range" id="emissive_b" min="0.0" max="1.0" step="0.05" value="0.0" + onchange="changeColor()" />1<br> + <br> + <b>specular color</b> + <br> + red: 0 <input type="range" id="specular_r" min="0.0" max="1.0" step="0.05" value="0.0" + onchange="changeColor()" />1<br> + green: 0 <input type="range" id="specular_g" min="0.0" max="1.0" step="0.05" value="0.0" + onchange="changeColor()" />1<br> + blue: 0 <input type="range" id="specular_b" min="0.0" max="1.0" step="0.05" value="0.0" + onchange="changeColor()" />1<br> + <br> + <b>shininess</b> + <br> + shininess: 0 <input type="range" id="shininess" min="0.0" max="1.0" step="0.05" value="0.2" + onchange="changeColor()" />1<br> + <br> + <b>transparency</b> + <br> + transparency : 0 <input type="range" id="transparency" min="0.0" max="1.0" step="0.05" value="0.0" + onchange="changeColor()" />1<br> + <br> + <p> + <br><br> + The diffuse color of a material will be interactively changed. + A JavaScript <a href="http://jqueryui.com/slider/#colorpicker target=" _blank"> RGB color picker </a> is used + and modified. + If the RGB color value is changed, the diffuse material of the sphere shall be changed as well. So we need to + get the Material node first. + This is done by the getElementById function in X3DOM. Of course, the Material node needs to have an unique id. + <pre> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material id="material" diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <Sphere radius="2.0"> </Sphere> + </Shape> + </Scene> + </X3D> + </pre> + <br> + For example, if the diffuse color should be set to red, the Material node is referenced by its id and the + attribute diffuseColor is set to + "1.0 0.0 0.0". The attribute value is always a string. + <pre> + var mat = document.getElementById("material"); + mat.setAttribute("diffuseColor", "1.0 0.0 0.0"); + </pre> + In the example, the RGB value is fetched from the slider. + <pre> + var mat = document.getElementById("material"); + rgbstring = " "+ red + " " + green + " " + blue; + mat.setAttribute("diffuseColor", rgbstring); + </pre> + </p> + </td> + <script type="text/javascript" src="x3dom.js"></script> + <script> + /** + * Change the settings of the directional light + * + * @param field string: Name of the field + * @param value number: New value to set + */ + function changeColor() { + var material = document.getElementById("material"); + var emissive_rgb = " " + document.getElementById("emissive_r").value; + emissive_rgb += " " + document.getElementById("emissive_g").value; + emissive_rgb += " " + document.getElementById("emissive_b").value; + material.setAttribute("emissiveColor", emissive_rgb); + var diffuse_rgb = " " + document.getElementById("diffuse_r").value; + diffuse_rgb += " " + document.getElementById("diffuse_g").value; + diffuse_rgb += " " + document.getElementById("diffuse_b").value; + material.setAttribute("diffuseColor", diffuse_rgb); + var specular_rgb = " " + document.getElementById("specular_r").value; + specular_rgb += " " + document.getElementById("specular_g").value; + specular_rgb += " " + document.getElementById("specular_b").value; + material.setAttribute("specularColor", specular_rgb); + var ambientIntensity = " " + document.getElementById("ambientIntensity").value; + material.setAttribute("ambientIntensity", ambientIntensity); + var shininess = " " + document.getElementById("shininess").value; + material.setAttribute("shininess", shininess); + var transparency = " " + document.getElementById("transparency").value; + material.setAttribute("transparency", transparency); + } + </script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/colorbrewer2.html b/public/X3DOMTutorial/colorbrewer2.html new file mode 100644 index 0000000..41fc20f --- /dev/null +++ b/public/X3DOMTutorial/colorbrewer2.html @@ -0,0 +1,133 @@ +<html> + +<head> + <meta charset="utf-8"> + <title>Material brewer</title> + <!-- source Colorpicker slider: http://jqueryui.com/slider/#colorpicker --> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> + </link> + <script src="http://code.jquery.com/jquery-1.10.2.js"></script> + <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script> + </link> + <style> + #red, + #green, + #blue { + float: left; + clear: left; + width: 300px; + margin: 15px; + } + + #red .ui-slider-range { + background: #ef2929; + } + + #red .ui-slider-handle { + border-color: #ef2929; + } + + #green .ui-slider-range { + background: #8ae234; + } + + #green .ui-slider-handle { + border-color: #8ae234; + } + + #blue .ui-slider-range { + background: #729fcf; + } + + #blue .ui-slider-handle { + border-color: #729fcf; + } + </style> +</head> + +<body class="ui-widget-content" style="border:0;"> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material id="material" diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <Sphere radius="2.0"> </Sphere> + </Shape> + </Scene> + </X3D> + </td> + <td width="50%" align="left" valign="top" scope="col"> + <p>The following example will show you haw to interactively modify the 3D scene.</p> + <div id="red"></div> + <div id="green"></div> + <div id="blue"></div> + <p> + <br><br><br><br><br><br><br><br><br><br> + The diffuse color of a material will be interactively changed. + A JavaScript <a href="http://jqueryui.com/slider/#colorpicker target=" _blank"> RGB color picker </a> is used + and modified. + If the RGB color value is changed, the diffuse material of the sphere shall be changed as well. So we need to + get the Material node first. + This is done by the getElementById function in X3DOM. Of course, the Material node needs to have an unique id. + <pre> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material id="material" diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <Sphere radius="2.0"> </Sphere> + </Shape> + </Scene> + </X3D> + </pre> + <br> + For example, if the diffuse color should be set to red, the Material node is referenced by its id and the + attribute diffuseColor is set to + "1.0 0.0 0.0". The attribute value is always a string. + <pre> + var mat = document.getElementById("material"); + mat.setAttribute("diffuseColor", "1.0 0.0 0.0"); + </pre> + In the example, the RGB value is fetched from the slider. As the slider gives the RGB values between 0 and 255, + they have to be transformed to + arithmetic values between 0.0 and 1.0. After that, the RBG value has to be formatted as string. + <pre> + var mat = document.getElementById("material"); + rgbstring = " "+ red/255 + " " + green/255 + " " + blue/255; + mat.setAttribute("diffuseColor", rgbstring); + </pre> + </p> + </td> + <script type="text/javascript" src="x3dom.js"></script> + <script> + function refreshDiffuseMaterial() { + var red = $("#red").slider("value"), + green = $("#green").slider("value"), + blue = $("#blue").slider("value"); + var mat = document.getElementById("material"); + rgbstring = " " + red / 255 + " " + green / 255 + " " + blue / 255; + mat.setAttribute("diffuseColor", rgbstring); + } + $(function () { + $("#red, #green, #blue").slider({ + orientation: "horizontal", + range: "min", + max: 255, + value: 127, + slide: refreshDiffuseMaterial, + change: refreshDiffuseMaterial + }); + $("#red").slider("value", 255); + $("#green").slider("value", 140); + $("#blue").slider("value", 60); + }); + </script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/coordinatesystem.html b/public/X3DOMTutorial/coordinatesystem.html new file mode 100644 index 0000000..a1524c3 --- /dev/null +++ b/public/X3DOMTutorial/coordinatesystem.html @@ -0,0 +1,119 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> Coordinate system </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1> Coordinate system </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 1 1'> </background> + <!-- Invoke CoordinateAxes in other scenes as an Inline child inside a scaling Transform node, at the topmost level of the scene graph. --> + <!-- Each arrow goes from +1m to -1m to allow linear scaling to fit a scene --> + <!-- Note each label rotates about the scene's vertical Y axis for consistency, enabling local orientation by user --> + <Group> + <!-- Vertical Y arrow and label --> + <Group DEF='ArrowGreen'> + <Shape> + <Appearance DEF='Green'> + <Material diffuseColor='0 1 0'> </Material> + </Appearance> + <Cylinder DEF='ArrowCylinder' radius='.025' top='false'> </Cylinder> + </Shape> + <Transform translation='0 1 0'> + <Shape> + <Appearance USE='Green'> </Appearance> + <Cone DEF='ArrowCone' bottomRadius='.05' height='.1'> </Cone> + </Shape> + </Transform> + </Group> + <Transform translation='0 1.08 0'> + <Billboard> + <Shape> + <Appearance DEF='LABEL_APPEARANCE'> + <Material diffuseColor='0 0 0'> </Material> + </Appearance> + <Text string='"Y"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + <Transform rotation='0 0 1 -1.57079'> + <!-- Horizontal X arrow and label --> + <Group DEF='ArrowRed'> + <Shape> + <Appearance DEF='Red'> + <Material diffuseColor='.7 .1 .1' emissiveColor='.33 0 0' /> + </Appearance> + <Cylinder USE='ArrowCylinder'> </Cylinder> + </Shape> + <Transform translation='0 1 0'> + <Shape> + <Appearance USE='Red'> </Appearance> + <Cone USE='ArrowCone'> </Cone> + </Shape> + </Transform> + </Group> + <Transform rotation='0 0 1 1.57079' translation='.072 1.1 0'> + <!-- note label rotated back to original coordinate frame --> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"X"'> + <FontStyle USE='LABEL_FONT'> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <Transform rotation='1 0 0 1.57079'> + <!-- Z arrow and label --> + <Group DEF='ArrowBlue'> + <Shape> + <Appearance DEF='Blue'> + <Material diffuseColor='0 0 1'> </Material> + </Appearance> + <Cylinder USE='ArrowCylinder'> </Cylinder> + </Shape> + <Transform translation='0 1 0'> + <Shape> + <Appearance USE='Blue'> </Appearance> + <Cone USE='ArrowCone'> </Cone> + </Shape> + </Transform> + </Group> + <Transform rotation='1 0 0 -1.57079' translation='0 1.1 .072'> + <!-- note label rotated back to original coordinate frame --> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"Z"'> + <FontStyle USE='LABEL_FONT'> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + </Group> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + In X3DOM, a right hand coordinate system is used. The Y-axis is pointing up. <br> <br> + <img src="http://flylib.com/books/2/416/1/html/2/images/fig3-3.jpg" width="350" height="310" /> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/hellox3dom.html b/public/X3DOMTutorial/hellox3dom.html new file mode 100644 index 0000000..e8b077b --- /dev/null +++ b/public/X3DOMTutorial/hellox3dom.html @@ -0,0 +1,82 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> Hello X3DOM </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1> Hello X3DOM </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='0 1 0'> </background> + <Shape> + <Box> </Box> + </Shape> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + In this example, a simple 3D scene is integrated into a web page. This is done by the <X3D> tag in the + HTML document. + The <X3D> tag is interpreted by the x3dom.js Java Script library. You can either make a local copy of the + library or use it + from the server. It is recommended to use the library from the server to ensure that you always have the latest + version. + A local copy of the library is useful for development, if you are not always connected. + <br> + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 0 0'> </background> + <Shape id=box> + <Box> </Box> + </Shape> + </Scene> + </X3D> + </pre> + The <X3D> tag defines the size of the 3D canvas on the web page as well as the scene graph. + An <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/concepts.html#scenegraph" + target="_blank"> X3D scene graph </a> + is defined as a directed acyclic graph. + The nodes of the scene graph will be rendered on the screen from a given camera position. + The default camera position is (0,0,10) pointing to the negative z-Axis. + So objects at the center of the coordinate system will be displayed on the screen. + A shape node contains a geometry. In this example, it is a simple box. The center of the box is at (0,0,0) with + default size 2 in all dimensions + <br> + The color of the background can be changed in the attribute skyColor. Currently it is red. + The color is defined using <a href="http://en.wikipedia.org/wiki/RGB_color_model" target="_blank"> RGB color + model </a> + with arithmetic notation (0.0 t0 1.0 per value). <br> + The color of the Box can be changed by applying an appearance to the shape node. + In X3D, the <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/index.html" target="_blank"> Shape + node </a> associates a geometry node with + nodes that define that geometry's appearance. The following example draws a blue box. + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 0 0'> </background> + <Shape id=box> + <appearance > + <material diffuseColor='0 0 1'></material> + </appearance> + <Box> </Box> + </Shape> + </Scene> + </X3D> + </pre> + <shape> + <box></box> + </shape> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/ifsandmaterial.html b/public/X3DOMTutorial/ifsandmaterial.html new file mode 100644 index 0000000..e4b4a96 --- /dev/null +++ b/public/X3DOMTutorial/ifsandmaterial.html @@ -0,0 +1,103 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> indexed face set and material </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1>indexed face set and material</h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <!-- roof --> + <Appearance> + <Material diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 7 4 8 -1 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate DEF="pointset" point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 "> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- wall --> + <Appearance> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 1 5 4 -1 1 2 6 5 -1 2 3 7 6 -1 3 0 4 7 -1"> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- ground --> + <Appearance> + <Material diffuseColor="0.180, 0.280, 0.230"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 3 2 1 -1 "> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + One shape has only ony appearance. If different colors for the building elements roof, wall and ground surfaces + shall be used, + we need to have different shape for these elements. However, they can share the same point set. The following + example uses different + Material for roo, wall, and ground surfaces. + <br> + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <!-- roof --> + <Appearance> + <Material diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw ="true" + coordIndex=" 7 4 8 -1 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate DEF="pointset" point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 " > + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- wall --> + <Appearance> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw ="true" + coordIndex=" 0 1 5 4 -1 1 2 6 5 -1 2 3 7 6 -1 3 0 4 7 -1"> + <Coordinate USE="pointset" > + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- ground --> + <Appearance> + <Material diffuseColor="0.180, 0.280, 0.230"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw ="true" + coordIndex=" 0 3 2 1 -1 "> + <Coordinate USE="pointset" > + </Coordinate> + </IndexedFaceSet> + </Shape> + </Scene> + </X3D> + </pre> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/ifsandtexturecoord.html b/public/X3DOMTutorial/ifsandtexturecoord.html new file mode 100644 index 0000000..9b78f88 --- /dev/null +++ b/public/X3DOMTutorial/ifsandtexturecoord.html @@ -0,0 +1,94 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> indexed face set and material </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> +</head> + +<body> + <h1> indexed face set and material </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <!-- roof --> + <Appearance> + <Material diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 7 4 8 -1 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate DEF="pointset" point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 "> + </Coordinate> + <TextureCoordinate DEF="texcoord" point="0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0"> + </TextureCoorinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- wall 1 --> + <Appearance> + <ImageTexture + url="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Brick_wall_close-up_view.jpg/800px-Brick_wall_close-up_view.jpg"> + </ImageTexture> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex="0 1 5 4 -1 "> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- wall --> + <Appearance> + <ImageTexture + url="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Peach_Rinkysplash.jpg/800px-Peach_Rinkysplash.jpg"> + </ImageTexture> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 1 2 6 5 -1 2 3 7 6 -1 3 0 4 7 -1" + texCoordIndex="0 1 2 3 -1 0 1 2 3 -1 0 1 2 3"> + <Coordinate USE="pointset"> + </Coordinate> + <TextureCoordinate USE="texcoord"> + </TextureCoorinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- ground --> + <Appearance> + <Material diffuseColor="0.180, 0.280, 0.230"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 3 2 1 -1 "> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + Example: <a href="http://doc.x3dom.org/tutorials/basics/imagesMovies/index.html" target="_blank"> Using Images + and Movies as Textures </a> + <br> + <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/texturing.html" + target="_blank"> Textures </a> + <br> + <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/geometry3D.html#IndexedFaceSet" + target="_blank"> + How Textures are mapped on IndexedFaceSet: + </a><br> + <br> + <pre class="prettyprint"> + <Appearance> + <ImageTexture url="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Peach_Rinkysplash.jpg/800px-Peach_Rinkysplash.jpg"></ImageTexture> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + </pre> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/ifsandtextures.html b/public/X3DOMTutorial/ifsandtextures.html new file mode 100644 index 0000000..54b9bb2 --- /dev/null +++ b/public/X3DOMTutorial/ifsandtextures.html @@ -0,0 +1,87 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> indexed face set and material </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> +</head> + +<body> + <h1> indexed face set and material <h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <!-- roof --> + <Appearance> + <Material diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 7 4 8 -1 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate DEF="pointset" point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 "> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- wall 1 --> + <Appearance> + <ImageTexture url="img/brick_stone_wall_0119_01_preview.jpg"></ImageTexture> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex="0 1 5 4 -1 "> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- wall --> + <Appearance> + <ImageTexture + url="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Peach_Rinkysplash.jpg/800px-Peach_Rinkysplash.jpg"> + </ImageTexture> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 1 2 6 5 -1 2 3 7 6 -1 3 0 4 7 -1"> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape> + <!-- ground --> + <Appearance> + <Material diffuseColor="0.180, 0.280, 0.230"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 3 2 1 -1 "> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + Example: <a href="http://doc.x3dom.org/tutorials/basics/imagesMovies/index.html" target="_blank"> Using + Images and Movies as Textures </a> + <br> + <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/texturing.html" + target="_blank"> Textures </a> + <br> + <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/geometry3D.html#IndexedFaceSet" + target="_blank"> + How Textures are mapped on IndexedFaceSet: + </a><br> + <br> + <pre class="prettyprint"> + <Appearance> + <ImageTexture url="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Peach_Rinkysplash.jpg/800px-Peach_Rinkysplash.jpg"></ImageTexture> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + </pre> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/img/HFT_DL3_CMYK_maxH27mm.jpg b/public/X3DOMTutorial/img/HFT_DL3_CMYK_maxH27mm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4088489bbe11178930839bb58107ac76fe3169d7 GIT binary patch literal 686731 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 aVAHeS(+HST{p*$Le{vE3S9Y1dmj4Iy)ZiEZ literal 0 HcmV?d00001 diff --git a/public/X3DOMTutorial/img/Logo_bisH27mm.jpg b/public/X3DOMTutorial/img/Logo_bisH27mm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..086f02e48343496c54366fa43b0eaf6f9a44ff54 GIT binary patch literal 10454 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 literal 0 HcmV?d00001 diff --git a/public/X3DOMTutorial/img/brick_stone_wall_0119_01_preview.jpg b/public/X3DOMTutorial/img/brick_stone_wall_0119_01_preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e4f259a232c68b8a2a5ff904a86468a50bafa4e GIT binary patch literal 69996 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 AVgLXD literal 0 HcmV?d00001 diff --git a/public/X3DOMTutorial/index.html b/public/X3DOMTutorial/index.html index b846fd8..5b33f28 100644 --- a/public/X3DOMTutorial/index.html +++ b/public/X3DOMTutorial/index.html @@ -1,92 +1,61 @@ -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> -<title> Hello X3DOM </title> - <link rel="stylesheet" type="text/css" href="https://x3dom.org/download/1.8.1/x3dom.css"></link> - <script type="text/javascript" src = "https://x3dom.org/download/1.8.1/x3dom.js"></script> - <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>X3DOM Tutorials</title> + <style> + ul { + list-style-type: none; + padding: 0; + margin: 0; + } + + .button { + text-decoration: none; + display: block; + width: 500px; + height: 25px; + color: black; + background: lightgray; + padding: 10px; + text-align: center; + border-radius: 5px; + line-height: 25px; + margin-bottom: 10px; + font-family: sans-serif; + } + + .button:hover { + background-color: #4CAF50; + color: white; + } + + .center { + display: flex; + flex-direction: column; + align-items: center; + } + </style> </head> <body> - -<font size="4"> Hello X3DOM </font> - -<table width="100%" height="85%" border="0"> - <tr> - <th width="50%" align="center" valign="top" scope="col"> - - <X3D id="shapedata" width="600px" height="600px" style="float:left"> - <Scene> - - <background transparency='0' skyColor='0 1 0'> </background> - <Shape> - <Box> </Box> - </Shape> - - </Scene> - </X3D> - - </p> - </th> - - <th width="50%" align="left" valign="top" scope="col"> - In this example, a simple 3D scene is integrated into a web page. This is done by the <X3D> tag in the HTML document. - The <X3D> tag is interpreted by the x3dom.js Java Script library. You can either make a local copy of the library or use it - from the server. It is recommended to use the library from the server to ensure that you always have the latest version. - A local copy of the library is useful for development, if you are not always connected. - <br> - - <pre class="prettyprint"> - - <X3D id="shapedata" width="600px" height="600px" style="float:left"> - <Scene> - <background transparency='0' skyColor='1 0 0'> </background> - <Shape id=box> - <Box> </Box> - </Shape> - </Scene> - </X3D> - </pre> - - - The <X3D> tag defines the size of the 3D canvas on the web page as well as the scene graph. - An <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/concepts.html#scenegraph" target="_blank"> X3D scene graph </a> - is defined as a directed acyclic graph. - - The nodes of the scene graph will be rendered on the screen from a given camera position. - The default camera position is (0,0,10) pointing to the negative z-Axis. - So objects at the center of the coordinate system will be displayed on the screen. - A shape node contains a geometry. In this example, it is a simple box. The center of the box is at (0,0,0) with default size 2 in all dimensions - <br> - The color of the background can be changed in the attribute skyColor. Currently it is red. - The color is defined using <a href="http://en.wikipedia.org/wiki/RGB_color_model" target="_blank"> RGB color model </a> - with arithmetic notation (0.0 t0 1.0 per value). <br> - - The color of the Box can be changed by applying an appearance to the shape node. - In X3D, the <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/index.html" target="_blank"> Shape node </a> associates a geometry node with - nodes that define that geometry's appearance. The following example draws a blue box. - - <pre class="prettyprint"> - - <X3D id="shapedata" width="600px" height="600px" style="float:left"> - <Scene> - <background transparency='0' skyColor='1 0 0'> </background> - <Shape id=box> - <appearance > - <material diffuseColor='0 0 1'></material> - </appearance> - <Box> </Box> - </Shape> - </Scene> - </X3D> - </pre> - - <shape> - - <box></box> - </shape> - </th> - + <ul class="center"> + <li><a class="button" href="hellox3dom.html">hello X3DOM</a></li> + <li><a class="button" href="coordinatesystem.html">coordinate system</a></li> + <li><a class="button" href="transform.html">transform</a></li> + <li><a class="button" href="colorbrewer.html">color brewer</a></li> + <li><a class="button" href="colorbrewer2.html">color brewer 2</a></li> + <li><a class="button" href="indexedfaceset.html">indexedfaceset</a></li> + <li><a class="button" href="indexedfaceset2.html">indexedfaceset 2</a></li> + <li><a class="button" href="ifsandmaterial.html">indexedfaceset and material</a></li> + <li><a class="button" href="ifsandtexturecoord.html">indexedfaceset and texture coord</a></li> + <li><a class="button" href="ifsandtextures.html">indexedfaceset and textures</a></li> + <li><a class="button" href="terrain.html">terrain</a></li> + <li><a class="button" href="barchart.html">barchart</a></li> + <li><a class="button" href="toytown.html">toy town</a></li> + <li><a class="button" href="addnode.html">add node</a></li> + </ul> </body> + </html> \ No newline at end of file diff --git a/public/X3DOMTutorial/indexedfaceset.html b/public/X3DOMTutorial/indexedfaceset.html new file mode 100644 index 0000000..997415b --- /dev/null +++ b/public/X3DOMTutorial/indexedfaceset.html @@ -0,0 +1,244 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> Indexed Face Set </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1> Indexed Face Set </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material diffuseColor="0.5 0.5 0.5"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 1 5 4 -1 1 2 6 5 -1 2 3 7 6 -1 + 3 0 4 7 -1 0 3 2 1 -1 7 4 8 -1 + 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 "> + </Coordinate> + </IndexedFaceSet> + </Shape> + <!-- add points (as spheres) and labels --> + <!-- P0 --> + <Transform translation='-1 0 1'> + <Shape DEF='Point'> + <Appearance DEF='Green'> + <Material diffuseColor='0 1 0'> </Material> + </Appearance> + <Sphere radius="0.1"> </Sphere> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance DEF='LABEL_APPEARANCE'> + <Material diffuseColor='0 0 0'> </Material> + </Appearance> + <Text string='"P0"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P1 --> + <Transform translation='1 0 1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P1"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P2 --> + <Transform translation='1 0 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P2"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P3 --> + <Transform translation='-1 0 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P3"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P4 --> + <Transform translation='-1 2 1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P4"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P5 --> + <Transform translation='1 2 1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P5"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P6 --> + <Transform translation='1 2 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P6"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P7 --> + <Transform translation='-1 2 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P7"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P8 --> + <Transform translation='0 3 0'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 0.0 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P8"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + An IndexedFaceSet is used to define a polygonal shape. For example, it can be used to model a building. + The building geometry is given by a set of points P={P0, P1, ..., Pn} + and a set of polygons F={F0, F1, ..., Fm}. Each point Pi is given by its coordinates Pi=(xi,yi,zi). + Each polygon Fi is defined by a list of m coplanar points (m >=3) given in counterclockwise order: + Fi=(Pi0, Pi1, ... Pim) + <pre> + Example: + P = {P0, P1, P2, P3, P4, P5, P6, P7, P8} + with + P0 = (-1.0, 0.0, 1.0) + P1 = ( 1.0, 0.0, 1.0) + P2 = ( 1.0, 0.0, -1.0) + P3 = (-1.0, 0.0, -1.0) + P4 = (-1.0, 2.0, 1.0) + P5 = ( 1.0, 2.0, 1.0) + P6 = ( 1.0, 2.0, -1.0) + P7 = (-1.0, 2.0, -1.0) + P8 = ( 0.0, 3.0, 0.0) + F = {F0, F1, F2, F3, F4, F5, F6, F7, F8} + wall: + F0 = (P0, P1, P5, P4) + F1 = (P1, P2, P6, P5) + F2 = (P2, P3, P7, P6) + F3 = (P3, P0, P4, P7) + ground: + F4 = (P0, P3, P2, P1) + roof: + F5 = (P7, P4, P8) + F6 = (P4, P5, P8) + F7 = (P5, P6, P8) + F8 = (P6, P7, P8) + </pre> + <br> + In the IndexedFaceSet the point set P is defined in the Coordinate node. + The set of polygons F is defined in the attribute coordIndex. Each polygon is given by a list of point indices + followed by -1 to indicate the end of a polygon and the beginning of a new one. + <br> + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material diffuseColor="0.5 0.5 0.5"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw ="true" + coordIndex=" 0 1 5 4 -1 1 2 6 5 -1 2 3 7 6 -1 + 3 0 4 7 -1 0 3 2 1 -1 7 4 8 -1 + 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 " > + </Coordinate> + </IndexedFaceSet> + </Shape> + </Scene> + </X3D> + </pre> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/indexedfaceset2.html b/public/X3DOMTutorial/indexedfaceset2.html new file mode 100644 index 0000000..d4b02df --- /dev/null +++ b/public/X3DOMTutorial/indexedfaceset2.html @@ -0,0 +1,249 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> Indexed Face Set</title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1> Indexed Face Set </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material diffuseColor="0.5 0.5 0.5"> </Material> + </Appearance> + <IndexedFaceSet solid="false" ccw="true" coordIndex=" 0 4 5 1 -1 1 2 6 5 -1 2 3 7 6 -1 + 3 0 4 7 -1 0 1 2 3 -1 7 4 8 -1 + 4 5 8 -1 5 6 8 -1 6 7 8 -1 + 9 13 14 10 -1 10 11 15 14 -1 11 12 16 15 -1 + 12 9 13 16 -1 9 10 11 12 -1 16 13 17 -1 + 13 14 17 -1 14 15 17 -1 15 16 17 -1"> + <Coordinate point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0, + 2 0 1, 4 0 1, 4 0 -1, 2 0 -1, + 2 2 1, 4 2 1, 4 2 -1, 2 2 -1, 3 3 0 "> + </Coordinate> + </IndexedFaceSet> + </Shape> + <!-- add points (as spheres) and labels --> + <!-- P0 --> + <Transform translation='-1 0 1'> + <Shape DEF='Point'> + <Appearance DEF='Green'> + <Material diffuseColor='0 1 0'> </Material> + </Appearance> + <Sphere radius="0.1"> </Sphere> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance DEF='LABEL_APPEARANCE'> + <Material diffuseColor='0 0 0'> </Material> + </Appearance> + <Text string='"P0"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P1 --> + <Transform translation='1 0 1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P1"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P2 --> + <Transform translation='1 0 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P2"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P3 --> + <Transform translation='-1 0 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P3"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P4 --> + <Transform translation='-1 2 1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P4"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P5 --> + <Transform translation='1 2 1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P5"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P6 --> + <Transform translation='1 2 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P6"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P7 --> + <Transform translation='-1 2 -1'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 -0.75 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P7"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + <!-- P8 --> + <Transform translation='0 3 0'> + <Shape USE="Point"> + </Shape> + <Transform translation='0 0.0 0'> + <Billboard> + <Shape> + <Appearance USE='LABEL_APPEARANCE'> + </Appearance> + <Text string='"P8"'> + <FontStyle DEF='LABEL_FONT' family='"SANS"' justify='"MIDDLE" "MIDDLE"' size='.2'> </FontStyle> + </Text> + </Shape> + </Billboard> + </Transform> + </Transform> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + An IndexedFaceSet is used to define a polygonal shape. For example, it can be used to model a building. + The building geometry is given by a set of points P={P0, P1, ..., Pn} + and a set of polygons F={F0, F1, ..., Fm}. Each point Pi is given by its coordinates Pi=(xi,yi,zi). + Each polygon Fi is defined by a list of m coplanar points (m >=3) given in counterclockwise order: + Fi=(Pi0, Pi1, ... Pim) + <pre> + Example: + P = {P0, P1, P2, P3, P4, P5, P6, P7, P8} + with + P0 = (-1.0, 0.0, 1.0) + P1 = ( 1.0, 0.0, 1.0) + P2 = ( 1.0, 0.0, -1.0) + P3 = (-1.0, 0.0, -1.0) + P4 = (-1.0, 2.0, 1.0) + P5 = ( 1.0, 2.0, 1.0) + P6 = ( 1.0, 2.0, -1.0) + P7 = (-1.0, 2.0, -1.0) + P8 = ( 0.0, 3.0, 0.0) + F = {F0, F1, F2, F3, F4, F5, F6, F7, F8} + wall: + F0 = (P0, P1, P5, P4) + F1 = (P1, P2, P6, P5) + F2 = (P2, P3, P7, P6) + F3 = (P3, P0, P4, P7) + ground: + F4 = (P0, P3, P2, P1) + roof: + F5 = (P7, P4, P8) + F6 = (P4, P5, P8) + F7 = (P5, P6, P8) + F8 = (P6, P7, P8) + </pre> + <br> + In the IndexedFaceSet the point set P is defined in the Coordinate node. + The set of polygons F is defined in the attribute coordIndex. Each polygon is given by a list of point indices + followed by -1 to indicate the end of a polygon and the beginning of a new one. + <br> + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <Shape> + <Appearance> + <Material diffuseColor="0.5 0.5 0.5"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw ="true" + coordIndex=" 0 1 5 4 -1 1 2 6 5 -1 2 3 7 6 -1 + 3 0 4 7 -1 0 3 2 1 -1 7 4 8 -1 + 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 " > + </Coordinate> + </IndexedFaceSet> + </Shape> + </Scene> + </X3D> + </pre> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/terrain.html b/public/X3DOMTutorial/terrain.html new file mode 100644 index 0000000..edec487 --- /dev/null +++ b/public/X3DOMTutorial/terrain.html @@ -0,0 +1,92 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>Terrain</title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1>Terrain</h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <viewpoint position="0 0 4000"></viewpoint> + <background transparency='0' skyColor='1 1 1'> </background> + <Transform rotation='1 0 0 -1.57079'> + <Shape> + <appearance> + <material diffuseColor='0.9, 0.7, 0.4'></material> + </appearance> + <IndexedTriangleSet + index="0 1 2 0 3 1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 4 6 19 20 21 22 7 9 23 10 24 11 20 25 21 26 27 28 16 29 17 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 30 32 63 33 35 64 36 38 65 66 67 68 39 41 69 42 44 70 45 71 46 51 72 52 48 73 49 66 74 67 54 75 55 57 76 58 60 77 61 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 78 80 129 81 83 130 84 86 131 87 89 132 90 92 133 134 135 136 93 95 137 96 98 138 99 101 139 102 140 103 108 141 109 105 142 106 114 143 115 111 144 112 134 145 135 117 146 118 120 147 121 123 148 124 126 149 127 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 150 152 219 153 155 220 156 158 221 159 161 222 162 164 223 165 167 224 168 170 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 183 241 184 189 242 190 186 243 187 195 244 196 192 245 193 201 246 202 198 247 199 248 249 250 204 251 205 207 252 208 210 253 211 213 254 214 216 255 217 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 256 258 325 259 261 326 262 264 327 328 329 330 331 332 333 268 270 334 271 273 335 274 276 336 277 279 337 280 282 338 283 339 284 289 340 290 286 341 287 295 342 296 292 343 293 301 344 302 298 345 299 307 346 308 304 347 305 331 348 332 310 349 311 313 350 314 316 351 317 319 352 320 322 353 323 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 354 356 432 357 359 433 360 362 434 363 365 435 436 437 438 366 368 439 369 371 440 372 374 441 375 377 442 378 380 443 381 383 444 385 384 445 390 446 391 387 447 388 396 448 397 393 449 394 402 450 403 399 451 400 408 452 409 405 453 406 414 454 415 411 455 412 436 456 437 417 457 418 420 458 421 423 459 424 426 460 427 429 461 430 462 463 432 434 362 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 464 546 547 434 464 548 465 467 549 468 470 550 551 552 553 471 473 554 474 476 555 477 479 556 480 482 557 483 485 558 486 488 559 489 491 560 561 493 492 498 562 499 497 563 495 504 564 505 501 565 502 510 566 511 507 567 508 516 568 517 513 569 514 522 570 523 519 571 520 528 572 529 525 573 526 551 574 552 531 575 532 534 576 535 537 577 538 540 578 541 543 579 544 548 464 547 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 560 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 548 547 657 658 659 660 583 585 661 586 588 662 663 664 665 589 591 666 592 594 667 595 597 668 598 600 669 601 603 670 604 606 671 607 609 610 610 560 672 673 613 612 618 674 619 615 675 616 624 676 625 621 677 622 630 678 631 627 679 628 636 680 637 633 681 634 642 682 643 639 683 640 648 684 649 645 685 646 654 686 655 651 687 652 663 688 664 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 689 691 749 750 751 752 695 697 753 698 700 754 701 755 702 707 756 708 704 757 705 713 758 714 710 759 711 719 760 720 716 761 717 725 762 726 722 763 723 731 764 732 728 765 729 737 766 738 734 767 735 743 768 744 740 769 741 746 770 747 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 771 773 828 829 830 831 777 779 832 780 833 781 786 834 787 783 835 784 792 836 793 789 837 790 798 838 799 795 839 796 804 798 805 801 840 802 810 841 811 807 842 808 816 843 817 813 844 814 822 845 823 819 846 820 825 847 826 848 849 850 851 852 853 854 855 856 857 858 859 860 856 861 862 863 864 865 861 838 866 867 868 869 838 798 870 871 872 873 798 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 848 850 896 897 898 899 854 900 855 860 854 856 857 901 858 865 860 861 862 902 863 869 865 838 866 903 867 873 869 798 870 904 871 878 873 879 875 905 876 884 906 885 881 907 882 890 908 891 887 909 888 893 910 894 911 912 913 900 914 855 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 911 913 933 900 934 914 915 935 916 918 936 919 921 937 922 924 938 925 927 939 928 930 940 931 934 941 914 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 934 957 941 942 958 943 945 959 946 948 960 949 951 961 952 954 962 955 957 963 941 964 965 966 967 968 969 970 971 972 973 974 975 957 976 963 964 977 965 967 978 968 970 979 971 973 980 974 976 977 963 977 978 981 978 979 982 979 980 973 976 983 977 977 984 978 978 985 979 979 986 980 983 984 977 984 985 978 985 986 979 983 987 984 984 988 985 985 989 986 987 988 984 988 989 985 987 990 988 988 991 989 990 991 988 990 992 991"> + <Coordinate DEF="_coords" + point="354.3307 35.6428 0 472.4409 52.93105 -118.1102 472.4409 35.6428 0 354.3307 52.93105 -118.1102 472.4409 35.6428 0 472.4409 52.93105 -118.1102 590.5512 46.75638 -118.1102 354.3307 19.82451 118.1102 354.3307 35.6428 0 472.4409 35.6428 0 236.2205 31.31463 0 354.3307 52.93105 -118.1102 354.3307 35.6428 0 354.3307 52.93105 -118.1102 472.4409 59.55834 -236.2205 472.4409 52.93105 -118.1102 472.4409 52.93105 -118.1102 590.5512 52.93105 -236.2205 590.5512 46.75638 -118.1102 590.5512 30.66875 0 236.2205 35.34792 118.1102 354.3307 35.6428 0 354.3307 19.82451 118.1102 472.4409 14.29063 118.1102 236.2205 46.75638 -118.1102 236.2205 31.31463 0 354.3307 52.93105 -118.1102 354.3307 59.55834 -236.2205 472.4409 59.55834 -236.2205 472.4409 59.55834 -236.2205 590.5512 46.75638 -118.1102 590.5512 52.93105 -236.2205 708.6614 35.6428 -236.2205 590.5512 30.66875 0 590.5512 46.75638 -118.1102 708.6614 30.66875 -118.1102 472.4409 14.29063 118.1102 472.4409 35.6428 0 590.5512 30.66875 0 236.2205 57.10271 236.2205 236.2205 35.34792 118.1102 354.3307 19.82451 118.1102 354.3307 21.3678 236.2205 354.3307 19.82451 118.1102 472.4409 14.29063 118.1102 118.1102 20.32498 0 236.2205 46.75638 -118.1102 236.2205 31.31463 0 236.2205 46.75638 -118.1102 354.3307 59.55834 -236.2205 354.3307 52.93105 -118.1102 118.1102 37.27659 118.1102 236.2205 31.31463 0 236.2205 35.34792 118.1102 354.3307 59.55834 -236.2205 472.4409 53.31618 -354.3307 472.4409 59.55834 -236.2205 472.4409 59.55834 -236.2205 590.5512 46.75638 -354.3307 590.5512 52.93105 -236.2205 590.5512 52.93105 -236.2205 708.6614 30.66875 -354.3307 708.6614 35.6428 -236.2205 708.6614 30.66875 -118.1102 708.6614 17.88719 0 590.5512 11.00248 118.1102 118.1102 71.4288 236.2205 236.2205 35.34792 118.1102 236.2205 57.10271 236.2205 354.3307 21.3678 236.2205 472.4409 -2.33177 236.2205 118.1102 30.66875 -118.1102 118.1102 20.32498 0 236.2205 52.93105 -236.2205 118.1102 37.27659 118.1102 354.3307 53.97681 -354.3307 472.4409 53.31618 -354.3307 590.5512 46.75638 -354.3307 708.6614 35.6428 -236.2205 708.6614 30.66875 -354.3307 826.7717 11.00248 -354.3307 708.6614 30.66875 -118.1102 708.6614 35.6428 -236.2205 826.7717 14.29063 -236.2205 708.6614 17.88719 0 708.6614 30.66875 -118.1102 826.7717 11.00248 -118.1102 590.5512 11.00248 118.1102 590.5512 30.66875 0 708.6614 17.88719 0 472.4409 -2.33177 236.2205 472.4409 14.29063 118.1102 590.5512 11.00248 118.1102 118.1102 90.14421 354.3307 118.1102 71.4288 236.2205 236.2205 57.10271 236.2205 236.2205 69.5469 354.3307 236.2205 57.10271 236.2205 354.3307 21.3678 236.2205 354.3307 24.84853 354.3307 354.3307 21.3678 236.2205 472.4409 -2.33177 236.2205 0 0 0 118.1102 30.66875 -118.1102 118.1102 20.32498 0 118.1102 30.66875 -118.1102 236.2205 52.93105 -236.2205 236.2205 46.75638 -118.1102 0 17.68169 118.1102 118.1102 20.32498 0 118.1102 37.27659 118.1102 236.2205 52.93105 -236.2205 354.3307 53.97681 -354.3307 354.3307 59.55834 -236.2205 0 51.99268 236.2205 118.1102 37.27659 118.1102 118.1102 71.4288 236.2205 354.3307 53.97681 -354.3307 472.4409 38.18617 -472.4409 472.4409 53.31618 -354.3307 472.4409 53.31618 -354.3307 590.5512 31.45388 -472.4409 590.5512 46.75638 -354.3307 590.5512 46.75638 -354.3307 708.6614 17.89071 -472.4409 708.6614 30.66875 -354.3307 708.6614 30.66875 -354.3307 826.7717 2.855471 -472.4409 826.7717 11.00248 -354.3307 826.7717 14.29063 -236.2205 826.7717 11.00248 -118.1102 826.7717 2.855471 0 708.6614 2.855471 118.1102 590.5512 -4.462562 236.2205 0 69.5469 354.3307 118.1102 71.4288 236.2205 118.1102 90.14421 354.3307 236.2205 69.5469 354.3307 354.3307 24.84853 354.3307 472.4409 -7.134798 354.3307 0 10.07483 -118.1102 0 0 0 118.1102 35.6428 -236.2205 0 17.68169 118.1102 236.2205 48.10602 -354.3307 0 51.99268 236.2205 354.3307 39.85344 -472.4409 472.4409 38.18617 -472.4409 590.5512 31.45388 -472.4409 708.6614 17.89071 -472.4409 826.7717 11.00248 -354.3307 826.7717 2.855471 -472.4409 944.8819 -7.690696 -472.4409 826.7717 14.29063 -236.2205 826.7717 11.00248 -354.3307 944.8819 -4.462562 -354.3307 826.7717 11.00248 -118.1102 826.7717 14.29063 -236.2205 944.8819 -2.97764 -236.2205 826.7717 2.855471 0 826.7717 11.00248 -118.1102 944.8819 -4.462562 -118.1102 708.6614 2.855471 118.1102 708.6614 17.88719 0 826.7717 2.855471 0 590.5512 -4.462562 236.2205 590.5512 11.00248 118.1102 708.6614 2.855471 118.1102 472.4409 -7.134798 354.3307 472.4409 -2.33177 236.2205 590.5512 -4.462562 236.2205 0 69.5469 472.4409 0 69.5469 354.3307 118.1102 90.14421 354.3307 118.1102 90.14421 472.4409 118.1102 90.14421 354.3307 236.2205 69.5469 354.3307 236.2205 69.5469 472.4409 236.2205 69.5469 354.3307 354.3307 24.84853 354.3307 354.3307 24.84853 472.4409 354.3307 24.84853 354.3307 472.4409 -7.134798 354.3307 -118.1102 -57.12892 0 0 10.07483 -118.1102 0 0 0 0 10.07483 -118.1102 118.1102 35.6428 -236.2205 118.1102 30.66875 -118.1102 -118.1102 -39.00548 118.1102 0 0 0 0 17.68169 118.1102 118.1102 35.6428 -236.2205 236.2205 48.10602 -354.3307 236.2205 52.93105 -236.2205 -118.1102 6.824681 236.2205 0 17.68169 118.1102 0 51.99268 236.2205 236.2205 48.10602 -354.3307 354.3307 39.85344 -472.4409 354.3307 53.97681 -354.3307 -118.1102 24.84853 354.3307 0 51.99268 236.2205 0 69.5469 354.3307 354.3307 39.85344 -472.4409 472.4409 19.91021 -590.5512 472.4409 38.18617 -472.4409 472.4409 38.18617 -472.4409 590.5512 13.78903 -590.5512 590.5512 31.45388 -472.4409 590.5512 31.45388 -472.4409 708.6614 3.640598 -590.5512 708.6614 17.89071 -472.4409 708.6614 17.89071 -472.4409 826.7717 -5.736107 -590.5512 826.7717 2.855471 -472.4409 826.7717 2.855471 -472.4409 944.8819 -9.572591 -590.5512 944.8819 -7.690696 -472.4409 944.8819 -4.462562 -354.3307 944.8819 -2.97764 -236.2205 944.8819 -4.462562 -118.1102 944.8819 -7.690696 0 826.7717 -5.736107 118.1102 708.6614 -7.690696 236.2205 590.5512 -9.572591 354.3307 -118.1102 24.84853 472.4409 0 69.5469 354.3307 0 69.5469 472.4409 0 69.5469 472.4409 118.1102 90.14421 354.3307 118.1102 90.14421 472.4409 118.1102 90.14421 472.4409 236.2205 69.5469 354.3307 236.2205 69.5469 472.4409 236.2205 69.5469 472.4409 354.3307 24.84853 354.3307 354.3307 24.84853 472.4409 354.3307 24.84853 472.4409 472.4409 -7.134798 354.3307 472.4409 -7.134798 472.4409 -118.1102 -46.41908 -118.1102 -118.1102 -57.12892 0 0 13.47484 -236.2205 -118.1102 -39.00548 118.1102 118.1102 31.71451 -354.3307 -118.1102 6.824681 236.2205 236.2205 35.55231 -472.4409 -118.1102 24.84853 472.4409 -118.1102 24.84853 354.3307 0 69.5469 354.3307 354.3307 22.52593 -590.5512 472.4409 19.91021 -590.5512 590.5512 13.78903 -590.5512 708.6614 3.640598 -590.5512 826.7717 -5.736107 -590.5512 826.7717 -5.736107 118.1102 826.7717 2.855471 0 944.8819 -7.690696 0 708.6614 -7.690696 236.2205 708.6614 2.855471 118.1102 826.7717 -5.736107 118.1102 590.5512 -9.572591 354.3307 590.5512 -4.462562 236.2205 708.6614 -7.690696 236.2205 472.4409 -7.134798 472.4409 472.4409 -7.134798 354.3307 590.5512 -9.572591 354.3307 -118.1102 15.65856 590.5512 -118.1102 24.84853 472.4409 0 69.5469 472.4409 0 51.99268 590.5512 0 69.5469 472.4409 118.1102 90.14421 472.4409 118.1102 69.5469 590.5512 118.1102 90.14421 472.4409 236.2205 69.5469 472.4409 236.2205 51.99268 590.5512 236.2205 69.5469 472.4409 354.3307 24.84853 472.4409 354.3307 14.77285 590.5512 354.3307 24.84853 472.4409 472.4409 -7.134798 472.4409 -236.2205 -124.0258 0 -118.1102 -46.41908 -118.1102 -118.1102 -57.12892 0 -118.1102 -46.41908 -118.1102 0 13.47484 -236.2205 0 10.07483 -118.1102 -236.2205 -97.99729 118.1102 -118.1102 -57.12892 0 -118.1102 -39.00548 118.1102 0 13.47484 -236.2205 118.1102 31.71451 -354.3307 118.1102 35.6428 -236.2205 -236.2205 -43.89348 236.2205 -118.1102 -39.00548 118.1102 -118.1102 6.824681 236.2205 118.1102 31.71451 -354.3307 236.2205 35.55231 -472.4409 236.2205 48.10602 -354.3307 -236.2205 -8.062447 354.3307 -118.1102 6.824681 236.2205 -118.1102 24.84853 354.3307 236.2205 35.55231 -472.4409 354.3307 22.52593 -590.5512 354.3307 39.85344 -472.4409 -236.2205 0.4540042 472.4409 -118.1102 24.84853 354.3307 -118.1102 24.84853 472.4409 354.3307 22.52593 -590.5512 472.4409 5.757028 -708.6614 472.4409 19.91021 -590.5512 472.4409 19.91021 -590.5512 590.5512 1.157014 -708.6614 590.5512 13.78903 -590.5512 590.5512 13.78903 -590.5512 708.6614 -5.147323 -708.6614 708.6614 3.640598 -590.5512 708.6614 3.640598 -590.5512 826.7717 -9.187465 -708.6614 826.7717 -5.736107 -590.5512 826.7717 -5.736107 -590.5512 944.8819 -9.572591 -708.6614 944.8819 -9.572591 -590.5512 944.8819 -9.572591 118.1102 826.7717 -9.572591 236.2205 708.6614 -9.572591 354.3307 472.4409 -7.134798 472.4409 590.5512 -9.572591 354.3307 590.5512 -9.572591 472.4409 -236.2205 24.45906 590.5512 -118.1102 24.84853 472.4409 -118.1102 15.65856 590.5512 0 51.99268 590.5512 118.1102 69.5469 590.5512 236.2205 51.99268 590.5512 354.3307 14.77285 590.5512 472.4409 -8.92672 590.5512 -236.2205 -128.7477 -118.1102 -236.2205 -124.0258 0 -118.1102 -41.67618 -236.2205 -236.2205 -97.99729 118.1102 0 8.308461 -354.3307 -236.2205 -43.89348 236.2205 118.1102 22.09782 -472.4409 -236.2205 -8.062447 354.3307 236.2205 20.25569 -590.5512 -236.2205 0.4540042 472.4409 354.3307 8.549946 -708.6614 472.4409 5.757028 -708.6614 590.5512 1.157014 -708.6614 708.6614 -5.147323 -708.6614 826.7717 -9.187465 -708.6614 826.7717 -9.572591 236.2205 826.7717 -5.736107 118.1102 944.8819 -9.572591 118.1102 708.6614 -9.572591 354.3307 708.6614 -7.690696 236.2205 826.7717 -9.572591 236.2205 590.5512 -9.572591 472.4409 590.5512 -9.572591 354.3307 708.6614 -9.572591 354.3307 472.4409 -8.92672 590.5512 472.4409 -7.134798 472.4409 590.5512 -9.572591 472.4409 -236.2205 37.63034 708.6614 -236.2205 24.45906 590.5512 -118.1102 15.65856 590.5512 -118.1102 -0.6956833 708.6614 -118.1102 15.65856 590.5512 0 51.99268 590.5512 0 14.77285 708.6614 0 51.99268 590.5512 118.1102 69.5469 590.5512 118.1102 24.84853 708.6614 118.1102 69.5469 590.5512 236.2205 51.99268 590.5512 236.2205 14.77285 708.6614 236.2205 51.99268 590.5512 354.3307 14.77285 590.5512 354.3307 -4.038716 708.6614 354.3307 14.77285 590.5512 472.4409 -8.92672 590.5512 -354.3307 -240.1343 0 -236.2205 -128.7477 -118.1102 -236.2205 -124.0258 0 -236.2205 -128.7477 -118.1102 -118.1102 -41.67618 -236.2205 -118.1102 -46.41908 -118.1102 -354.3307 -123.21 118.1102 -236.2205 -124.0258 0 -236.2205 -97.99729 118.1102 -118.1102 -41.67618 -236.2205 0 8.308461 -354.3307 0 13.47484 -236.2205 -354.3307 -59.01081 236.2205 -236.2205 -97.99729 118.1102 -236.2205 -43.89348 236.2205 0 8.308461 -354.3307 118.1102 22.09782 -472.4409 118.1102 31.71451 -354.3307 -354.3307 -12.18823 354.3307 -236.2205 -43.89348 236.2205 -236.2205 -8.062447 354.3307 118.1102 22.09782 -472.4409 236.2205 20.25569 -590.5512 236.2205 35.55231 -472.4409 -354.3307 23.81319 472.4409 -236.2205 -8.062447 354.3307 -236.2205 0.4540042 472.4409 236.2205 20.25569 -590.5512 354.3307 8.549946 -708.6614 354.3307 22.52593 -590.5512 -354.3307 74.8541 590.5512 -236.2205 0.4540042 472.4409 -236.2205 24.45906 590.5512 354.3307 8.549946 -708.6614 472.4409 1.954996 -826.7717 472.4409 5.757028 -708.6614 472.4409 5.757028 -708.6614 590.5512 -1.337298 -826.7717 590.5512 1.157014 -708.6614 590.5512 1.157014 -708.6614 708.6614 -5.361954 -826.7717 708.6614 -5.147323 -708.6614 708.6614 -5.147323 -708.6614 826.7717 -8.526836 -826.7717 826.7717 -9.187465 -708.6614 826.7717 -9.187465 -708.6614 944.8819 -9.572591 -826.7717 944.8819 -9.572591 -708.6614 944.8819 -9.572591 236.2205 826.7717 -9.572591 354.3307 708.6614 -9.572591 472.4409 590.5512 -19.11479 590.5512 -354.3307 98.92684 708.6614 -236.2205 24.45906 590.5512 -236.2205 37.63034 708.6614 -118.1102 -0.6956833 708.6614 0 14.77285 708.6614 118.1102 24.84853 708.6614 236.2205 14.77285 708.6614 354.3307 -4.038716 708.6614 472.4409 -9.572591 708.6614 -354.3307 -299.406 -118.1102 -354.3307 -240.1343 0 -236.2205 -122.3015 -236.2205 -354.3307 -123.21 118.1102 -118.1102 -47.93937 -354.3307 -354.3307 -59.01081 236.2205 0 4.583054 -472.4409 -354.3307 -12.18823 354.3307 118.1102 11.09076 -590.5512 -354.3307 23.81319 472.4409 236.2205 8.328656 -708.6614 -354.3307 74.8541 590.5512 354.3307 3.883989 -826.7717 472.4409 1.954996 -826.7717 590.5512 -1.337298 -826.7717 708.6614 -5.361954 -826.7717 826.7717 -8.526836 -826.7717 826.7717 -9.572591 354.3307 826.7717 -9.572591 236.2205 826.7717 -9.572591 354.3307 590.5512 -19.11479 590.5512 590.5512 -9.572591 472.4409 708.6614 -9.572591 472.4409 472.4409 -9.572591 708.6614 472.4409 -8.92672 590.5512 590.5512 -19.11479 590.5512 -354.3307 74.8541 826.7717 -354.3307 98.92684 708.6614 -236.2205 37.63034 708.6614 -236.2205 23.81319 826.7717 -236.2205 37.63034 708.6614 -118.1102 -0.6956833 708.6614 -118.1102 -8.686885 826.7717 -118.1102 -0.6956833 708.6614 0 14.77285 708.6614 0 -8.92672 826.7717 0 14.77285 708.6614 118.1102 24.84853 708.6614 118.1102 -7.134798 826.7717 118.1102 24.84853 708.6614 236.2205 14.77285 708.6614 236.2205 -8.92672 826.7717 236.2205 14.77285 708.6614 354.3307 -4.038716 708.6614 354.3307 -9.572591 826.7717 354.3307 -4.038716 708.6614 472.4409 -9.572591 708.6614 -472.4409 -208.2875 0 -354.3307 -299.406 -118.1102 -354.3307 -240.1343 0 -236.2205 -122.3015 -236.2205 -236.2205 -128.7477 -118.1102 -354.3307 -299.406 -118.1102 -472.4409 -97.99729 118.1102 -354.3307 -240.1343 0 -354.3307 -123.21 118.1102 -236.2205 -122.3015 -236.2205 -118.1102 -47.93937 -354.3307 -118.1102 -41.67618 -236.2205 -472.4409 -44.53935 236.2205 -354.3307 -123.21 118.1102 -354.3307 -59.01081 236.2205 -118.1102 -47.93937 -354.3307 0 4.583054 -472.4409 0 8.308461 -354.3307 -472.4409 -7.157206 354.3307 -354.3307 -59.01081 236.2205 -354.3307 -12.18823 354.3307 0 4.583054 -472.4409 118.1102 11.09076 -590.5512 118.1102 22.09782 -472.4409 -472.4409 37.63034 472.4409 -354.3307 -12.18823 354.3307 -354.3307 23.81319 472.4409 118.1102 11.09076 -590.5512 236.2205 8.328656 -708.6614 236.2205 20.25569 -590.5512 -472.4409 98.92684 590.5512 -354.3307 23.81319 472.4409 -354.3307 74.8541 590.5512 236.2205 8.328656 -708.6614 354.3307 3.883989 -826.7717 354.3307 8.549946 -708.6614 -472.4409 127.1727 708.6614 -354.3307 74.8541 590.5512 -354.3307 98.92684 708.6614 354.3307 3.883989 -826.7717 472.4409 3.218627 -944.8819 472.4409 1.954996 -826.7717 472.4409 1.954996 -826.7717 590.5512 -0.3193718 -944.8819 590.5512 -1.337298 -826.7717 590.5512 -1.337298 -826.7717 708.6614 -4.68904 -944.8819 708.6614 -5.361954 -826.7717 708.6614 -5.361954 -826.7717 826.7717 -8.22295 -944.8819 826.7717 -8.526836 -826.7717 826.7717 -8.526836 -826.7717 944.8819 -9.572591 -944.8819 944.8819 -9.572591 -826.7717 944.8819 -9.572591 236.2205 944.8819 -9.572591 354.3307 826.7717 -9.572591 472.4409 708.6614 -68.92579 590.5512 590.5512 -68.92579 708.6614 -472.4409 98.92684 826.7717 -354.3307 98.92684 708.6614 -354.3307 74.8541 826.7717 -236.2205 23.81319 826.7717 -118.1102 -8.686885 826.7717 0 -8.92672 826.7717 118.1102 -7.134798 826.7717 236.2205 -8.92672 826.7717 354.3307 -9.572591 826.7717 472.4409 -9.572591 826.7717 -472.4409 -177.2051 -118.1102 -472.4409 -208.2875 0 -354.3307 -207.4029 -236.2205 -472.4409 -97.99729 118.1102 -236.2205 -110.4349 -354.3307 -472.4409 -44.53935 236.2205 -118.1102 -37.65593 -472.4409 -472.4409 -7.157206 354.3307 0 -0.1165306 -590.5512 -472.4409 37.63034 472.4409 118.1102 3.83689 -708.6614 -472.4409 98.92684 590.5512 236.2205 4.574885 -826.7717 -472.4409 127.1727 708.6614 354.3307 4.574885 -944.8819 472.4409 3.218627 -944.8819 590.5512 -0.3193718 -944.8819 708.6614 -4.68904 -944.8819 826.7717 -8.22295 -944.8819 708.6614 -68.92579 590.5512 708.6614 -9.572591 472.4409 826.7717 -9.572591 472.4409 590.5512 -68.92579 708.6614 590.5512 -19.11479 590.5512 708.6614 -68.92579 590.5512 472.4409 -9.572591 826.7717 472.4409 -9.572591 708.6614 590.5512 -68.92579 708.6614 -472.4409 37.63034 944.8819 -472.4409 98.92684 826.7717 -354.3307 74.8541 826.7717 -354.3307 23.81319 944.8819 -354.3307 74.8541 826.7717 -236.2205 23.81319 826.7717 -236.2205 -1.983788 944.8819 -236.2205 23.81319 826.7717 -118.1102 -8.686885 826.7717 -118.1102 -9.572591 944.8819 -118.1102 -8.686885 826.7717 0 -8.92672 826.7717 0 -9.572591 944.8819 0 -8.92672 826.7717 118.1102 -7.134798 826.7717 118.1102 -9.572591 944.8819 118.1102 -7.134798 826.7717 236.2205 -8.92672 826.7717 236.2205 -9.572591 944.8819 236.2205 -8.92672 826.7717 354.3307 -9.572591 826.7717 354.3307 -9.572591 944.8819 354.3307 -9.572591 826.7717 -590.5512 -59.01081 0 -472.4409 -177.2051 -118.1102 -472.4409 -208.2875 0 -472.4409 -177.2051 -118.1102 -354.3307 -207.4029 -236.2205 -354.3307 -299.406 -118.1102 -590.5512 -44.53935 118.1102 -472.4409 -208.2875 0 -472.4409 -97.99729 118.1102 -354.3307 -207.4029 -236.2205 -236.2205 -110.4349 -354.3307 -236.2205 -122.3015 -236.2205 -590.5512 -17.52076 236.2205 -472.4409 -97.99729 118.1102 -472.4409 -44.53935 236.2205 -236.2205 -110.4349 -354.3307 -118.1102 -37.65593 -472.4409 -118.1102 -47.93937 -354.3307 -590.5512 -8.686885 354.3307 -472.4409 -44.53935 236.2205 -472.4409 -7.157206 354.3307 -118.1102 -37.65593 -472.4409 0 -0.1165306 -590.5512 0 4.583054 -472.4409 -590.5512 23.81319 472.4409 -472.4409 -7.157206 354.3307 -472.4409 37.63034 472.4409 0 -0.1165306 -590.5512 118.1102 3.83689 -708.6614 118.1102 11.09076 -590.5512 -590.5512 74.8541 590.5512 -472.4409 37.63034 472.4409 -472.4409 98.92684 590.5512 118.1102 3.83689 -708.6614 236.2205 4.574885 -826.7717 236.2205 8.328656 -708.6614 -590.5512 98.92684 708.6614 -472.4409 98.92684 590.5512 -472.4409 127.1727 708.6614 236.2205 4.574885 -826.7717 354.3307 4.574885 -944.8819 354.3307 3.883989 -826.7717 -590.5512 74.8541 826.7717 -472.4409 127.1727 708.6614 -472.4409 98.92684 826.7717 944.8819 -9.572591 472.4409 708.6614 -68.92579 590.5512 826.7717 -9.572591 472.4409 826.7717 -68.92579 590.5512 708.6614 -181.5167 708.6614 590.5512 -19.11479 826.7717 -590.5512 23.81319 944.8819 -472.4409 98.92684 826.7717 -472.4409 37.63034 944.8819 -354.3307 23.81319 944.8819 -236.2205 -1.983788 944.8819 -118.1102 -9.572591 944.8819 0 -9.572591 944.8819 118.1102 -9.572591 944.8819 236.2205 -9.572591 944.8819 472.4409 -9.572591 944.8819 -590.5512 -51.52911 -118.1102 -590.5512 -59.01081 0 -472.4409 -122.3015 -236.2205 -590.5512 -44.53935 118.1102 -354.3307 -139.0247 -354.3307 -590.5512 -17.52076 236.2205 -236.2205 -87.33477 -472.4409 -590.5512 -8.686885 354.3307 -118.1102 -14.01897 -590.5512 -590.5512 23.81319 472.4409 0 -1.337298 -708.6614 -590.5512 74.8541 590.5512 118.1102 3.218627 -826.7717 -590.5512 98.92684 708.6614 236.2205 3.883989 -944.8819 -590.5512 74.8541 826.7717 826.7717 -68.92579 590.5512 826.7717 -9.572591 472.4409 944.8819 -9.572591 472.4409 708.6614 -181.5167 708.6614 708.6614 -68.92579 590.5512 826.7717 -68.92579 590.5512 590.5512 -19.11479 826.7717 590.5512 -68.92579 708.6614 708.6614 -181.5167 708.6614 472.4409 -9.572591 944.8819 472.4409 -9.572591 826.7717 590.5512 -19.11479 826.7717 -708.6614 -13.07393 0 -590.5512 -51.52911 -118.1102 -590.5512 -59.01081 0 -590.5512 -51.52911 -118.1102 -472.4409 -122.3015 -236.2205 -472.4409 -177.2051 -118.1102 -708.6614 -10.50024 118.1102 -590.5512 -59.01081 0 -590.5512 -44.53935 118.1102 -472.4409 -122.3015 -236.2205 -354.3307 -139.0247 -354.3307 -354.3307 -207.4029 -236.2205 -708.6614 -9.572591 236.2205 -590.5512 -44.53935 118.1102 -590.5512 -17.52076 236.2205 -354.3307 -139.0247 -354.3307 -236.2205 -87.33477 -472.4409 -236.2205 -110.4349 -354.3307 -708.6614 -9.572591 354.3307 -590.5512 -17.52076 236.2205 -590.5512 -8.686885 354.3307 -236.2205 -87.33477 -472.4409 -118.1102 -14.01897 -590.5512 -118.1102 -37.65593 -472.4409 -708.6614 -1.983788 472.4409 -590.5512 -8.686885 354.3307 -590.5512 23.81319 472.4409 -118.1102 -14.01897 -590.5512 0 -1.337298 -708.6614 0 -0.1165306 -590.5512 -708.6614 23.81319 590.5512 -590.5512 23.81319 472.4409 -590.5512 74.8541 590.5512 0 -1.337298 -708.6614 118.1102 3.218627 -826.7717 118.1102 3.83689 -708.6614 -708.6614 37.63034 708.6614 -590.5512 74.8541 590.5512 -590.5512 98.92684 708.6614 118.1102 3.218627 -826.7717 236.2205 3.883989 -944.8819 236.2205 4.574885 -826.7717 -708.6614 23.81319 826.7717 -590.5512 98.92684 708.6614 -590.5512 74.8541 826.7717 -708.6614 -1.983788 944.8819 -590.5512 74.8541 826.7717 -590.5512 23.81319 944.8819 944.8819 -19.11479 590.5512 708.6614 -181.5167 708.6614 826.7717 -68.92579 590.5512 826.7717 -181.5167 708.6614 708.6614 -68.92579 826.7717 590.5512 -9.572591 944.8819 -708.6614 -10.50024 -118.1102 -708.6614 -13.07393 0 -590.5512 -48.27113 -236.2205 -708.6614 -10.50024 118.1102 -472.4409 -110.4349 -354.3307 -708.6614 -9.572591 236.2205 -354.3307 -109.5073 -472.4409 -708.6614 -9.572591 354.3307 -236.2205 -39.93783 -590.5512 -708.6614 -1.983788 472.4409 -118.1102 -5.361954 -708.6614 -708.6614 23.81319 590.5512 0 -0.3193718 -826.7717 -708.6614 37.63034 708.6614 118.1102 1.954996 -944.8819 -708.6614 23.81319 826.7717 826.7717 -181.5167 708.6614 826.7717 -68.92579 590.5512 944.8819 -19.11479 590.5512 708.6614 -68.92579 826.7717 708.6614 -181.5167 708.6614 826.7717 -181.5167 708.6614 590.5512 -9.572591 944.8819 590.5512 -19.11479 826.7717 708.6614 -68.92579 826.7717 -826.7717 -9.572591 0 -708.6614 -10.50024 -118.1102 -708.6614 -13.07393 0 -708.6614 -10.50024 -118.1102 -590.5512 -48.27113 -236.2205 -590.5512 -51.52911 -118.1102 -826.7717 -9.572591 118.1102 -708.6614 -13.07393 0 -708.6614 -10.50024 118.1102 -590.5512 -48.27113 -236.2205 -472.4409 -110.4349 -354.3307 -472.4409 -122.3015 -236.2205 -826.7717 -9.572591 236.2205 -708.6614 -10.50024 118.1102 -708.6614 -9.572591 236.2205 -472.4409 -110.4349 -354.3307 -354.3307 -109.5073 -472.4409 -354.3307 -139.0247 -354.3307 -826.7717 -9.572591 354.3307 -708.6614 -9.572591 236.2205 -708.6614 -9.572591 354.3307 -354.3307 -109.5073 -472.4409 -236.2205 -39.93783 -590.5512 -236.2205 -87.33477 -472.4409 -826.7717 -9.572591 472.4409 -708.6614 -9.572591 354.3307 -708.6614 -1.983788 472.4409 -236.2205 -39.93783 -590.5512 -118.1102 -5.361954 -708.6614 -118.1102 -14.01897 -590.5512 -826.7717 -8.686885 590.5512 -708.6614 -1.983788 472.4409 -708.6614 23.81319 590.5512 -118.1102 -5.361954 -708.6614 0 -0.3193718 -826.7717 0 -1.337298 -708.6614 -826.7717 -6.229558 708.6614 -708.6614 23.81319 590.5512 -708.6614 37.63034 708.6614 0 -0.3193718 -826.7717 118.1102 1.954996 -944.8819 118.1102 3.218627 -826.7717 -826.7717 -8.686885 826.7717 -708.6614 37.63034 708.6614 -708.6614 23.81319 826.7717 -826.7717 -9.572591 944.8819 -708.6614 23.81319 826.7717 -708.6614 -1.983788 944.8819 944.8819 -68.92579 708.6614 708.6614 -68.92579 826.7717 826.7717 -181.5167 708.6614 826.7717 -68.92579 826.7717 708.6614 -9.572591 944.8819 -826.7717 -9.572591 -118.1102 -826.7717 -9.572591 0 -708.6614 -10.38838 -236.2205 -826.7717 -9.572591 118.1102 -590.5512 -53.0494 -354.3307 -826.7717 -9.572591 236.2205 -472.4409 -87.33477 -472.4409 -354.3307 -53.0494 -590.5512 -826.7717 -9.572591 472.4409 -236.2205 -9.342625 -708.6614 -826.7717 -8.686885 590.5512 -118.1102 -4.68904 -826.7717 -826.7717 -6.229558 708.6614 0 -1.337298 -944.8819 -826.7717 -8.686885 826.7717 826.7717 -68.92579 826.7717 826.7717 -181.5167 708.6614 944.8819 -68.92579 708.6614 708.6614 -9.572591 944.8819 708.6614 -68.92579 826.7717 826.7717 -68.92579 826.7717 -944.8819 -9.572591 0 -826.7717 -9.572591 -118.1102 -826.7717 -9.572591 0 -826.7717 -9.572591 -118.1102 -708.6614 -10.38838 -236.2205 -708.6614 -10.50024 -118.1102 -944.8819 -9.572591 118.1102 -826.7717 -9.572591 118.1102 -708.6614 -10.38838 -236.2205 -590.5512 -53.0494 -354.3307 -590.5512 -48.27113 -236.2205 -944.8819 -9.572591 236.2205 -590.5512 -53.0494 -354.3307 -472.4409 -87.33477 -472.4409 -472.4409 -110.4349 -354.3307 -944.8819 -9.572591 354.3307 -472.4409 -87.33477 -472.4409 -354.3307 -53.0494 -590.5512 -354.3307 -109.5073 -472.4409 -944.8819 -9.572591 472.4409 -826.7717 -9.572591 472.4409 -354.3307 -53.0494 -590.5512 -236.2205 -9.342625 -708.6614 -236.2205 -39.93783 -590.5512 -944.8819 -9.572591 590.5512 -826.7717 -9.572591 472.4409 -826.7717 -8.686885 590.5512 -236.2205 -9.342625 -708.6614 -118.1102 -4.68904 -826.7717 -118.1102 -5.361954 -708.6614 -944.8819 -9.572591 708.6614 -826.7717 -8.686885 590.5512 -826.7717 -6.229558 708.6614 -118.1102 -4.68904 -826.7717 0 -1.337298 -944.8819 0 -0.3193718 -826.7717 -944.8819 -9.572591 826.7717 -826.7717 -6.229558 708.6614 -826.7717 -8.686885 826.7717 -944.8819 -9.572591 944.8819 -826.7717 -8.686885 826.7717 -826.7717 -9.572591 944.8819 944.8819 -19.11479 826.7717 708.6614 -9.572591 944.8819 826.7717 -68.92579 826.7717 826.7717 -9.572591 944.8819 -944.8819 -9.572591 -118.1102 -826.7717 -9.572591 -236.2205 -708.6614 -12.65173 -354.3307 -590.5512 -40.32296 -472.4409 -472.4409 -40.32296 -590.5512 -354.3307 -12.65173 -708.6614 -944.8819 -9.572591 590.5512 -236.2205 -8.22295 -826.7717 -944.8819 -9.572591 708.6614 -118.1102 -5.361954 -944.8819 -944.8819 -9.572591 826.7717 826.7717 -9.572591 944.8819 826.7717 -68.92579 826.7717 944.8819 -19.11479 826.7717 -826.7717 -9.572591 -236.2205 -826.7717 -9.572591 -236.2205 -708.6614 -12.65173 -354.3307 -708.6614 -10.38838 -236.2205 -708.6614 -12.65173 -354.3307 -590.5512 -40.32296 -472.4409 -590.5512 -53.0494 -354.3307 -590.5512 -40.32296 -472.4409 -472.4409 -40.32296 -590.5512 -472.4409 -87.33477 -472.4409 -472.4409 -40.32296 -590.5512 -354.3307 -12.65173 -708.6614 -354.3307 -53.0494 -590.5512 -354.3307 -12.65173 -708.6614 -236.2205 -8.22295 -826.7717 -236.2205 -9.342625 -708.6614 -236.2205 -8.22295 -826.7717 -118.1102 -5.361954 -944.8819 -118.1102 -4.68904 -826.7717 944.8819 -9.572591 944.8819 -944.8819 -9.572591 -236.2205 -826.7717 -9.572591 -354.3307 -708.6614 -10.38838 -472.4409 -590.5512 -16.56235 -590.5512 -472.4409 -10.38838 -708.6614 -354.3307 -9.572591 -826.7717 -236.2205 -8.526836 -944.8819 -826.7717 -9.572591 -354.3307 -826.7717 -9.572591 -354.3307 -708.6614 -10.38838 -472.4409 -708.6614 -12.65173 -354.3307 -708.6614 -10.38838 -472.4409 -590.5512 -16.56235 -590.5512 -590.5512 -40.32296 -472.4409 -590.5512 -16.56235 -590.5512 -472.4409 -10.38838 -708.6614 -472.4409 -40.32296 -590.5512 -472.4409 -10.38838 -708.6614 -354.3307 -9.572591 -826.7717 -354.3307 -12.65173 -708.6614 -354.3307 -9.572591 -826.7717 -236.2205 -8.526836 -944.8819 -236.2205 -8.22295 -826.7717 -944.8819 -9.572591 -354.3307 -826.7717 -9.572591 -472.4409 -708.6614 -9.572591 -590.5512 -590.5512 -9.572591 -708.6614 -472.4409 -9.572591 -826.7717 -354.3307 -9.572591 -944.8819 -826.7717 -9.572591 -472.4409 -826.7717 -9.572591 -472.4409 -708.6614 -9.572591 -590.5512 -708.6614 -10.38838 -472.4409 -708.6614 -9.572591 -590.5512 -590.5512 -9.572591 -708.6614 -590.5512 -16.56235 -590.5512 -590.5512 -9.572591 -708.6614 -472.4409 -9.572591 -826.7717 -472.4409 -10.38838 -708.6614 -472.4409 -9.572591 -826.7717 -354.3307 -9.572591 -944.8819 -354.3307 -9.572591 -826.7717 -944.8819 -9.572591 -472.4409 -826.7717 -9.572591 -590.5512 -708.6614 -9.572591 -708.6614 -590.5512 -9.572591 -826.7717 -472.4409 -9.572591 -944.8819 -708.6614 -9.572591 -590.5512 -590.5512 -9.572591 -708.6614 -944.8819 -9.572591 -590.5512 -826.7717 -9.572591 -708.6614 -708.6614 -9.572591 -826.7717 -590.5512 -9.572591 -944.8819 -944.8819 -9.572591 -708.6614 -826.7717 -9.572591 -826.7717 -708.6614 -9.572591 -944.8819 -944.8819 -9.572591 -826.7717 -826.7717 -9.572591 -944.8819 -944.8819 -9.572591 -944.8819" /> + </IndexedTriangleSet> + </Transform> + </Shape> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + In this example, a simple 3D scene is integrated into a web page. This is done by the <X3D> tag in the + HTML document. + The <X3D> tag is interpreted by the x3dom.js Java Script library. You can either make a local copy of the + library or use it + from the server. It is recommended to use the library from the server to ensure that you always have the latest + version. + A local copy of the library is useful for development, if you are not always connected. + <br> + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 0 0'> </background> + <Shape id=box> + <Box> </Box> + </Shape> + </Scene> + </X3D> + </pre> + The <X3D> tag defines the size of the 3D canvas on the web page as well as the scene graph. + An <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/Part01/concepts.html#scenegraph" + target="_blank"> X3D scene graph </a> + is defined as a directed acyclic graph. + The nodes of the scene graph will be rendered on the screen from a given camera position. + The default camera position is (0,0,10) pointing to the negative z-Axis. + So objects at the center of the coordinate system will be displayed on the screen. + A shape node contains a geometry. In this example, it is a simple box. The center of the box is at (0,0,0) with + default size 2 in all dimensions + <br> + The color of the background can be changed in the attribute skyColor. Currently it is red. + The color is defined using <a href="http://en.wikipedia.org/wiki/RGB_color_model" target="_blank"> RGB color + model </a> + with arithmetic notation (0.0 t0 1.0 per value). <br> + The color of the Box can be changed by applying an appearance to the shape node. + In X3D, the <a href="http://www.web3d.org/files/specifications/19775-1/V3.3/index.html" target="_blank"> Shape + node </a> associates a geometry node with + nodes that define that geometry's appearance. The following example draws a blue box. + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 0 0'> </background> + <Shape id=box> + <appearance > + <material diffuseColor='0 0 1'></material> + </appearance> + <Box> </Box> + </Shape> + </Scene> + </X3D> + </pre> + <shape> + <box></box> + </shape> + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/toytown.html b/public/X3DOMTutorial/toytown.html new file mode 100644 index 0000000..b50200a --- /dev/null +++ b/public/X3DOMTutorial/toytown.html @@ -0,0 +1,104 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> toy town </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1> toy town </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <transform id="terrain"> + <Shape> + <Appearance> + <ImageTexture url="./img/Logo_bisH27mm.jpg"></ImageTexture> + <Material diffuseColor="0, 1, 0"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 3 2 1 -1"> + <Coordinate point="-5 0 -5, 5 0 -5, 5 0 5, -5 0 5"> + </Coordinate> + </IndexedFaceSet> + </Shape> + </transform> + <transform id="building_1"> + <Group DEF="building"> + <Shape DEF="roof"> + <!-- roof --> + <Appearance> + <Material diffuseColor="0.980, 0.502, 0.447"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 7 4 8 -1 4 5 8 -1 5 6 8 -1 6 7 8 -1"> + <Coordinate DEF="pointset" point="-1 0 1, 1 0 1, 1 0 -1, -1 0 -1, + -1 2 1, 1 2 1, 1 2 -1, -1 2 -1, 0 3 0 "> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape DEF="wall"> + <!-- wall --> + <Appearance> + <Material diffuseColor="0.753, 0.753, 0.753"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 1 5 4 -1 1 2 6 5 -1 2 3 7 6 -1 3 0 4 7 -1"> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + <Shape DEF="ground"> + <!-- ground --> + <Appearance> + <Material diffuseColor="0.180, 0.280, 0.230"> </Material> + </Appearance> + <IndexedFaceSet solid="true" ccw="true" coordIndex=" 0 3 2 1 -1 "> + <Coordinate USE="pointset"> + </Coordinate> + </IndexedFaceSet> + </Shape> + </Group> + </Transform> + <Transform id="building_2" translation="3 0 0"> + <Group> + <Shape USE="roof"> + </Shape> + <Shape USE="wall"> + </Shape> + <Shape USE="ground"> + </Shape> + </Group> + </Transform> + <Transform id="building_3" translation="0 0 4"> + <Group> + <Shape USE="roof"> + </Shape> + <Shape USE="wall"> + </Shape> + <Shape USE="ground"> + </Shape> + </Group> + </Transform> + <Transform id="building_4" translation="-3 0 0"> + <Group> + <Shape USE="roof"> + </Shape> + <Shape USE="wall"> + </Shape> + <Shape USE="ground"> + </Shape> + </Group> + </Transform> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + DEF / USE + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/transform.html b/public/X3DOMTutorial/transform.html new file mode 100644 index 0000000..49804bb --- /dev/null +++ b/public/X3DOMTutorial/transform.html @@ -0,0 +1,86 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title> Transformation </title> + <link rel="stylesheet" type="text/css" href="x3dom.css"> + </link> +</head> + +<body> + <h1> Transformation </h1> + <table width="100%" height="85%" border="0"> + <tr> + <td width="50%" align="center" valign="top" scope="col"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 1 1'> </background> + <Shape> + <Appearance> + <Material diffuseColor='1 0 0'></Material> + </Appearance> + <Box></Box> + </Shape> + <Transform translation='-3 0 0'> + <Shape> + <Appearance> + <Material diffuseColor='0 1 0'></Material> + </Appearance> + <Cone></Cone> + </Shape> + </Transform> + <Transform translation='3 0 0'> + <Shape> + <Appearance> + <Material diffuseColor='0 0 1'></Material> + </Appearance> + <Sphere></Sphere> + </Shape> + </Transform> + </Scene> + </X3D> + </p> + </td> + <td width="50%" align="left" valign="top" scope="col"> + In X3DOM, a shape such as Box, Cone, and Sphere is always created at the center of the coordinate system. The + size of the shape can be modified, + but the location is always centered at (0,0,0). To move a shape to another location, a transformation needs to + be applied. See slides for + the different kinds of affine transformations: translation, rotation, and scaling. + <br> + <pre class="prettyprint"> + <X3D id="shapedata" width="600px" height="600px" style="float:left"> + <Scene> + <background transparency='0' skyColor='1 1 1'> </background> + <Shape> + <Appearance> + <Material diffuseColor='1 0 0'></Material> + </Appearance> + <Box></Box> + </Shape> + <Transform translation='-3 0 0'> + <Shape> + <Appearance> + <Material diffuseColor='0 1 0'></Material> + </Appearance> + <Cone></Cone> + </Shape> + </Transform> + <Transform translation='3 0 0'> + <Shape> + <Appearance> + <Material diffuseColor='0 0 1'></Material> + </Appearance> + <Sphere></Sphere> + </Shape> + </Transform> + </Scene> + </X3D> + </pre> + <br> + This example illustrates how to move shapes to another location. + </td> + <script type="text/javascript" src="x3dom.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/public/X3DOMTutorial/x3dom.css b/public/X3DOMTutorial/x3dom.css new file mode 100644 index 0000000..59811b5 --- /dev/null +++ b/public/X3DOMTutorial/x3dom.css @@ -0,0 +1,222 @@ +/* + * X3DOM JavaScript Library + * http://www.x3dom.org + * + * (C)2009 Fraunhofer IGD, Darmstadt, Germany + * Dual licensed under the MIT and GPL + * + * Based on code originally provided by + * Philip Taylor: http://philip.html5.org + */ + +body { + background-color: white; + font-family: Helvetica, sans-serif; + font-size: 12px; +} + +X3D, x3d { + position:relative; /* in order to be able to position stat-div within X3D */ + float:left; /* float the element so it has the same size like the canvas */ + cursor:pointer; + margin: 0; + padding: 0; + border: 1px solid #000; +} + +object { + margin: 0; + padding: 0; + border: none; + z-index: 0; + width:100%; + height:100%; + float:left; +} + +X3D:hover, +x3d:hover, +.x3dom-canvas:hover { + -webkit-user-select: none; + -webkit-touch-callout: none; +} + +.x3dom-canvas { + border:none; + cursor:pointer; + cursor:-webkit-grab; + cursor:grab; + width:100%; + height:100%; + float:left; +} + +.x3dom-canvas-mousedown { + cursor:-webkit-grabbing; + cursor:grabbing; +} + +.x3dom-canvas:focus { + outline:none; +} +.x3dom-progress { + margin: 0; + padding: 6px 8px 0px 26px; + left: 0px; + top: 0px; + position: absolute; + color: #0f0; + font-family: Helvetica, sans-serif; + line-height:10px; + font-size: 10px; + min-width: 45px; + min-height: 20px; + border: 0px; + background-position: 4px 4px; + background-repeat: no-repeat; + background-color: #333; + background-color: rgba(51, 51, 51, 0.9); + z-index: 100; + background-image: url('data:image/gif;base64,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'); +} + +.x3dom-progress.bar span { + position: absolute; + left: 0; + top: 0; + line-height: 20px; + background-color: red; +} + + +.x3dom-statdiv { + margin: 0; + padding: 0; + right: 10px; + top: 10px; + position: absolute; + color: #0f0; + font-family: Helvetica, sans-serif; + line-height:10px; + font-size: 10px; + width: 75px; + height: 70px; + border: 0px; +} + +#x3dom-state-canvas { + margin: 2px; + padding: 0; + right: 0%; + top: 0%; + position: absolute; +} + +#x3dom-state-viewer { + position: absolute; + margin: 2px; + padding: 5px; + width: 135px; + top: 0%; + right: 0%; + opacity: 0.9; + background-color: #323232; + z-index: 1000; + font-family: Arial, sans-serif; + color: #C8C8C8; + font-weight: bold; + text-transform: uppercase; + cursor: help; +} + +.x3dom-states-head { + display: block; + font-size: 26px; +} + +.x3dom-states-head2 { + font-size: 10px; +} + +.x3dom-states-list { + float: left; + width: 100%; + border-top: 1px solid #C8C8C8; + list-style: none; + font-size: 9px; + line-height: 16px; + margin:0; + padding: 0; + padding-top: 2px; +} + +.x3dom-states-item { + width: 100%; + float: left; +} + +.x3dom-states-item-title { + float: left; + margin-left: 2px; +} + +.x3dom-states-item-value { + float: right; + margin-right: 2px; +} + +.x3dom-touch-marker { + display: inline; + padding: 5px; + border-radius: 10px; + position: absolute; + font-family: Helvetica, sans-serif; + line-height:10px; + font-size: 10px; + color: darkorange; + background: cornsilk; + opacity: 0.6; + border: 2px solid orange; + z-index: 200; +} + +.x3dom-logContainer { + border: 2px solid olivedrab; + height: 200px; + padding: 4px; + overflow: auto; + white-space: pre-wrap; + font-family: sans-serif; + font-size: x-small; + color: #00ff00; + background-color: black; + margin-right: 10px; +} + +.x3dom-nox3d { + font-family: Helvetica, sans-serif; + font-size: 14px; + background-color: #eb7a7a; + padding: 1em; + opacity: 0.75; +} + +.x3dom-nox3d p { + color: #fff; + font-size: 14px; +} + +.x3dom-nox3d a { + color: #fff; + font-size: 14px; +} + + +/* self-clearing floats */ +.group:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} diff --git a/public/X3DOMTutorial/x3dom.js b/public/X3DOMTutorial/x3dom.js new file mode 100644 index 0000000..5985345 --- /dev/null +++ b/public/X3DOMTutorial/x3dom.js @@ -0,0 +1,3959 @@ +/** X3DOM Runtime, http://www.x3dom.org/ 1.6.0 - 5e8c0441fe2cbe9970ffd14f1546100672a95185 - Thu May 8 20:51:15 2014 +0200 */ +if(!Array.forEach){Array.forEach=function(array,fun,thisp){var len=array.length;for(var i=0;i<len;i++){if(i in array){fun.call(thisp,array[i],i,array);}}};} +if(!Array.map){Array.map=function(array,fun,thisp){var len=array.length;var res=[];for(var i=0;i<len;i++){if(i in array){res[i]=fun.call(thisp,array[i],i,array);}} +return res;};} +if(!Array.filter){Array.filter=function(array,fun,thisp){var len=array.length;var res=[];for(var i=0;i<len;i++){if(i in array){var val=array[i];if(fun.call(thisp,val,i,array)){res.push(val);}}} +return res;};} +var x3dom={canvases:[],x3dNS:'http://www.web3d.org/specifications/x3d-namespace',x3dextNS:'http://philip.html5.org/x3d/ext',xsltNS:'http://www.w3.org/1999/XSL/x3dom.Transform',xhtmlNS:'http://www.w3.org/1999/xhtml'};x3dom.nodeTypes={};x3dom.nodeTypesLC={};x3dom.components={};x3dom.geoCache=[];x3dom.caps={PLATFORM:navigator.platform,AGENT:navigator.userAgent};x3dom.registerNodeType=function(nodeTypeName,componentName,nodeDef){if(x3dom.components[componentName]===undefined){x3dom.components[componentName]={};} +nodeDef._typeName=nodeTypeName;nodeDef._compName=componentName;x3dom.components[componentName][nodeTypeName]=nodeDef;x3dom.nodeTypes[nodeTypeName]=nodeDef;x3dom.nodeTypesLC[nodeTypeName.toLowerCase()]=nodeDef;};x3dom.isX3DElement=function(node){var name=(node.nodeType===Node.ELEMENT_NODE&&node.localName)?node.localName.toLowerCase():null;return(name&&(x3dom.nodeTypes[node.localName]||x3dom.nodeTypesLC[name]||name=="x3d"||name=="websg"||name=="route"));};x3dom.extend=function(f){function G(){} +G.prototype=f.prototype||f;return new G();};x3dom.getStyle=function(oElm,strCssRule){var strValue="";var style=document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(oElm,null):null;if(style){strValue=style.getPropertyValue(strCssRule);} +else if(oElm.currentStyle){strCssRule=strCssRule.replace(/\-(\w)/g,function(strMatch,p1){return p1.toUpperCase();});strValue=oElm.currentStyle[strCssRule];} +return strValue;};function defineClass(parent,ctor,methods){if(parent){function Inheritance(){} +Inheritance.prototype=parent.prototype;ctor.prototype=new Inheritance();ctor.prototype.constructor=ctor;ctor.superClass=parent;} +if(methods){for(var m in methods){ctor.prototype[m]=methods[m];}} +return ctor;} +x3dom.isa=function(object,clazz){return(object instanceof clazz);};x3dom.getGlobal=function(){return(function(){return this;}).call(null);};x3dom.loadJS=function(src,path_prefix,blocking){blocking=(blocking===false)?blocking:true;if(blocking){var url=(path_prefix)?path_prefix.trim()+src:src;var req=new XMLHttpRequest();if(req){req.open("GET",url,false);req.send(null);eval(req.responseText);}}else{var head=document.getElementsByTagName('HEAD').item(0);var script=document.createElement("script");var loadpath=(path_prefix)?path_prefix.trim()+src:src;if(head){x3dom.debug.logError("Trying to load external JS file: "+loadpath);script.type="text/javascript";script.src=loadpath;head.appendChild(script);}else{alert("No document object found. Can't load components!");}}};function array_to_object(a){var o={};for(var i=0;i<a.length;i++){o[a[i]]='';} +return o;} +window.requestAnimFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback,element){window.setTimeout(callback,16);};})();x3dom.toggleFullScreen=function(){if(document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen){if(document.cancelFullScreen){document.cancelFullScreen();} +else if(document.mozCancelFullScreen){document.mozCancelFullScreen();} +else if(document.webkitCancelFullScreen){document.webkitCancelFullScreen();}} +else{var docElem=document.documentElement;if(docElem.requestFullScreen){docElem.requestFullScreen();} +else if(docElem.mozRequestFullScreen){docElem.mozRequestFullScreen();} +else if(docElem.webkitRequestFullScreen){docElem.webkitRequestFullScreen();}}};x3dom.debug={INFO:"INFO",WARNING:"WARNING",ERROR:"ERROR",EXCEPTION:"EXCEPTION",isActive:false,isFirebugAvailable:false,isSetup:false,isAppend:false,numLinesLogged:0,maxLinesToLog:10000,logContainer:null,setup:function(){if(x3dom.debug.isSetup){return;} +try{if(window.console.firebug!==undefined){x3dom.debug.isFirebugAvailable=true;}} +catch(err){x3dom.debug.isFirebugAvailable=false;} +x3dom.debug.setupLogContainer();x3dom.debug.isSetup=true;},activate:function(visible){x3dom.debug.isActive=true;x3dom.debug.logContainer.style.display=(visible)?"block":"none";if(!x3dom.debug.isAppend){if(navigator.appName=="Microsoft Internet Explorer"){x3dom.debug.logContainer.style.marginLeft="8px";document.documentElement.appendChild(x3dom.debug.logContainer);}else{document.body.appendChild(x3dom.debug.logContainer);} +x3dom.debug.isAppend=true;}},setupLogContainer:function(){x3dom.debug.logContainer=document.createElement("div");x3dom.debug.logContainer.id="x3dom_logdiv";x3dom.debug.logContainer.setAttribute("class","x3dom-logContainer");x3dom.debug.logContainer.style.clear="both";},doLog:function(msg,logType){if(!x3dom.debug.isActive){return;} +if(x3dom.debug.numLinesLogged===x3dom.debug.maxLinesToLog){msg="Maximum number of log lines (="+x3dom.debug.maxLinesToLog+") reached. Deactivating logging...";} +if(x3dom.debug.numLinesLogged>x3dom.debug.maxLinesToLog){return;} +var node=document.createElement("p");node.style.margin=0;switch(logType){case x3dom.debug.INFO:node.style.color="#00ff00";break;case x3dom.debug.WARNING:node.style.color="#cd853f";break;case x3dom.debug.ERROR:node.style.color="#ff4500";break;case x3dom.debug.EXCEPTION:node.style.color="#ffff00";break;default:node.style.color="#00ff00";break;} +try{node.innerHTML=logType+": "+msg;x3dom.debug.logContainer.insertBefore(node,x3dom.debug.logContainer.firstChild);}catch(err){if(window.console.firebug!==undefined){window.console.warn(msg);}} +if(x3dom.debug.isFirebugAvailable){switch(logType){case x3dom.debug.INFO:window.console.info(msg);break;case x3dom.debug.WARNING:window.console.warn(msg);break;case x3dom.debug.ERROR:window.console.error(msg);break;case x3dom.debug.EXCEPTION:window.console.debug(msg);break;default:break;}} +x3dom.debug.numLinesLogged++;},logInfo:function(msg){x3dom.debug.doLog(msg,x3dom.debug.INFO);},logWarning:function(msg){x3dom.debug.doLog(msg,x3dom.debug.WARNING);},logError:function(msg){x3dom.debug.doLog(msg,x3dom.debug.ERROR);},logException:function(msg){x3dom.debug.doLog(msg,x3dom.debug.EXCEPTION);},assert:function(c,msg){if(!c){x3dom.debug.doLog("Assertion failed in "+ +x3dom.debug.assert.caller.name+': '+ +msg,x3dom.debug.ERROR);}},typeOf:function(obj){var type=typeof obj;return type==="object"&&!obj?"null":type;},exists:function(obj,name,type){type=type||"function";return(obj?this.typeOf(obj[name]):"null")===type;},dumpFields:function(node){var str="";for(var fName in node){str+=(fName+", ");} +str+='\n';x3dom.debug.logInfo(str);return str;}};x3dom.debug.setup();x3dom.arc={};x3dom.arc.instance=null;x3dom.arc.Limits=function(min,max,initial) +{this._min=min;this._max=max;this.getValue=function(value) +{value=this._min+(this._max-this._min)*value;return this._max>=value?(this._min<=value?value:this._min):this._max;};};x3dom.arc.ARF=function(name,min,max,dirFac,factorGetterFunc,factorSetterFunc,getterFunc,setterFunc) +{this._name=name;this._stateValue=[0.5,0.5];this._limits=new x3dom.arc.Limits(min,max);this._factorGetterFunc=factorGetterFunc;this._factorSetterFunc=factorSetterFunc;this._setterFunc=setterFunc;this._getterFunc=getterFunc;this._dirFac=dirFac;this.getFactor=function() +{return this._factorGetterFunc();};this.update=function(state,step) +{var stateVal=this._stateValue[state]+step*this._dirFac;this._stateValue[state]=0<=stateVal?(1>=stateVal?stateVal:1):0;this._setterFunc(this._limits.getValue(this._stateValue[state]));};this.reset=function() +{this._stateValue[0]=0.5;this._stateValue[1]=0.5;};};x3dom.arc.AdaptiveRenderControl=defineClass(null,function(scene) +{x3dom.arc.instance=this;this._scene=scene;this._targetFrameRate=[];this._targetFrameRate[0]=this._scene._vf.minFrameRate;this._targetFrameRate[1]=this._scene._vf.maxFrameRate;this._currentState=0;var that=this;var environment=that._scene.getEnvironment();this._arfs=[];this._arfs.push(new x3dom.arc.ARF("smallFeatureCulling",0,10,-1,function() +{return environment._vf.smallFeatureFactor;},function(value) +{environment._vf.smallFeatureFactor=value;},function() +{return environment._vf.smallFeatureThreshold;},function(value) +{environment._vf.smallFeatureThreshold=value;}));this._arfs.push(new x3dom.arc.ARF("lowPriorityCulling",0,100,1,function() +{return environment._vf.lowPriorityFactor;},function(value) +{environment._vf.lowPriorityFactor=value;},function() +{return environment._vf.lowPriorityThreshold*100;},function(value) +{environment._vf.lowPriorityThreshold=value/100;}));this._arfs.push(new x3dom.arc.ARF("tessellationDetailCulling",1,12,-1,function() +{return environment._vf.tessellationErrorFactor;},function(value) +{environment._vf.tessellationErrorFactor=value;},function() +{return environment.tessellationErrorThreshold;},function(value) +{environment.tessellationErrorThreshold=value;}));this._stepWidth=0.1;},{update:function(state,fps) +{this._currentState=state;var delta=fps-this._targetFrameRate[state];this._stepWidth=Math.abs(delta)>10?0.1:0.01;var factorSum=0;var normFactors=[];var i,n=this._arfs.length;for(i=0;i<n;++i) +{normFactors[i]=this._arfs[i].getFactor();if(normFactors[i]>0) +factorSum+=normFactors[i];} +var dirFac=delta<0?-1:1;for(i=0;i<n;++i) +{if(normFactors[i]>0) +{normFactors[i]/=factorSum;this._arfs[i].update(state,this._stepWidth*normFactors[i]*dirFac);}}},reset:function() +{for(var i=0,n=this._arfs.length;i<n;++i) +{this._arfs[i].reset();}}});var Request=function(url,onloadCallback,priority){this.url=url;this.priority=priority;this.xhr=new XMLHttpRequest();this.onloadCallbacks=[onloadCallback];var self=this;this.xhr.onload=function(){if(x3dom.DownloadManager.debugOutput){x3dom.debug.logInfo('Download manager received data for URL \''+self.url+'\'.');} +--x3dom.DownloadManager.activeDownloads;if((x3dom.DownloadManager.stallToKeepOrder===false)||(x3dom.DownloadManager.resultGetsStalled(self.priority)===false)){var i;for(i=0;i<self.onloadCallbacks.length;++i){self.onloadCallbacks[i](self.xhr.response);} +x3dom.DownloadManager.removeDownload(self);x3dom.DownloadManager.updateStalledResults();} +else if(x3dom.DownloadManager.debugOutput){x3dom.debug.logInfo('Download manager stalled downloaded result for URL \''+self.url+'\'.');} +x3dom.DownloadManager.tryNextDownload();};};Request.prototype.send=function(){this.xhr.open('GET',encodeURI(this.url),true);this.xhr.responseType='arraybuffer';this.xhr.send(null);if(x3dom.DownloadManager.debugOutput){x3dom.debug.logInfo('Download manager posted XHR for URL \''+this.url+'\'.');}};x3dom.DownloadManager={requests:[],maxDownloads:6,activeDownloads:0,debugOutput:false,stallToKeepOrder:false,toggleDebugOutput:function(flag){this.debugOutput=flag;},toggleStrictReturnOrder:function(flag){this.stallToKeepOrder=false;},removeDownload:function(req){var i,j;var done=false;for(i=0;i<this.requests.length&&!done;++i){if(this.requests[i]){for(j=0;j<this.requests[i].length;++j){if(this.requests[i][j]===req){this.requests[i].splice(j,1);done=true;break;}}}}},tryNextDownload:function(){var firstRequest;var i,j;if(this.activeDownloads<this.maxDownloads){for(i=0;i<this.requests.length&&!firstRequest;++i){if(this.requests[i]){for(j=0;j<this.requests[i].length;++j){if(this.requests[i][j].xhr.readyState===XMLHttpRequest.UNSENT){firstRequest=this.requests[i][j];break;}}}} +if(firstRequest){firstRequest.send();++this.activeDownloads;}}},resultGetsStalled:function(priority){var i;for(i=0;i<priority;++i){if(this.requests[i]&&this.requests[i].length){return true;}} +return false;},updateStalledResults:function(){if(x3dom.DownloadManager.stallToKeepOrder){var i,j,k;var req,pendingRequestFound=false;for(i=0;i<this.requests.length&&!pendingRequestFound;++i){if(this.requests[i]){for(j=0;j<this.requests[i].length;++j){req=this.requests[i][j];if(req.xhr.readyState===XMLHttpRequest.DONE){if(x3dom.DownloadManager.debugOutput){x3dom.debug.logInfo('Download manager releases stalled result for URL \''+req.url+'\'.');} +for(k=0;k<req.onloadCallbacks.length;++k){req.onloadCallbacks[k](req.xhr.response);} +this.requests[i].splice(j,1);} +else{pendingRequestFound=true;}}}}}},get:function(urls,onloadCallbacks,priorities){var i,j,k,r;var found=false;var url,onloadCallback,priority;if(urls.length!==onloadCallbacks.length||urls.length!==priorities.length) +{x3dom.debug.logError('DownloadManager: The number of given urls, onload callbacks and priorities is not equal. Ignoring requests.');return;} +for(k=0;k<urls.length;++k){if(!onloadCallbacks[k]===undefined||!priorities[k]===undefined){x3dom.debug.logError('DownloadManager: No onload callback and / or priority specified. Ignoring request for \"'+url+'\"');continue;} +else{url=urls[k];onloadCallback=onloadCallbacks[k];priority=priorities[k];for(i=0;i<this.requests.length&&!found;++i){if(this.requests[i]){for(j=0;j<this.requests[i].length;++j){if(this.requests[i][j].url===url){this.requests[i][j].onloadCallbacks.push(onloadCallback);if(x3dom.DownloadManager.debugOutput){x3dom.debug.logInfo('Download manager appended onload callback for URL \''+url+'\' to a registered request using the same URL.');} +found=true;break;}}}} +if(!found){r=new Request(url,onloadCallback,priority);if(this.requests[priority]){this.requests[priority].push(r);} +else{this.requests[priority]=[r];}}}} +for(i=0;i<urls.length&&this.activeDownloads<this.maxDownloads;++i){this.tryNextDownload();}}};x3dom.Properties=function(){this.properties={};};x3dom.Properties.prototype.setProperty=function(name,value){x3dom.debug.logInfo("Properties: Setting property '"+name+"' to value '"+value+"'");this.properties[name]=value;};x3dom.Properties.prototype.getProperty=function(name,def){if(this.properties[name]){return this.properties[name]}else{return def;}};x3dom.Properties.prototype.merge=function(other){for(var attrname in other.properties){this.properties[attrname]=other.properties[attrname];}};x3dom.Properties.prototype.toString=function(){var str="";for(var name in this.properties){str+="Name: "+name+" Value: "+this.properties[name]+"\n";} +return str;};x3dom.DoublyLinkedList=function(){this.length=0;this.first=null;this.last=null;};x3dom.DoublyLinkedList.ListNode=function(point,point_index,normals,colors,texCoords){this.point=point;this.point_index=point_index;this.normals=normals;this.colors=colors;this.texCoords=texCoords;this.next=null;this.prev=null;};x3dom.DoublyLinkedList.prototype.appendNode=function(node){if(this.first===null){node.prev=node;node.next=node;this.first=node;this.last=node;}else{node.prev=this.last;node.next=this.first;this.first.prev=node;this.last.next=node;this.last=node;} +this.length++;};x3dom.DoublyLinkedList.prototype.insertAfterNode=function(node,newNode){newNode.prev=node;newNode.next=node.next;node.next.prev=newNode;node.next=newNode;if(newNode.prev==this.last){this.last=newNode;} +this.length++;};x3dom.DoublyLinkedList.prototype.deleteNode=function(node){if(this.length>1){node.prev.next=node.next;node.next.prev=node.prev;if(node==this.first){this.first=node.next;} +if(node==this.last){this.last=node.prev;}}else{this.first=null;this.last=null;} +node.prev=null;node.next=null;this.length--;};x3dom.DoublyLinkedList.prototype.getNode=function(index){var node=null;if(index>this.length){return node;} +for(var i=0;i<this.length;i++){if(i==0){node=this.first;}else{node=node.next;} +if(i==index){return node;}} +return null;};x3dom.DoublyLinkedList.prototype.invert=function(){var tmp=null;var node=this.first;for(var i=0;i<this.length;i++){tmp=node.prev;node.prev=node.next;node.next=tmp;node=node.prev;} +tmp=this.first;this.first=this.last;this.last=tmp;};x3dom.EarClipping={reversePointDirection:function(linklist,plane){var l,k;var count=0;var z=0;var nodei,nodel,nodek;if(linklist.length<3){return false;} +for(var i=0;i<linklist.length;i++){l=(i+1)%linklist.length;k=(i+2)%linklist.length;nodei=linklist.getNode(i);nodel=linklist.getNode(l);nodek=linklist.getNode(k);if(plane=='YZ'){z=(nodel.point.y-nodei.point.y)*(nodek.point.z-nodel.point.z);z-=(nodel.point.z-nodei.point.z)*(nodek.point.y-nodel.point.y);}else if(plane=='XZ'){z=(nodel.point.z-nodei.point.z)*(nodek.point.x-nodel.point.x);z-=(nodel.point.x-nodei.point.x)*(nodek.point.z-nodel.point.z);}else{z=(nodel.point.x-nodei.point.x)*(nodek.point.y-nodel.point.y);z-=(nodel.point.y-nodei.point.y)*(nodek.point.x-nodel.point.x);} +if(z<0){count--;}else{count++;}} +if(count<0){linklist.invert();return true;} +return false;},getIndexes:function(linklist){var node=linklist.first.next;var plane=this.identifyPlane(node.prev.point,node.point,node.next.point);var invers=this.reversePointDirection(linklist,plane);var indexes=[];node=linklist.first.next;var next=null;var count=0;var isEar=true;while(linklist.length>=3&&count<15){next=node.next;for(var i=0;i<linklist.length;i++){if(this.isNotEar(linklist.getNode(i).point,node.prev.point,node.point,node.next.point,plane)){isEar=false;}} +if(isEar){if(this.isKonvex(node.prev.point,node.point,node.next.point,plane)){indexes.push(node.prev.point_index,node.point_index,node.next.point_index);linklist.deleteNode(node);}else{count++;}} +node=next;isEar=true;} +if(invers){return indexes.reverse();}else{return indexes;}},getMultiIndexes:function(linklist){var node=linklist.first.next;var plane=this.identifyPlane(node.prev.point,node.point,node.next.point);var invers=this.reversePointDirection(linklist,plane);var data={};data.indices=[];data.point=[];data.normals=[];data.colors=[];data.texCoords=[];node=linklist.first.next;var next=null;var count=0;var isEar=true;while(linklist.length>=3&&count<15){next=node.next;for(var i=0;i<linklist.length;i++){if(this.isNotEar(linklist.getNode(i).point,node.prev.point,node.point,node.next.point,plane)){isEar=false;}} +if(isEar){if(this.isKonvex(node.prev.point,node.point,node.next.point,plane)){data.indices.push(node.prev.point_index,node.point_index,node.next.point_index);data.point.push(node.prev.point,node.point,node.next.point);if(node.normals){data.normals.push(node.prev.normals,node.normals,node.next.normals);} +if(node.colors){data.colors.push(node.prev.colors,node.colors,node.next.colors);} +if(node.texCoords){data.texCoords.push(node.prev.texCoords,node.texCoords,node.next.texCoords);} +linklist.deleteNode(node);}else{count++;}} +node=next;isEar=true;} +if(invers){data.indices=data.indices.reverse();data.point=data.point.reverse();data.normals=data.normals.reverse();data.colors=data.colors.reverse();data.texCoords=data.texCoords.reverse();} +return data;},isNotEar:function(ap1,tp1,tp2,tp3,plane){var b0,b1,b2,b3;var ap1a,ap1b,tp1a,tp1b,tp2a,tp2b,tp3a,tp3b;if(plane=='YZ'){ap1a=ap1.y;ap1b=ap1.z;tp1a=tp1.y;tp1b=tp1.z;tp2a=tp2.y;tp2b=tp2.z;tp3a=tp3.y;tp3b=tp3.z;}else if(plane=='XZ'){ap1a=ap1.z;ap1b=ap1.x;tp1a=tp1.z;tp1b=tp1.x;tp2a=tp2.z;tp2b=tp2.x;tp3a=tp3.z;tp3b=tp3.x;}else{ap1a=ap1.x;ap1b=ap1.y;tp1a=tp1.x;tp1b=tp1.y;tp2a=tp2.x;tp2b=tp2.y;tp3a=tp3.x;tp3b=tp3.y;} +b0=((tp2a-tp1a)*(tp3b-tp1b)-(tp3a-tp1a)*(tp2b-tp1b));if(b0!=0){b1=(((tp2a-ap1a)*(tp3b-ap1b)-(tp3a-ap1a)*(tp2b-ap1b))/b0);b2=(((tp3a-ap1a)*(tp1b-ap1b)-(tp1a-ap1a)*(tp3b-ap1b))/b0);b3=1-b1-b2;return((b1>0)&&(b2>0)&&(b3>0));} +else{return false;}},isKonvex:function(p,p1,p2,plane){var pa,pb,p1a,p1b,p2a,p2b;if(plane=='YZ'){pa=p.y;pb=p.z;p1a=p1.y;p1b=p1.z;p2a=p2.y;p2b=p2.z;}else if(plane=='XZ'){pa=p.z;pb=p.x;p1a=p1.z;p1b=p1.x;p2a=p2.z;p2b=p2.x;}else{pa=p.x;pb=p.y;p1a=p1.x;p1b=p1.y;p2a=p2.x;p2b=p2.y;} +var l=((p1a-pa)*(p2b-pb)-(p1b-pb)*(p2a-pa));return(l>=0);},identifyPlane:function(p1,p2,p3){var v1x,v1y,v1z;var v2x,v2y,v2z;var v3x,v3y,v3z;v1x=p2.x-p1.x;v1y=p2.y-p1.y;v1z=p2.z-p1.z;v2x=p3.x-p1.x;v2y=p3.y-p1.y;v2z=p3.z-p1.z;v3x=Math.abs(v1y*v2z-v1z*v2y);v3y=Math.abs(v1z*v2x-v1x*v2z);v3z=Math.abs(v1x*v2y-v1y*v2x);var angle=Math.max(v3x,v3y,v3z);if(angle==v3x){return'YZ';}else if(angle==v3y){return'XZ';}else if(angle==v3z){return'XY';}else{return'XZ';}}};x3dom.Utils={};x3dom.Utils.maxIndexableCoords=65535;x3dom.Utils.needLineWidth=false;x3dom.Utils.measurements=[];window.performance=window.performance||{};performance.now=(function(){return performance.now||performance.mozNow||performance.msNow||performance.oNow||performance.webkitNow||function(){return new Date().getTime();};})();x3dom.Utils.startMeasure=function(name){var uname=name.toUpperCase();if(!x3dom.Utils.measurements[uname]){if(performance&&performance.now){x3dom.Utils.measurements[uname]=performance.now();}else{x3dom.Utils.measurements[uname]=new Date().getTime();}}};x3dom.Utils.stopMeasure=function(name){var uname=name.toUpperCase();if(x3dom.Utils.measurements[uname]){var startTime=x3dom.Utils.measurements[uname];delete x3dom.Utils.measurements[uname];if(performance&&performance.now){return performance.now()-startTime;}else{return new Date().getTime()-startTime;}} +return 0;};x3dom.Utils.isNumber=function(n){return!isNaN(parseFloat(n))&&isFinite(n);};x3dom.Utils.createTexture2D=function(gl,doc,src,bgnd,withCredentials,scale,genMipMaps) +{var texture=gl.createTexture();var data=new Uint8Array([0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255]);gl.bindTexture(gl.TEXTURE_2D,texture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,2,2,0,gl.RGBA,gl.UNSIGNED_BYTE,data);if(genMipMaps){gl.generateMipmap(gl.TEXTURE_2D);} +gl.bindTexture(gl.TEXTURE_2D,null);texture.ready=false;if(src==null||src=='') +return texture;var image=new Image();image.crossOrigin=withCredentials?'use-credentials':'';image.src=src;doc.downloadCount++;image.onload=function(){if(scale) +image=x3dom.Utils.scaleImage(image);if(bgnd==true){gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,true);} +gl.bindTexture(gl.TEXTURE_2D,texture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,image);if(genMipMaps){gl.generateMipmap(gl.TEXTURE_2D);} +gl.bindTexture(gl.TEXTURE_2D,null);if(bgnd==true){gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,false);} +texture.width=image.width;texture.height=image.height;texture.ready=true;doc.downloadCount--;doc.needRender=true;};image.onerror=function(){x3dom.debug.logError("[Utils|createTexture2D] Can't load Image: "+src);doc.downloadCount--;};return texture;};x3dom.Utils.createTextureCube=function(gl,doc,url,bgnd,withCredentials,scale,genMipMaps) +{var texture=gl.createTexture();var faces;if(bgnd){faces=[gl.TEXTURE_CUBE_MAP_POSITIVE_Z,gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,gl.TEXTURE_CUBE_MAP_POSITIVE_Y,gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,gl.TEXTURE_CUBE_MAP_POSITIVE_X,gl.TEXTURE_CUBE_MAP_NEGATIVE_X];} +else +{faces=[gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,gl.TEXTURE_CUBE_MAP_POSITIVE_Z,gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,gl.TEXTURE_CUBE_MAP_POSITIVE_Y,gl.TEXTURE_CUBE_MAP_NEGATIVE_X,gl.TEXTURE_CUBE_MAP_POSITIVE_X];} +texture.ready=false;texture.pendingTextureLoads=-1;texture.textureCubeReady=false;var width=0,height=0;for(var i=0;i<faces.length;i++){var face=faces[i];var image=new Image();image.crossOrigin=withCredentials?'use-credentials':'';texture.pendingTextureLoads++;doc.downloadCount++;image.onload=(function(texture,face,image,swap){return function(){if(width==0&&height==0){width=image.width;height=image.height;} +else if(scale&&(width!=image.width||height!=image.height)){x3dom.debug.logWarning("[Utils|createTextureCube] Rescaling CubeMap images, which are of different size!");image=x3dom.Utils.rescaleImage(image,width,height);} +gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,swap);gl.bindTexture(gl.TEXTURE_CUBE_MAP,texture);gl.texImage2D(face,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,image);gl.bindTexture(gl.TEXTURE_CUBE_MAP,null);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,false);texture.pendingTextureLoads--;doc.downloadCount--;if(texture.pendingTextureLoads<0){texture.width=width;texture.height=height;texture.textureCubeReady=true;if(genMipMaps){gl.bindTexture(gl.TEXTURE_CUBE_MAP,texture);gl.generateMipmap(gl.TEXTURE_CUBE_MAP);gl.bindTexture(gl.TEXTURE_CUBE_MAP,null);} +x3dom.debug.logInfo("[Utils|createTextureCube] Loading CubeMap finished...");doc.needRender=true;}};})(texture,face,image,bgnd);image.onerror=function() +{doc.downloadCount--;x3dom.debug.logError("[Utils|createTextureCube] Can't load CubeMap!");};image.src=url[i];} +return texture;};x3dom.Utils.initFBO=function(gl,w,h,type,mipMap,needRenderBuf,numMrt){var tex=gl.createTexture();tex.width=w;tex.height=h;gl.bindTexture(gl.TEXTURE_2D,tex);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,w,h,0,gl.RGBA,type,null);if(mipMap) +gl.generateMipmap(gl.TEXTURE_2D);gl.bindTexture(gl.TEXTURE_2D,null);var i,mrts=null;if(x3dom.caps.DRAW_BUFFERS&&numMrt!==undefined){mrts=[tex];for(i=1;i<numMrt;i++){mrts[i]=gl.createTexture();mrts[i].width=w;mrts[i].height=h;gl.bindTexture(gl.TEXTURE_2D,mrts[i]);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,w,h,0,gl.RGBA,type,null);if(mipMap) +gl.generateMipmap(gl.TEXTURE_2D);gl.bindTexture(gl.TEXTURE_2D,null);}} +var fbo=gl.createFramebuffer();var rb=null;if(needRenderBuf){rb=gl.createRenderbuffer();gl.bindRenderbuffer(gl.RENDERBUFFER,rb);gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,w,h);gl.bindRenderbuffer(gl.RENDERBUFFER,null);} +gl.bindFramebuffer(gl.FRAMEBUFFER,fbo);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,tex,0);if(x3dom.caps.DRAW_BUFFERS&&numMrt!==undefined){for(i=1;i<numMrt;i++){gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0+i,gl.TEXTURE_2D,mrts[i],0);}} +gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,rb);var status=gl.checkFramebufferStatus(gl.FRAMEBUFFER);if(status!=gl.FRAMEBUFFER_COMPLETE){x3dom.debug.logWarning("[Utils|InitFBO] FBO-Status: "+status);} +gl.bindFramebuffer(gl.FRAMEBUFFER,null);return{fbo:fbo,rbo:rb,tex:tex,texTargets:mrts,width:w,height:h,type:type,mipMap:mipMap};};x3dom.Utils.getFileName=function(url) +{var filename;if(url.lastIndexOf("/")>-1){filename=url.substr(url.lastIndexOf("/")+1);} +else if(url.lastIndexOf("\\")>-1){filename=url.substr(url.lastIndexOf("\\")+1);} +else{filename=url;} +return filename;};x3dom.Utils.findTextureByName=function(texture,name) +{for(var i=0;i<texture.length;++i) +{if(name==texture[i].samplerName) +return texture[i];} +return false;};x3dom.Utils.rescaleImage=function(image,width,height) +{var canvas=document.createElement("canvas");canvas.width=width;canvas.height=height;canvas.getContext("2d").drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);return canvas;};x3dom.Utils.scaleImage=function(image) +{if(!x3dom.Utils.isPowerOfTwo(image.width)||!x3dom.Utils.isPowerOfTwo(image.height)){var canvas=document.createElement("canvas");canvas.width=x3dom.Utils.nextHighestPowerOfTwo(image.width);canvas.height=x3dom.Utils.nextHighestPowerOfTwo(image.height);var ctx=canvas.getContext("2d");ctx.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);image=canvas;} +return image;};x3dom.Utils.isPowerOfTwo=function(x) +{return((x&(x-1))===0);};x3dom.Utils.nextHighestPowerOfTwo=function(x) +{--x;for(var i=1;i<32;i<<=1){x=x|x>>i;} +return(x+1);};x3dom.Utils.nextBestPowerOfTwo=function(x) +{var log2x=Math.log(x)/0.693147180559945;return Math.pow(2,Math.round(log2x));};x3dom.Utils.getDataTypeSize=function(type) +{switch(type) +{case"Int8":case"Uint8":return 1;case"Int16":case"Uint16":return 2;case"Int32":case"Uint32":case"Float32":return 4;case"Float64":default:return 8;}};x3dom.Utils.getOffsetMultiplier=function(indexType,gl) +{switch(indexType) +{case gl.UNSIGNED_SHORT:return 1;case gl.UNSIGNED_INT:return 2;case gl.UNSIGNED_BYTE:return 0.5;default:return 1;}};x3dom.Utils.getByteAwareOffset=function(offset,indexType,gl) +{switch(indexType) +{case gl.UNSIGNED_SHORT:return 2*offset;case gl.UNSIGNED_INT:return 4*offset;case gl.UNSIGNED_BYTE:return offset;default:return 2*offset;}};x3dom.Utils.getVertexAttribType=function(type,gl) +{var dataType=gl.NONE;switch(type) +{case"Int8":dataType=gl.BYTE;break;case"Uint8":dataType=gl.UNSIGNED_BYTE;break;case"Int16":dataType=gl.SHORT;break;case"Uint16":dataType=gl.UNSIGNED_SHORT;break;case"Int32":dataType=gl.INT;break;case"Uint32":dataType=gl.UNSIGNED_INT;break;case"Float32":dataType=gl.FLOAT;break;case"Float64":default:x3dom.debug.logError("Can't find this.gl data type for "+type+", getting FLOAT...");dataType=gl.FLOAT;break;} +return dataType;};x3dom.Utils.getArrayBufferView=function(type,buffer) +{var array=null;switch(type) +{case"Int8":array=new Int8Array(buffer);break;case"Uint8":array=new Uint8Array(buffer);break;case"Int16":array=new Int16Array(buffer);break;case"Uint16":array=new Uint16Array(buffer);break;case"Int32":array=new Int32Array(buffer);break;case"Uint32":array=new Uint32Array(buffer);break;case"Float32":array=new Float32Array(buffer);break;case"Float64":array=new Float64Array(buffer);break;default:x3dom.debug.logError("Can't create typed array view of type "+type+", trying Float32...");array=new Float32Array(buffer);break;} +return array;};x3dom.Utils.isUnsignedType=function(str) +{return(str=="Uint8"||str=="Uint16"||str=="Uint16"||str=="Uint32");};x3dom.Utils.checkDirtyLighting=function(viewarea) +{return(viewarea.getLights().length+viewarea._scene.getNavigationInfo()._vf.headlight);};x3dom.Utils.checkDirtyEnvironment=function(viewarea,shaderProperties) +{var environment=viewarea._scene.getEnvironment();return(shaderProperties.GAMMACORRECTION!=environment._vf.gammaCorrectionDefault);} +x3dom.Utils.minFilterDic=function(gl,minFilter) +{switch(minFilter.toUpperCase()) +{case"NEAREST":return gl.NEAREST;case"LINEAR":return gl.LINEAR;case"NEAREST_MIPMAP_NEAREST":return gl.NEAREST_MIPMAP_NEAREST;case"NEAREST_MIPMAP_LINEAR":return gl.NEAREST_MIPMAP_LINEAR;case"LINEAR_MIPMAP_NEAREST":return gl.LINEAR_MIPMAP_NEAREST;case"LINEAR_MIPMAP_LINEAR":return gl.LINEAR_MIPMAP_LINEAR;case"AVG_PIXEL":return gl.LINEAR;case"AVG_PIXEL_AVG_MIPMAP":return gl.LINEAR_MIPMAP_LINEAR;case"AVG_PIXEL_NEAREST_MIPMAP":return gl.LINEAR_MIPMAP_NEAREST;case"DEFAULT":return gl.LINEAR_MIPMAP_LINEAR;case"FASTEST":return gl.NEAREST;case"NEAREST_PIXEL":return gl.NEAREST;case"NEAREST_PIXEL_AVG_MIPMAP":return gl.NEAREST_MIPMAP_LINEAR;case"NEAREST_PIXEL_NEAREST_MIPMAP":return gl.NEAREST_MIPMAP_NEAREST;case"NICEST":return gl.LINEAR_MIPMAP_LINEAR;default:return gl.LINEAR;}};x3dom.Utils.magFilterDic=function(gl,magFilter) +{switch(magFilter.toUpperCase()) +{case"NEAREST":return gl.NEAREST;case"LINEAR":return gl.LINEAR;case"AVG_PIXEL":return gl.LINEAR;case"DEFAULT":return gl.LINEAR;case"FASTEST":return gl.NEAREST;case"NEAREST_PIXEL":return gl.NEAREST;case"NICEST":return gl.LINEAR;default:return gl.LINEAR;}};x3dom.Utils.boundaryModesDic=function(gl,mode) +{switch(mode.toUpperCase()) +{case"CLAMP":return gl.CLAMP_TO_EDGE;case"CLAMP_TO_EDGE":return gl.CLAMP_TO_EDGE;case"CLAMP_TO_BOUNDARY":return gl.CLAMP_TO_EDGE;case"MIRRORED_REPEAT":return gl.MIRRORED_REPEAT;case"REPEAT":return gl.REPEAT;default:return gl.REPEAT;}};x3dom.Utils.primTypeDic=function(gl,type) +{switch(type.toUpperCase()) +{case"POINTS":return gl.POINTS;case"LINES":return gl.LINES;case"LINELOOP":return gl.LINE_LOOP;case"LINESTRIP":return gl.LINE_STRIP;case"TRIANGLES":return gl.TRIANGLES;case"TRIANGLESTRIP":return gl.TRIANGLE_STRIP;case"TRIANGLEFAN":return gl.TRIANGLE_FAN;default:return gl.TRIANGLES;}};x3dom.Utils.depthFunc=function(gl,func) +{switch(func.toUpperCase()) +{case"NEVER":return gl.NEVER;case"ALWAYS":return gl.ALWAYS;case"LESS":return gl.LESS;case"EQUAL":return gl.EQUAL;case"LEQUAL":return gl.LEQUAL;case"GREATER":return gl.GREATER;case"GEQUAL":return gl.GEQUAL;case"NOTEQUAL":return gl.NOTEQUAL;default:return gl.LEQUAL;}};x3dom.Utils.blendFunc=function(gl,func) +{switch(func.toLowerCase()) +{case"zero":return gl.ZERO;case"one":return gl.ONE;case"dst_color":return gl.DST_COLOR;case"dst_alpha":return gl.DST_ALPHA;case"src_color":return gl.SRC_COLOR;case"src_alpha":return gl.SRC_ALPHA;case"one_minus_dst_color":return gl.ONE_MINUS_DST_COLOR;case"one_minus_dst_alpha":return gl.ONE_MINUS_DST_ALPHA;case"one_minus_src_color":return gl.ONE_MINUS_SRC_COLOR;case"one_minus_src_alpha":return gl.ONE_MINUS_SRC_ALPHA;case"src_alpha_saturate":return gl.SRC_ALPHA_SATURATE;case"constant_color":return gl.CONSTANT_COLOR;case"constant_alpha":return gl.CONSTANT_ALPHA;case"one_minus_constant_color":return gl.ONE_MINUS_CONSTANT_COLOR;case"one_minus_constant_alpha":return gl.ONE_MINUS_CONSTANT_ALPHA;default:return 0;}};x3dom.Utils.blendEquation=function(gl,func) +{switch(func.toLowerCase()) +{case"func_add":return gl.FUNC_ADD;case"func_subtract":return gl.FUNC_SUBTRACT;case"func_reverse_subtract":return gl.FUNC_REVERSE_SUBTRACT;case"min":return 0;case"max":return 0;case"logic_op":return 0;default:return 0;}};x3dom.Utils.generateProperties=function(viewarea,shape) +{var property={};var geometry=shape._cf.geometry.node;var appearance=shape._cf.appearance.node;var texture=appearance?appearance._cf.texture.node:null;var material=appearance?appearance._cf.material.node:null;var environment=viewarea._scene.getEnvironment();if(appearance&&appearance._shader&&x3dom.isa(appearance._shader,x3dom.nodeTypes.ComposedShader)){property.CSHADER=appearance._shader._id;} +else if(geometry){property.CSHADER=-1;property.SOLID=(shape.isSolid())?1:0;property.TEXT=(x3dom.isa(geometry,x3dom.nodeTypes.Text))?1:0;property.POPGEOMETRY=(x3dom.isa(geometry,x3dom.nodeTypes.PopGeometry))?1:0;property.IMAGEGEOMETRY=(x3dom.isa(geometry,x3dom.nodeTypes.ImageGeometry))?1:0;property.BINARYGEOMETRY=(x3dom.isa(geometry,x3dom.nodeTypes.BinaryGeometry))?1:0;property.IG_PRECISION=(property.IMAGEGEOMETRY)?geometry.numCoordinateTextures():0;property.IG_INDEXED=(property.IMAGEGEOMETRY&&geometry.getIndexTexture()!=null)?1:0;property.POINTLINE2D=!geometry.needLighting()?1:0;property.VERTEXID=(property.BINARYGEOMETRY&&geometry._vf.idsPerVertex)?1:0;property.APPMAT=(appearance&&(material||property.CSSHADER))?1:0;property.SHADOW=(viewarea.getLightsShadow())?1:0;property.FOG=(viewarea._scene.getFog()._vf.visibilityRange>0)?1:0;property.CSSHADER=(appearance&&appearance._shader&&x3dom.isa(appearance._shader,x3dom.nodeTypes.CommonSurfaceShader))?1:0;property.LIGHTS=(!property.POINTLINE2D&&appearance&&shape.isLit()&&(material||property.CSSHADER))?viewarea.getLights().length+(viewarea._scene.getNavigationInfo()._vf.headlight):0;property.TEXTURED=(texture||property.TEXT)?1:0;property.TEXTRAFO=(appearance&&appearance._cf.textureTransform.node)?1:0;property.DIFFUSEMAP=(property.CSSHADER&&appearance._shader.getDiffuseMap())?1:0;property.NORMALMAP=(property.CSSHADER&&appearance._shader.getNormalMap())?1:0;property.SPECMAP=(property.CSSHADER&&appearance._shader.getSpecularMap())?1:0;property.SHINMAP=(property.CSSHADER&&appearance._shader.getShininessMap())?1:0;property.DISPLACEMENTMAP=(property.CSSHADER&&appearance._shader.getDisplacementMap())?1:0;property.DIFFPLACEMENTMAP=(property.CSSHADER&&appearance._shader.getDiffuseDisplacementMap())?1:0;property.MULTIDIFFALPMAP=(property.VERTEXID&&property.CSSHADER&&appearance._shader.getMultiDiffuseAlphaMap())?1:0;property.MULTIVISMAP=(property.VERTEXID&&property.CSSHADER&&appearance._shader.getMultiVisibilityMap())?1:0;property.CUBEMAP=(texture&&x3dom.isa(texture,x3dom.nodeTypes.X3DEnvironmentTextureNode))?1:0;property.BLENDING=(property.TEXT||property.CUBEMAP||(texture&&texture._blending))?1:0;property.REQUIREBBOX=(geometry._vf.coordType!==undefined&&geometry._vf.coordType!="Float32")?1:0;property.REQUIREBBOXNOR=(geometry._vf.normalType!==undefined&&geometry._vf.normalType!="Float32")?1:0;property.REQUIREBBOXCOL=(geometry._vf.colorType!==undefined&&geometry._vf.colorType!="Float32")?1:0;property.REQUIREBBOXTEX=(geometry._vf.texCoordType!==undefined&&geometry._vf.texCoordType!="Float32")?1:0;property.COLCOMPONENTS=geometry._mesh._numColComponents;property.NORCOMPONENTS=geometry._mesh._numNormComponents;property.POSCOMPONENTS=geometry._mesh._numPosComponents;property.SPHEREMAPPING=(geometry._cf.texCoord!==undefined&&geometry._cf.texCoord.node!==null&&geometry._cf.texCoord.node._vf.mode&&geometry._cf.texCoord.node._vf.mode.toLowerCase()=="sphere")?1:0;property.VERTEXCOLOR=(geometry._mesh._colors[0].length>0||(property.IMAGEGEOMETRY&&geometry.getColorTexture())||(property.POPGEOMETRY&&geometry.hasColor())||(geometry._vf.color!==undefined&&geometry._vf.color.length>0))?1:0;property.GAMMACORRECTION=environment._vf.gammaCorrectionDefault;} +property.toIdentifier=function(){var id="";for(var p in this){if(this[p]!=this.toIdentifier&&this[p]!=this.toString){id+=this[p];}} +this.id=id;return id;};property.toString=function(){var str="";for(var p in this){if(this[p]!=this.toIdentifier&&this[p]!=this.toString){str+=p+": "+this[p]+", ";}} +return str;};property.toIdentifier();return property;};x3dom.Utils.wrapProgram=function(gl,program,shaderID) +{var shader={shaderID:shaderID,program:program};shader.bind=function(){gl.useProgram(program);};var loc=null;var obj=null;var i,glErr;var numUniforms=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS);for(i=0;i<numUniforms;++i){try{obj=gl.getActiveUniform(program,i);} +catch(eu){if(!obj)continue;} +glErr=gl.getError();if(glErr){x3dom.debug.logError("GL-Error (on searching uniforms): "+glErr);} +loc=gl.getUniformLocation(program,obj.name);switch(obj.type){case gl.SAMPLER_2D:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform1i(loc,val);};})(loc));break;case gl.SAMPLER_CUBE:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform1i(loc,val);};})(loc));break;case gl.BOOL:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform1i(loc,val);};})(loc));break;case gl.FLOAT:if(obj.name.indexOf("[0]")!=-1) +shader.__defineSetter__(obj.name.substring(0,obj.name.length-3),(function(loc){return function(val){gl.uniform1fv(loc,new Float32Array(val));};})(loc));else +shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform1f(loc,val);};})(loc));break;case gl.FLOAT_VEC2:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform2f(loc,val[0],val[1]);};})(loc));break;case gl.FLOAT_VEC3:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform3f(loc,val[0],val[1],val[2]);};})(loc));break;case gl.FLOAT_VEC4:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform4f(loc,val[0],val[1],val[2],val[3]);};})(loc));break;case gl.FLOAT_MAT2:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniformMatrix2fv(loc,false,new Float32Array(val));};})(loc));break;case gl.FLOAT_MAT3:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniformMatrix3fv(loc,false,new Float32Array(val));};})(loc));break;case gl.FLOAT_MAT4:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniformMatrix4fv(loc,false,new Float32Array(val));};})(loc));break;case gl.INT:shader.__defineSetter__(obj.name,(function(loc){return function(val){gl.uniform1i(loc,val);};})(loc));break;default:x3dom.debug.logWarning('GLSL program variable '+obj.name+' has unknown type '+obj.type);}} +var numAttribs=gl.getProgramParameter(program,gl.ACTIVE_ATTRIBUTES);for(i=0;i<numAttribs;++i){try{obj=gl.getActiveAttrib(program,i);} +catch(ea){if(!obj)continue;} +glErr=gl.getError();if(glErr){x3dom.debug.logError("GL-Error (on searching attributes): "+glErr);} +loc=gl.getAttribLocation(program,obj.name);shader[obj.name]=loc;} +return shader;};x3dom.States=function(x3dElem){var that=this;this.active=false;this.viewer=document.createElement('div');this.viewer.id='x3dom-state-viewer';var title=document.createElement('div');title.className='x3dom-states-head';var subTitle=document.createElement('span');subTitle.className='x3dom-states-head2';title.appendChild(subTitle);this.measureList=document.createElement('ul');this.measureList.className='x3dom-states-list';this.infoList=document.createElement('ul');this.infoList.className='x3dom-states-list';this.viewer.appendChild(title);this.viewer.appendChild(this.measureList);this.viewer.appendChild(this.infoList);this.disableContextMenu=function(e){e.preventDefault();e.stopPropagation();e.returnValue=false;return false;};this.thousandSeperator=function(value){return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");};this.toFixed=function(value){var fixed=(value<1)?2:(value<10)?2:2;return value.toFixed(fixed);};this.update=function(){if(!x3dElem.runtime&&this.updateMethodID!==undefined){clearInterval(this.updateMethodID);return;} +var infos=x3dElem.runtime.states.infos;var measurements=x3dElem.runtime.states.measurements;this.measureList.innerHTML="";for(var m in measurements){infoItem=document.createElement('li');infoItem.className='x3dom-states-item';infoTitle=document.createElement('div');infoTitle.className='x3dom-states-item-title';infoTitle.appendChild(document.createTextNode(m));infoValue=document.createElement('div');infoValue.className='x3dom-states-item-value';infoValue.appendChild(document.createTextNode(this.toFixed(measurements[m])));infoItem.appendChild(infoTitle);infoItem.appendChild(infoValue);this.measureList.appendChild(infoItem);} +this.infoList.innerHTML="";for(var i in infos){var infoItem=document.createElement('li');infoItem.className='x3dom-states-item';var infoTitle=document.createElement('div');infoTitle.className='x3dom-states-item-title';infoTitle.appendChild(document.createTextNode(i));var infoValue=document.createElement('div');infoValue.className='x3dom-states-item-value';infoValue.appendChild(document.createTextNode(this.thousandSeperator(infos[i])));infoItem.appendChild(infoTitle);infoItem.appendChild(infoValue);this.infoList.appendChild(infoItem);}};this.updateMethodID=window.setInterval(function(){that.update();},1000);this.viewer.addEventListener("contextmenu",that.disableContextMenu);};x3dom.States.prototype.display=function(value){this.active=(value!==undefined)?value:!this.active;this.viewer.style.display=(this.active)?"block":"none";};x3dom.StateManager=function(ctx3d) +{this.gl=ctx3d;this.states=[];this.initStates();};x3dom.StateManager.prototype.initStates=function() +{this.states['shaderID']=null;this.states['colorMask']={red:null,green:null,blue:null,alpha:null};this.states['depthMask']=null;this.states['stencilMask']=null;this.states['cullFace']=null;this.states['frontFace']=null;this.states['lineWidth']=null;this.states['blendColor']={red:null,green:null,blue:null,alpha:null};this.states['blendEquation']=null;this.states['blendEquationSeparate']={modeRGB:null,modeAlpha:null};this.states['blendFunc']={sfactor:null,dfactor:null};this.states['blendFuncSeparate']={srcRGB:null,dstRGB:null,srcAlpha:null,dstAlpha:null};this.states['depthFunc']=null;this.states['viewport']={x:null,y:null,width:null,height:null};this.states['depthRange']={zNear:null,zFar:null};};x3dom.StateManager.prototype.useProgram=function(shader) +{if(this.states['shaderID']!=shader.shaderID) +{this.gl.useProgram(shader.program);this.states['shaderID']=shader.shaderID;return true;} +return false;};x3dom.StateManager.prototype.unsetProgram=function() +{this.states['shaderID']=null;};x3dom.StateManager.prototype.enable=function(cap) +{if(this.states[cap]!==true) +{this.gl.enable(cap);this.states[cap]=true;}};x3dom.StateManager.prototype.disable=function(cap) +{if(this.states[cap]!==false) +{this.gl.disable(cap);this.states[cap]=false;}};x3dom.StateManager.prototype.colorMask=function(red,green,blue,alpha) +{if(this.states['colorMask'].red!=red||this.states['colorMask'].green!=green||this.states['colorMask'].blue!=blue||this.states['colorMask'].alpha!=alpha) +{this.gl.colorMask(red,green,blue,alpha);this.states['colorMask'].red=red;this.states['colorMask'].green=green;this.states['colorMask'].blue=blue;this.states['colorMask'].alpha=alpha;}};x3dom.StateManager.prototype.depthMask=function(flag) +{if(this.states['depthMask']!=flag) +{this.gl.depthMask(flag);this.states['depthMask']=flag;}};x3dom.StateManager.prototype.stencilMask=function(mask) +{if(this.states['stencilMask']!=mask) +{this.gl.stencilMask(mask);this.states['stencilMask']=mask;}};x3dom.StateManager.prototype.cullFace=function(mode) +{if(this.states['cullFace']!=mode) +{this.gl.cullFace(mode);this.states['cullFace']=mode;}};x3dom.StateManager.prototype.frontFace=function(mode) +{if(this.states['frontFace']!=mode) +{this.gl.frontFace(mode);this.states['frontFace']=mode;}};x3dom.StateManager.prototype.lineWidth=function(width) +{width=(width<=1)?1:width;if(this.states['lineWidth']!=width) +{this.gl.lineWidth(width);this.states['lineWidth']=width;}};x3dom.StateManager.prototype.blendColor=function(red,green,blue,alpha) +{if(this.states['blendColor'].red!=red||this.states['blendColor'].green!=green||this.states['blendColor'].blue!=blue||this.states['blendColor'].alpha!=alpha) +{this.gl.blendColor(red,green,blue,alpha);this.states['blendColor'].red=red;this.states['blendColor'].green=green;this.states['blendColor'].blue=blue;this.states['blendColor'].alpha=alpha;}};x3dom.StateManager.prototype.blendEquation=function(mode) +{if(mode&&this.states['blendEquation']!=mode) +{this.gl.blendEquation(mode);this.states['blendEquation']=mode;}};x3dom.StateManager.prototype.blendEquationSeparate=function(modeRGB,modeAlpha) +{if(this.states['blendEquationSeparate'].modeRGB!=modeRGB||this.states['blendEquationSeparate'].modeAlpha!=modeAlpha) +{this.gl.blendEquationSeparate(modeRGB,modeAlpha);this.states['blendEquationSeparate'].modeRGB=modeRGB;this.states['blendEquationSeparate'].modeAlpha=modeAlpha;}};x3dom.StateManager.prototype.blendFunc=function(sfactor,dfactor) +{if(this.states['blendFunc'].sfactor!=sfactor||this.states['blendFunc'].dfactor!=dfactor) +{this.gl.blendFunc(sfactor,dfactor);this.states['blendFunc'].sfactor=sfactor;this.states['blendFunc'].dfactor=dfactor;}};x3dom.StateManager.prototype.blendFuncSeparate=function(srcRGB,dstRGB,srcAlpha,dstAlpha) +{if(this.states['blendFuncSeparate'].srcRGB!=srcRGB||this.states['blendFuncSeparate'].dstRGB!=dstRGB||this.states['blendFuncSeparate'].srcAlpha!=srcAlpha||this.states['blendFuncSeparate'].dstAlpha!=dstAlpha) +{this.gl.blendFuncSeparate(srcRGB,dstRGB,srcAlpha,dstAlpha);this.states['blendFuncSeparate'].srcRGB=srcRGB;this.states['blendFuncSeparate'].dstRGB=dstRGB;this.states['blendFuncSeparate'].srcAlpha=srcAlpha;this.states['blendFuncSeparate'].dstAlpha=dstAlpha;}};x3dom.StateManager.prototype.depthFunc=function(func) +{if(this.states['depthFunc']!=func) +{this.gl.depthFunc(func);this.states['depthFunc']=func;}};x3dom.StateManager.prototype.depthRange=function(zNear,zFar) +{if(zNear<0||zFar<0||zNear>zFar) +{return;} +zNear=(zNear>1)?1:zNear;zFar=(zFar>1)?1:zFar;if(this.states['depthRange'].zNear!=zNear||this.states['depthRange'].zFar!=zFar) +{this.gl.depthRange(zNear,zFar);this.states['depthRange'].zNear=zNear;this.states['depthRange'].zFar=zFar;}};x3dom.StateManager.prototype.viewport=function(x,y,width,height) +{if(this.states['viewport'].x!=x||this.states['viewport'].y!=y||this.states['viewport'].width!=width||this.states['viewport'].height!=height) +{this.gl.viewport(x,y,width,height);this.states['viewport'].x=x;this.states['viewport'].y=y;this.states['viewport'].width=width;this.states['viewport'].height=height;}};x3dom.StateManager.prototype.bindFramebuffer=function(target,framebuffer) +{this.gl.bindFramebuffer(target,framebuffer);this.initStates();};x3dom.BinaryContainerLoader={outOfMemory:false,checkError:function(gl){var glErr=gl.getError();if(glErr){if(glErr==gl.OUT_OF_MEMORY){this.outOfMemory=true;x3dom.debug.logError("GL-Error "+glErr+" on loading binary container (out of memory).");console.error("WebGL: OUT_OF_MEMORY");} +else{x3dom.debug.logError("GL-Error "+glErr+" on loading binary container.");}}}};x3dom.BinaryContainerLoader.setupBinGeo=function(shape,sp,gl,viewarea,currContext) +{if(this.outOfMemory){return;} +var t00=new Date().getTime();var that=this;var binGeo=shape._cf.geometry.node;shape._webgl.binaryGeometry=-1;shape._webgl.internalDownloadCount=((binGeo._vf.index.length>0)?1:0)+ +((binGeo._hasStrideOffset&&binGeo._vf.coord.length>0)?1:0)+ +((!binGeo._hasStrideOffset&&binGeo._vf.coord.length>0)?1:0)+ +((!binGeo._hasStrideOffset&&binGeo._vf.normal.length>0)?1:0)+ +((!binGeo._hasStrideOffset&&binGeo._vf.texCoord.length>0)?1:0)+ +((!binGeo._hasStrideOffset&&binGeo._vf.color.length>0)?1:0);var createTriangleSoup=(binGeo._vf.normalPerVertex==false)||((binGeo._vf.index.length>0)&&(binGeo._vf.indexType=="Int32"||(binGeo._vf.indexType=="Uint32"&&!x3dom.caps.INDEX_UINT)));shape._webgl.makeSeparateTris={index:null,coord:null,normal:null,texCoord:null,color:null,pushBuffer:function(name,buf){this[name]=buf;if(--shape._webgl.internalDownloadCount==0){if(this.coord) +this.createMesh();shape._nameSpace.doc.needRender=true;} +if(--shape._nameSpace.doc.downloadCount==0) +shape._nameSpace.doc.needRender=true;},createMesh:function(){var geoNode=binGeo;if(geoNode._hasStrideOffset){x3dom.debug.logError(geoNode._vf.indexType+" index type and per-face normals not supported for interleaved arrays.");return;} +for(var k=0;k<shape._webgl.primType.length;k++){if(shape._webgl.primType[k]==gl.TRIANGLE_STRIP){x3dom.debug.logError("makeSeparateTris: triangle strips not yet supported for per-face normals.");return;}} +var attribTypeStr=geoNode._vf.coordType;shape._webgl.coordType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);var bgCenter,bgSize,bgPrecisionMax;if(shape._webgl.coordType!=gl.FLOAT) +{if(geoNode._mesh._numPosComponents==4&&x3dom.Utils.isUnsignedType(geoNode._vf.coordType)) +bgCenter=x3dom.fields.SFVec3f.copy(geoNode.getMin());else +bgCenter=x3dom.fields.SFVec3f.copy(geoNode._vf.position);bgSize=x3dom.fields.SFVec3f.copy(geoNode._vf.size);bgPrecisionMax=geoNode.getPrecisionMax('coordType');} +else +{bgCenter=new x3dom.fields.SFVec3f(0,0,0);bgSize=new x3dom.fields.SFVec3f(1,1,1);bgPrecisionMax=1.0;} +var dataLen=shape._coordStrideOffset[0]/x3dom.Utils.getDataTypeSize(geoNode._vf.coordType);dataLen=(dataLen==0)?3:dataLen;x3dom.debug.logWarning("makeSeparateTris.createMesh called with coord length "+dataLen);if(this.color&&dataLen!=shape._colorStrideOffset[0]/x3dom.Utils.getDataTypeSize(geoNode._vf.colorType)) +{this.color=null;x3dom.debug.logWarning("Color format not supported.");} +var texDataLen=this.texCoord?(shape._texCoordStrideOffset[0]/x3dom.Utils.getDataTypeSize(geoNode._vf.texCoordType)):0;geoNode._vf.normalType="Float32";shape._webgl.normalType=gl.FLOAT;geoNode._mesh._numNormComponents=3;shape._normalStrideOffset=[0,0];var posBuf=[],normBuf=[],texcBuf=[],colBuf=[];var i,j,l,n=this.index?(this.index.length-2):(this.coord.length/3-2);for(i=0;i<n;i+=3) +{j=dataLen*(this.index?this.index[i]:i);var p0=new x3dom.fields.SFVec3f(bgSize.x*this.coord[j]/bgPrecisionMax,bgSize.y*this.coord[j+1]/bgPrecisionMax,bgSize.z*this.coord[j+2]/bgPrecisionMax);posBuf.push(this.coord[j]);posBuf.push(this.coord[j+1]);posBuf.push(this.coord[j+2]);if(dataLen>3)posBuf.push(this.coord[j+3]);if(this.color){colBuf.push(this.color[j]);colBuf.push(this.color[j+1]);colBuf.push(this.color[j+2]);if(dataLen>3)colBuf.push(this.color[j+3]);} +if(this.texCoord){l=texDataLen*(this.index?this.index[i]:i);texcBuf.push(this.texCoord[l]);texcBuf.push(this.texCoord[l+1]);if(texDataLen>3){texcBuf.push(this.texCoord[l+2]);texcBuf.push(this.texCoord[l+3]);}} +j=dataLen*(this.index?this.index[i+1]:i+1);var p1=new x3dom.fields.SFVec3f(bgSize.x*this.coord[j]/bgPrecisionMax,bgSize.y*this.coord[j+1]/bgPrecisionMax,bgSize.z*this.coord[j+2]/bgPrecisionMax);posBuf.push(this.coord[j]);posBuf.push(this.coord[j+1]);posBuf.push(this.coord[j+2]);if(dataLen>3)posBuf.push(this.coord[j+3]);if(this.color){colBuf.push(this.color[j]);colBuf.push(this.color[j+1]);colBuf.push(this.color[j+2]);if(dataLen>3)colBuf.push(this.color[j+3]);} +if(this.texCoord){l=texDataLen*(this.index?this.index[i+1]:i+1);texcBuf.push(this.texCoord[l]);texcBuf.push(this.texCoord[l+1]);if(texDataLen>3){texcBuf.push(this.texCoord[l+2]);texcBuf.push(this.texCoord[l+3]);}} +j=dataLen*(this.index?this.index[i+2]:i+2);var p2=new x3dom.fields.SFVec3f(bgSize.x*this.coord[j]/bgPrecisionMax,bgSize.y*this.coord[j+1]/bgPrecisionMax,bgSize.z*this.coord[j+2]/bgPrecisionMax);posBuf.push(this.coord[j]);posBuf.push(this.coord[j+1]);posBuf.push(this.coord[j+2]);if(dataLen>3)posBuf.push(this.coord[j+3]);if(this.color){colBuf.push(this.color[j]);colBuf.push(this.color[j+1]);colBuf.push(this.color[j+2]);if(dataLen>3)colBuf.push(this.color[j+3]);} +if(this.texCoord){l=texDataLen*(this.index?this.index[i+2]:i+2);texcBuf.push(this.texCoord[l]);texcBuf.push(this.texCoord[l+1]);if(texDataLen>3){texcBuf.push(this.texCoord[l+2]);texcBuf.push(this.texCoord[l+3]);}} +var a=p0.subtract(p1);var b=p1.subtract(p2);var norm=a.cross(b).normalize();for(j=0;j<3;j++){normBuf.push(norm.x);normBuf.push(norm.y);normBuf.push(norm.z);}} +var buffer=gl.createBuffer();shape._webgl.buffers[1]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,x3dom.Utils.getArrayBufferView(geoNode._vf.coordType,posBuf),gl.STATIC_DRAW);gl.vertexAttribPointer(sp.position,geoNode._mesh._numPosComponents,shape._webgl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);buffer=gl.createBuffer();shape._webgl.buffers[2]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(normBuf),gl.STATIC_DRAW);gl.vertexAttribPointer(sp.normal,geoNode._mesh._numNormComponents,shape._webgl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);gl.enableVertexAttribArray(sp.normal);if(this.texCoord) +{buffer=gl.createBuffer();shape._webgl.buffers[3]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,x3dom.Utils.getArrayBufferView(geoNode._vf.texCoordType,texcBuf),gl.STATIC_DRAW);gl.vertexAttribPointer(sp.texcoord,geoNode._mesh._numTexComponents,shape._webgl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);gl.enableVertexAttribArray(sp.texcoord);} +if(this.color) +{buffer=gl.createBuffer();shape._webgl.buffers[4]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,x3dom.Utils.getArrayBufferView(geoNode._vf.colorType,colBuf),gl.STATIC_DRAW);gl.vertexAttribPointer(sp.color,geoNode._mesh._numColComponents,shape._webgl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);gl.enableVertexAttribArray(sp.color);} +geoNode._vf.vertexCount=[];geoNode._vf.vertexCount[0]=posBuf.length/dataLen;geoNode._mesh._numCoords=geoNode._vf.vertexCount[0];geoNode._mesh._numFaces=geoNode._vf.vertexCount[0]/3;shape._webgl.primType=[];shape._webgl.primType[0]=gl.TRIANGLES;posBuf=null;normBuf=null;texcBuf=null;colBuf=null;this.index=null;this.coord=null;this.normal=null;this.texCoord=null;this.color=null;that.checkError(gl);delete shape._webgl.shader;shape._webgl.shader=currContext.cache.getDynamicShader(gl,viewarea,shape);}};if(binGeo._vf.index.length>0) +{var xmlhttp0=new XMLHttpRequest();xmlhttp0.open("GET",encodeURI(shape._nameSpace.getURL(binGeo._vf.index)),true);xmlhttp0.responseType="arraybuffer";shape._nameSpace.doc.downloadCount+=1;xmlhttp0.send(null);xmlhttp0.onload=function() +{if(!shape._webgl) +return;var XHR_buffer=xmlhttp0.response;var geoNode=binGeo;var attribTypeStr=geoNode._vf.indexType;var indexArray=x3dom.Utils.getArrayBufferView(attribTypeStr,XHR_buffer);if(createTriangleSoup){shape._webgl.makeSeparateTris.pushBuffer("index",indexArray);return;} +var indicesBuffer=gl.createBuffer();shape._webgl.buffers[0]=indicesBuffer;if(x3dom.caps.INDEX_UINT&&attribTypeStr=="Uint32"){shape._webgl.indexType=gl.UNSIGNED_INT;} +else{shape._webgl.indexType=gl.UNSIGNED_SHORT;} +gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indicesBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexArray,gl.STATIC_DRAW);shape._webgl.binaryGeometry=1;if(geoNode._vf.vertexCount[0]==0) +geoNode._vf.vertexCount[0]=indexArray.length;geoNode._mesh._numFaces=0;for(var i=0;i<geoNode._vf.vertexCount.length;i++){if(shape._webgl.primType[i]==gl.TRIANGLE_STRIP) +geoNode._mesh._numFaces+=geoNode._vf.vertexCount[i]-2;else +geoNode._mesh._numFaces+=geoNode._vf.vertexCount[i]/3;} +indexArray=null;shape._nameSpace.doc.downloadCount-=1;shape._webgl.internalDownloadCount-=1;if(shape._webgl.internalDownloadCount==0) +shape._nameSpace.doc.needRender=true;that.checkError(gl);var t11=new Date().getTime()-t00;x3dom.debug.logInfo("XHR0/ index load time: "+t11+" ms");};} +if(binGeo._hasStrideOffset&&binGeo._vf.coord.length>0) +{var xmlhttp=new XMLHttpRequest();xmlhttp.open("GET",encodeURI(shape._nameSpace.getURL(binGeo._vf.coord)),true);xmlhttp.responseType="arraybuffer";shape._nameSpace.doc.downloadCount+=1;xmlhttp.send(null);xmlhttp.onload=function() +{if(!shape._webgl) +return;var XHR_buffer=xmlhttp.response;var geoNode=binGeo;var attribTypeStr=geoNode._vf.coordType;shape._webgl.coordType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);shape._webgl.normalType=shape._webgl.coordType;shape._webgl.texCoordType=shape._webgl.coordType;shape._webgl.colorType=shape._webgl.coordType;var attributes=x3dom.Utils.getArrayBufferView(attribTypeStr,XHR_buffer);var dataLen=shape._coordStrideOffset[0]/x3dom.Utils.getDataTypeSize(attribTypeStr);if(dataLen) +geoNode._mesh._numCoords=attributes.length/dataLen;if(geoNode._vf.index.length==0){for(var i=0;i<geoNode._vf.vertexCount.length;i++){if(shape._webgl.primType[i]==gl.TRIANGLE_STRIP) +geoNode._mesh._numFaces+=geoNode._vf.vertexCount[i]-2;else +geoNode._mesh._numFaces+=geoNode._vf.vertexCount[i]/3;}} +var buffer=gl.createBuffer();shape._webgl.buffers[1]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,attributes,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.position,geoNode._mesh._numPosComponents,shape._webgl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);if(geoNode._vf.normal.length>0) +{shape._webgl.buffers[2]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,attributes,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.normal,geoNode._mesh._numNormComponents,shape._webgl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);gl.enableVertexAttribArray(sp.normal);} +if(geoNode._vf.texCoord.length>0) +{shape._webgl.buffers[3]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,attributes,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.texcoord,geoNode._mesh._numTexComponents,shape._webgl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);gl.enableVertexAttribArray(sp.texcoord);} +if(geoNode._vf.color.length>0) +{shape._webgl.buffers[4]=buffer;gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,attributes,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.color,geoNode._mesh._numColComponents,shape._webgl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);gl.enableVertexAttribArray(sp.color);} +attributes=null;shape._nameSpace.doc.downloadCount-=1;shape._webgl.internalDownloadCount-=1;if(shape._webgl.internalDownloadCount==0) +shape._nameSpace.doc.needRender=true;that.checkError(gl);var t11=new Date().getTime()-t00;x3dom.debug.logInfo("XHR/ interleaved array load time: "+t11+" ms");};} +if(!binGeo._hasStrideOffset&&binGeo._vf.coord.length>0) +{var xmlhttp1=new XMLHttpRequest();xmlhttp1.open("GET",encodeURI(shape._nameSpace.getURL(binGeo._vf.coord)),true);xmlhttp1.responseType="arraybuffer";shape._nameSpace.doc.downloadCount+=1;xmlhttp1.send(null);xmlhttp1.onload=function() +{if(!shape._webgl) +return;var XHR_buffer=xmlhttp1.response;var geoNode=binGeo;var i=0;var attribTypeStr=geoNode._vf.coordType;shape._webgl.coordType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);var vertices=x3dom.Utils.getArrayBufferView(attribTypeStr,XHR_buffer);if(createTriangleSoup){shape._webgl.makeSeparateTris.pushBuffer("coord",vertices);return;} +gl.bindAttribLocation(sp.program,0,"position");var positionBuffer=gl.createBuffer();shape._webgl.buffers[1]=positionBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.vertexAttribPointer(sp.position,geoNode._mesh._numPosComponents,shape._webgl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);geoNode._mesh._numCoords=vertices.length/geoNode._mesh._numPosComponents;if(geoNode._vf.index.length==0){for(i=0;i<geoNode._vf.vertexCount.length;i++){if(shape._webgl.primType[i]==gl.TRIANGLE_STRIP) +geoNode._mesh._numFaces+=geoNode._vf.vertexCount[i]-2;else +geoNode._mesh._numFaces+=geoNode._vf.vertexCount[i]/3;}} +if((attribTypeStr=="Float32")&&(shape._vf.bboxSize.x<0||shape._vf.bboxSize.y<0||shape._vf.bboxSize.z<0)) +{var min=new x3dom.fields.SFVec3f(vertices[0],vertices[1],vertices[2]);var max=new x3dom.fields.SFVec3f(vertices[0],vertices[1],vertices[2]);for(i=3;i<vertices.length;i+=3) +{if(min.x>vertices[i+0]){min.x=vertices[i+0];} +if(min.y>vertices[i+1]){min.y=vertices[i+1];} +if(min.z>vertices[i+2]){min.z=vertices[i+2];} +if(max.x<vertices[i+0]){max.x=vertices[i+0];} +if(max.y<vertices[i+1]){max.y=vertices[i+1];} +if(max.z<vertices[i+2]){max.z=vertices[i+2];}} +shape._vf.bboxCenter.setValues(min.add(max).multiply(0.5));shape._vf.bboxSize.setValues(max.subtract(min));} +vertices=null;shape._nameSpace.doc.downloadCount-=1;shape._webgl.internalDownloadCount-=1;if(shape._webgl.internalDownloadCount==0) +shape._nameSpace.doc.needRender=true;that.checkError(gl);var t11=new Date().getTime()-t00;x3dom.debug.logInfo("XHR1/ coord load time: "+t11+" ms");};} +if(!binGeo._hasStrideOffset&&binGeo._vf.normal.length>0) +{var xmlhttp2=new XMLHttpRequest();xmlhttp2.open("GET",encodeURI(shape._nameSpace.getURL(binGeo._vf.normal)),true);xmlhttp2.responseType="arraybuffer";shape._nameSpace.doc.downloadCount+=1;xmlhttp2.send(null);xmlhttp2.onload=function() +{if(!shape._webgl) +return;var XHR_buffer=xmlhttp2.response;var attribTypeStr=binGeo._vf.normalType;shape._webgl.normalType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);var normals=x3dom.Utils.getArrayBufferView(attribTypeStr,XHR_buffer);if(createTriangleSoup){shape._webgl.makeSeparateTris.pushBuffer("normal",normals);return;} +var normalBuffer=gl.createBuffer();shape._webgl.buffers[2]=normalBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,normalBuffer);gl.bufferData(gl.ARRAY_BUFFER,normals,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.normal,binGeo._mesh._numNormComponents,shape._webgl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);gl.enableVertexAttribArray(sp.normal);normals=null;shape._nameSpace.doc.downloadCount-=1;shape._webgl.internalDownloadCount-=1;if(shape._webgl.internalDownloadCount==0) +shape._nameSpace.doc.needRender=true;that.checkError(gl);var t11=new Date().getTime()-t00;x3dom.debug.logInfo("XHR2/ normal load time: "+t11+" ms");};} +if(!binGeo._hasStrideOffset&&binGeo._vf.texCoord.length>0) +{var xmlhttp3=new XMLHttpRequest();xmlhttp3.open("GET",encodeURI(shape._nameSpace.getURL(binGeo._vf.texCoord)),true);xmlhttp3.responseType="arraybuffer";shape._nameSpace.doc.downloadCount+=1;xmlhttp3.send(null);xmlhttp3.onload=function() +{var i,j;var tmp;if(!shape._webgl) +return;var XHR_buffer=xmlhttp3.response;var attribTypeStr=binGeo._vf.texCoordType;shape._webgl.texCoordType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);var texCoords=x3dom.Utils.getArrayBufferView(attribTypeStr,XHR_buffer);if(createTriangleSoup){shape._webgl.makeSeparateTris.pushBuffer("texCoord",texCoords);return;} +if(binGeo._vf["idsPerVertex"]) +{var idBuffer=gl.createBuffer();shape._webgl.buffers[5]=idBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,idBuffer);var texCoordStride=(shape._texCoordStrideOffset[0]===0)?2:shape._texCoordStrideOffset[0]/4;var ids=x3dom.Utils.getArrayBufferView(attribTypeStr,texCoords.length/2);for(i=0,j=0;i<texCoords.length;i+=2,j++) +{ids[j]=texCoords[i+1]*65536+texCoords[i];} +gl.bufferData(gl.ARRAY_BUFFER,ids,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.id,1,gl.FLOAT,false,4,0);gl.enableVertexAttribArray(sp.id);} +else +{var texcBuffer=gl.createBuffer();shape._webgl.buffers[3]=texcBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,texcBuffer);gl.bufferData(gl.ARRAY_BUFFER,texCoords,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.texcoord,binGeo._mesh._numTexComponents,shape._webgl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);gl.enableVertexAttribArray(sp.texcoord);} +texCoords=null;shape._nameSpace.doc.downloadCount-=1;shape._webgl.internalDownloadCount-=1;if(shape._webgl.internalDownloadCount==0) +shape._nameSpace.doc.needRender=true;that.checkError(gl);var t11=new Date().getTime()-t00;x3dom.debug.logInfo("XHR3/ texCoord load time: "+t11+" ms");};} +if(!binGeo._hasStrideOffset&&binGeo._vf.color.length>0) +{var xmlhttp4=new XMLHttpRequest();xmlhttp4.open("GET",encodeURI(shape._nameSpace.getURL(binGeo._vf.color)),true);xmlhttp4.responseType="arraybuffer";shape._nameSpace.doc.downloadCount+=1;xmlhttp4.send(null);xmlhttp4.onload=function() +{if(!shape._webgl) +return;var XHR_buffer=xmlhttp4.response;var attribTypeStr=binGeo._vf.colorType;shape._webgl.colorType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);var colors=x3dom.Utils.getArrayBufferView(attribTypeStr,XHR_buffer);if(createTriangleSoup){shape._webgl.makeSeparateTris.pushBuffer("color",colors);return;} +var colorBuffer=gl.createBuffer();shape._webgl.buffers[4]=colorBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,colorBuffer);gl.bufferData(gl.ARRAY_BUFFER,colors,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.color,binGeo._mesh._numColComponents,shape._webgl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);gl.enableVertexAttribArray(sp.color);colors=null;shape._nameSpace.doc.downloadCount-=1;shape._webgl.internalDownloadCount-=1;if(shape._webgl.internalDownloadCount==0) +shape._nameSpace.doc.needRender=true;that.checkError(gl);var t11=new Date().getTime()-t00;x3dom.debug.logInfo("XHR4/ color load time: "+t11+" ms");};}};x3dom.BinaryContainerLoader.setupPopGeo=function(shape,sp,gl,viewarea,currContext) +{if(this.outOfMemory){return;} +var popGeo=shape._cf.geometry.node;if(popGeo.hasIndex()){shape._webgl.popGeometry=1;shape._webgl.buffers[0]=gl.createBuffer();gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,shape._webgl.buffers[0]);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,popGeo.getTotalNumberOfIndices()*2,gl.STATIC_DRAW);shape._webgl.buffers[5]=gl.createBuffer();var idBuffer=new Float32Array(popGeo._vf.vertexBufferSize);(function(){for(var i=0;i<idBuffer.length;++i)idBuffer[i]=i;})();gl.bindBuffer(gl.ARRAY_BUFFER,shape._webgl.buffers[5]);gl.bufferData(gl.ARRAY_BUFFER,idBuffer,gl.STATIC_DRAW);} +else{shape._webgl.popGeometry=-1;} +shape._webgl.buffers[1]=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,shape._webgl.buffers[1]);gl.bufferData(gl.ARRAY_BUFFER,(popGeo._vf.attributeStride*popGeo._vf.vertexBufferSize),gl.STATIC_DRAW);var attribTypeStr=popGeo._vf.coordType;shape._webgl.coordType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);shape._coordStrideOffset[0]=popGeo.getAttributeStride();shape._coordStrideOffset[1]=popGeo.getPositionOffset();gl.vertexAttribPointer(sp.position,shape._cf.geometry.node._mesh._numPosComponents,shape._webgl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);if(popGeo.hasNormal()){attribTypeStr=popGeo._vf.normalType;shape._webgl.normalType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);shape._normalStrideOffset[0]=popGeo.getAttributeStride();shape._normalStrideOffset[1]=popGeo.getNormalOffset();shape._webgl.buffers[2]=shape._webgl.buffers[1];gl.vertexAttribPointer(sp.normal,shape._cf.geometry.node._mesh._numNormComponents,shape._webgl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);gl.enableVertexAttribArray(sp.normal);} +if(popGeo.hasTexCoord()){attribTypeStr=popGeo._vf.texCoordType;shape._webgl.texCoordType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);shape._webgl.buffers[3]=shape._webgl.buffers[1];shape._texCoordStrideOffset[0]=popGeo.getAttributeStride();shape._texCoordStrideOffset[1]=popGeo.getTexCoordOffset();gl.vertexAttribPointer(sp.texcoord,shape._cf.geometry.node._mesh._numTexComponents,shape._webgl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);gl.enableVertexAttribArray(sp.texcoord);} +if(popGeo.hasColor()){attribTypeStr=popGeo._vf.colorType;shape._webgl.colorType=x3dom.Utils.getVertexAttribType(attribTypeStr,gl);shape._webgl.buffers[4]=shape._webgl.buffers[1];shape._colorStrideOffset[0]=popGeo.getAttributeStride();shape._colorStrideOffset[1]=popGeo.getColorOffset();gl.vertexAttribPointer(sp.color,shape._cf.geometry.node._mesh._numColComponents,shape._webgl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);gl.enableVertexAttribArray(sp.color);} +shape._webgl.currentNumIndices=0;shape._webgl.currentNumVertices=0;shape._webgl.numVerticesAtLevel=[];shape._webgl.levelsAvailable=0;this.checkError(gl);shape._webgl.levelLoaded=[];(function(){for(var i=0;i<popGeo.getNumLevels();++i) +shape._webgl.levelLoaded.push(false);})();var uploadDataToGPU=function(data,lvl){shape._webgl.levelLoaded[lvl]=true;shape._webgl.numVerticesAtLevel[lvl]=0;if(data){var indexDataLengthInBytes=0;var redrawNeeded=false;if(popGeo.hasIndex()){indexDataLengthInBytes=popGeo.getNumIndicesByLevel(lvl)*2;if(indexDataLengthInBytes>0){redrawNeeded=true;var indexDataView=new Uint8Array(data,0,indexDataLengthInBytes);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,shape._webgl.buffers[0]);(function(){var indexDataOffset=0;for(var i=0;i<lvl;++i){indexDataOffset+=popGeo.getNumIndicesByLevel(i);} +gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,indexDataOffset*2,indexDataView);})();}} +var vertexDataLengthInBytes=data.byteLength-indexDataLengthInBytes;if(vertexDataLengthInBytes>0){redrawNeeded=true;var attributeDataView=new Uint8Array(data,indexDataLengthInBytes,vertexDataLengthInBytes);gl.bindBuffer(gl.ARRAY_BUFFER,shape._webgl.buffers[1]);if(!popGeo.hasIndex()){gl.bufferSubData(gl.ARRAY_BUFFER,shape._webgl.currentNumVertices*popGeo.getAttributeStride(),attributeDataView);} +else{gl.bufferSubData(gl.ARRAY_BUFFER,popGeo.getVertexDataBufferOffset(lvl)*popGeo.getAttributeStride(),attributeDataView);} +shape._webgl.numVerticesAtLevel[lvl]=vertexDataLengthInBytes/popGeo.getAttributeStride();shape._webgl.currentNumVertices+=shape._webgl.numVerticesAtLevel[lvl];} +(function(){var numValidIndices=0;for(var i=shape._webgl.levelsAvailable;i<popGeo.getNumLevels();++i){if(shape._webgl.levelLoaded[i]===false){break;} +else{numValidIndices+=popGeo.getNumIndicesByLevel(i);++shape._webgl.levelsAvailable;}} +shape._webgl.currentNumIndices=numValidIndices;})();popGeo._mesh._numCoords=shape._webgl.currentNumVertices;popGeo._mesh._numFaces=(popGeo.hasIndex()?shape._webgl.currentNumIndices:shape._webgl.currentNumVertices)/3;popGeo.adaptVertexCount(popGeo.hasIndex()?popGeo._mesh._numFaces*3:popGeo._mesh._numCoords);if(redrawNeeded){shape._nameSpace.doc.needRender=true;}}};var dataURLs=popGeo.getDataURLs();var downloadCallbacks=[];var priorities=[];shape._webgl.downloadStartTimer=new Date().getTime();for(var i=0;i<dataURLs.length;++i){shape._nameSpace.doc.downloadCount+=1;(function(idx){downloadCallbacks.push(function(data){shape._nameSpace.doc.downloadCount-=1;return uploadDataToGPU(data,idx);});})(i);priorities.push(i);} +x3dom.DownloadManager.get(dataURLs,downloadCallbacks,priorities);};x3dom.BinaryContainerLoader.setupImgGeo=function(shape,sp,gl,viewarea,currContext) +{if(this.outOfMemory){return;} +var imageGeometry=shape._cf.geometry.node;if(imageGeometry.getIndexTexture()){shape._webgl.imageGeometry=1;}else{shape._webgl.imageGeometry=-1;} +imageGeometry.unsetGeoDirty();if(currContext.IG_PositionBuffer==null){currContext.IG_PositionBuffer=gl.createBuffer();} +shape._webgl.buffers[1]=currContext.IG_PositionBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,currContext.IG_PositionBuffer);var vertices=new Float32Array(shape._webgl.positions[0]);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,currContext.IG_PositionBuffer);gl.vertexAttribPointer(sp.position,imageGeometry._mesh._numPosComponents,shape._webgl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);vertices=null;this.checkError(gl);};x3dom.DrawableCollection=function(drawableCollectionConfig){this.collection=[];this.viewMatrix=drawableCollectionConfig.viewMatrix;this.projMatrix=drawableCollectionConfig.projMatrix;this.sceneMatrix=drawableCollectionConfig.sceneMatrix;this.viewarea=drawableCollectionConfig.viewArea;var scene=this.viewarea._scene;var env=scene.getEnvironment();var viewpoint=scene.getViewpoint();this.near=viewpoint.getNear();this.pixelHeightAtDistOne=viewpoint.getImgPlaneHeightAtDistOne()/this.viewarea._height;this.context=drawableCollectionConfig.context;this.gl=drawableCollectionConfig.gl;this.viewFrustum=this.viewarea.getViewfrustum(this.sceneMatrix);this.worldVol=new x3dom.fields.BoxVolume();this.frustumCulling=drawableCollectionConfig.frustumCulling&&(this.viewFrustum!=null);this.smallFeatureThreshold=drawableCollectionConfig.smallFeatureThreshold;this.sortOpaque=(this.smallFeatureThreshold>0&&env._lowPriorityThreshold<1);this.sortTrans=drawableCollectionConfig.sortTrans;this.prioLevels=10;this.maxTreshold=100;this.sortBySortKey=false;this.sortByPriority=false;this.numberOfNodes=0;this.length=0;};x3dom.DrawableCollection.prototype.cull=function(transform,graphState,singlePath,planeMask){var node=graphState.boundedNode;if(!node||!node._vf.render){return 0;} +var volume=node.getVolume();var MASK_SET=63;if(this.frustumCulling&&graphState.needCulling){var wvol;if(singlePath&&!graphState.worldVolume.isValid()){graphState.worldVolume.transformFrom(transform,volume);wvol=graphState.worldVolume;} +else if(planeMask<MASK_SET){this.worldVol.transformFrom(transform,volume);wvol=this.worldVol;} +if(planeMask<MASK_SET) +planeMask=this.viewFrustum.intersect(wvol,planeMask);if(planeMask<=0){return-1;}} +else{planeMask=MASK_SET;} +graphState.coverage=-1;if(this.smallFeatureThreshold>0||node.forceUpdateCoverage()){var modelViewMat=this.viewMatrix.mult(transform);graphState.center=modelViewMat.multMatrixPnt(volume.getCenter());var rVec=modelViewMat.multMatrixVec(volume.getRadialVec());var r=rVec.length();var dist=Math.max(-graphState.center.z-r,this.near);var projPixelLength=dist*this.pixelHeightAtDistOne;graphState.coverage=(r*2.0)/projPixelLength;if(this.smallFeatureThreshold>0&&graphState.coverage<this.smallFeatureThreshold&&graphState.needCulling){return 0;}} +this.numberOfNodes++;return planeMask;};x3dom.DrawableCollection.prototype.addShape=function(shape,transform,graphState){var drawable={};drawable.shape=shape;drawable.transform=transform;drawable.localTransform=graphState.localMatrix;drawable.localVolume=graphState.volume;drawable.worldVolume=x3dom.fields.BoxVolume.copy(graphState.worldVolume);drawable.priority=Math.max(0,graphState.coverage);drawable.shaderID=shape.getShaderProperties(this.viewarea).id;var appearance=shape._cf.appearance.node;drawable.sortType=appearance?appearance._vf.sortType.toLowerCase():"opaque";drawable.sortKey=appearance?appearance._vf.sortKey:0;if(drawable.sortType=='transparent'){if(this.smallFeatureThreshold>0){drawable.zPos=graphState.center.z;} +else{var center=transform.multMatrixPnt(shape.getCenter());center=this.viewMatrix.multMatrixPnt(center);drawable.zPos=center.z;}} +if(!this.sortBySortKey&&drawable.sortKey!=0){this.sortBySortKey=true;} +if(this.collection[drawable.sortType]===undefined){this.collection[drawable.sortType]=[];} +this.collection[drawable.sortType].push(drawable);this.length++;if(this.context&&this.gl){this.context.setupShape(this.gl,drawable,this.viewarea);}};x3dom.DrawableCollection.prototype.addDrawable=function(drawable){drawable.shaderID=drawable.shape.getShaderProperties(this.viewarea).id;var appearance=drawable.shape._cf.appearance.node;drawable.sortType=appearance?appearance._vf.sortType.toLowerCase():"opaque";drawable.sortKey=appearance?appearance._vf.sortKey:0;if(drawable.sortType=='transparent'){var center=drawable.transform.multMatrixPnt(drawable.shape.getCenter());center=this.viewMatrix.multMatrixPnt(center);drawable.zPos=center.z;} +if(!this.sortBySortKey&&drawable.sortKey!=0){this.sortBySortKey=true;} +if(this.collection[drawable.sortType]===undefined){this.collection[drawable.sortType]=[];} +this.collection[drawable.sortType].push(drawable);this.length++;if(this.context&&this.gl){this.context.setupShape(this.gl,drawable,this.viewarea);}};x3dom.DrawableCollection.prototype.calculatePriority=function(graphState){var priority=Math.max(0,graphState.coverage);var pl=this.prioLevels-1;priority=Math.min(Math.round(priority/(this.maxTreshold/pl)),pl);return priority;};x3dom.DrawableCollection.prototype.concat=function(){var opaque=(this.collection['opaque']!==undefined)?this.collection['opaque']:[];var transparent=(this.collection['transparent']!==undefined)?this.collection['transparent']:[];this.collection=opaque.concat(transparent);};x3dom.DrawableCollection.prototype.get=function(idx){return this.collection[idx];};x3dom.DrawableCollection.prototype.sort=function(){var opaque=[];var transparent=[];var that=this;if(this.collection['opaque']!==undefined){if(this.sortOpaque){this.collection['opaque'].sort(function(a,b){if(a.sortKey==b.sortKey||!that.sortBySortKey){return b.priority-a.priority;} +return a.sortKey-b.sortKey;});} +opaque=this.collection['opaque'];} +if(this.collection['transparent']!==undefined){if(this.sortTrans){this.collection['transparent'].sort(function(a,b){if(a.sortKey==b.sortKey||!that.sortBySortKey){if(a.priority==b.priority||!that.sortByPriority){return a.zPos-b.zPos;} +return b.priority-a.priority;} +return a.sortKey-b.sortKey;});} +transparent=this.collection['transparent'];} +this.collection=opaque.concat(transparent);};x3dom.DrawableCollection.prototype.forEach=function(fnc,maxPriority){maxPriority=(maxPriority!==undefined)?Math.min(maxPriority,this.prioLevels):this.prioLevels;var sortKey,priority,shaderID,drawable;for(sortKey=0;sortKey<this.collection['opaque'].length;++sortKey) +{if(this.collection['opaque'][sortKey]!==undefined) +{for(priority=this.collection['opaque'][sortKey].length;priority>0;--priority) +{if(this.collection['opaque'][sortKey][priority]!==undefined) +{for(shaderID in this.collection['opaque'][sortKey][priority]) +{for(drawable=0;drawable<this.collection['opaque'][sortKey][priority][shaderID].length;++drawable) +{fnc(this.collection['opaque'][sortKey][priority][shaderID][drawable]);}}}}}} +for(sortKey=0;sortKey<this.collection['transparent'].length;++sortKey) +{if(this.collection['transparent'][sortKey]!==undefined) +{for(priority=this.collection['transparent'][sortKey].length;priority>0;--priority) +{if(this.collection['transparent'][sortKey][priority]!==undefined) +{for(var shaderId in this.collection['transparent'][sortKey][priority]) +{this.collection['transparent'][sortKey][priority][shaderId].sort(function(a,b){return a.zPos-b.zPos});for(drawable=0;drawable<this.collection['transparent'][sortKey][priority][shaderId].length;++drawable) +{fnc(this.collection['transparent'][sortKey][priority][shaderId][drawable]);}}}}}}};x3dom.Moveable=function(x3domElem,boundedObj,callback,gridSize,mode){this._x3domRoot=x3domElem;this._runtime=x3domElem.runtime;this._callback=callback;this._gridSize=gridSize?gridSize:0;this._moveable=boundedObj;this._drag=false;this._w=0;this._h=0;this._uPlane=null;this._vPlane=null;this._pPlane=null;this._isect=null;this._translationOffset=null;this._rotationOffset=null;this._scaleOffset=null;this._lastX=0;this._lastY=0;this._buttonState=0;this._mode=(mode&&mode.length)?mode.toLowerCase():"translation";this._firstRay=null;this._matrixTrafo=null;this._navType="examine";this.attachHandlers();};x3dom.Moveable.prototype.setGridSize=function(gridSize){this._gridSize=gridSize;};x3dom.Moveable.prototype.setMode=function(mode){this._mode=mode.toLowerCase();};x3dom.Moveable.prototype.attachHandlers=function(){this._moveable._iMove=this;if(!this._x3domRoot._iMove) +this._x3domRoot._iMove=[];this._x3domRoot._iMove.push(this);this._moveable.addEventListener('mousedown',this.start,false);this._moveable.addEventListener('mouseover',this.over,false);this._moveable.addEventListener('mouseout',this.out,false);if(this._x3domRoot._iMove.length==1){this._x3domRoot.addEventListener('mouseup',this.stop,false);this._x3domRoot.addEventListener('mouseout',this.stop,false);this._x3domRoot.addEventListener('mousemove',this.move,true);if(!this._runtime.canvas.disableTouch){this._x3domRoot.addEventListener('MozTouchDown',this.touchStartHandlerMoz,false);this._x3domRoot.addEventListener('MozTouchMove',this.touchMoveHandlerMoz,true);this._x3domRoot.addEventListener('MozTouchUp',this.touchEndHandlerMoz,false);this._x3domRoot.addEventListener('touchstart',this.touchStartHandler,false);this._x3domRoot.addEventListener('touchmove',this.touchMoveHandler,true);this._x3domRoot.addEventListener('touchend',this.touchEndHandler,false);}}};x3dom.Moveable.prototype.detachHandlers=function(){var iMove=this._x3domRoot._iMove;if(iMove){for(var i=0,n=iMove.length;i<n;i++){if(iMove[i]==this){iMove.splice(i,1);break;}}} +this._moveable.removeEventListener('mousedown',this.start,false);this._moveable.removeEventListener('mouseover',this.over,false);this._moveable.removeEventListener('mouseout',this.out,false);if(iMove.length==0){this._x3domRoot.removeEventListener('mouseup',this.stop,false);this._x3domRoot.removeEventListener('mouseout',this.stop,false);this._x3domRoot.removeEventListener('mousemove',this.move,true);if(!this._runtime.canvas.disableTouch){this._x3domRoot.removeEventListener('MozTouchDown',this.touchStartHandlerMoz,false);this._x3domRoot.removeEventListener('MozTouchMove',this.touchMoveHandlerMoz,true);this._x3domRoot.removeEventListener('MozTouchUp',this.touchEndHandlerMoz,false);this._x3domRoot.removeEventListener('touchstart',this.touchStartHandler,false);this._x3domRoot.removeEventListener('touchmove',this.touchMoveHandler,true);this._x3domRoot.removeEventListener('touchend',this.touchEndHandler,false);}} +if(this._moveable._iMove) +delete this._moveable._iMove;};x3dom.Moveable.prototype.calcViewPlane=function(origin){this._w=this._runtime.getWidth();this._h=this._runtime.getHeight();var ray=this._runtime.getViewingRay(0,this._h-1);var r=ray.pos.add(ray.dir);ray=this._runtime.getViewingRay(this._w-1,this._h-1);var s=ray.pos.add(ray.dir);ray=this._runtime.getViewingRay(0,0);var t=ray.pos.add(ray.dir);this._uPlane=s.subtract(r).normalize();this._vPlane=t.subtract(r).normalize();if(arguments.length===0) +this._pPlane=r;else +this._pPlane=x3dom.fields.SFVec3f.copy(origin);};x3dom.Moveable.prototype.det=function(mat){return mat[0][0]*mat[1][1]*mat[2][2]+mat[0][1]*mat[1][2]*mat[2][0]+ +mat[0][2]*mat[2][1]*mat[1][0]-mat[2][0]*mat[1][1]*mat[0][2]- +mat[0][0]*mat[2][1]*mat[1][2]-mat[1][0]*mat[0][1]*mat[2][2];};x3dom.Moveable.prototype.translateXY=function(l){var track=null;var z=[],n=[];for(var i=0;i<3;i++){z[i]=[];n[i]=[];z[i][0]=this._uPlane.at(i);n[i][0]=z[i][0];z[i][1]=this._vPlane.at(i);n[i][1]=z[i][1];z[i][2]=(l.pos.subtract(this._pPlane)).at(i);n[i][2]=-l.dir.at(i);} +var s=this.det(n);if(s!==0){var t=this.det(z)/s;track=l.pos.addScaled(l.dir,t);} +if(track){if(this._isect){track=track.subtract(this._isect);} +track=track.add(this._translationOffset);} +return track;};x3dom.Moveable.prototype.translateZ=function(l,currY){var vol=this._runtime.getSceneBBox();var sign=(currY<this._lastY)?1:-1;var fact=sign*(vol.max.subtract(vol.min)).length()/100;this._translationOffset=this._translationOffset.addScaled(l.dir,fact);return this._translationOffset;};x3dom.Moveable.prototype.rotate=function(posX,posY){var twoPi=2*Math.PI;var alpha=((posY-this._lastY)*twoPi)/this._w;var beta=((posX-this._lastX)*twoPi)/this._h;var q=x3dom.fields.Quaternion.axisAngle(this._uPlane,alpha);var h=q.toMatrix();this._rotationOffset=h.mult(this._rotationOffset);q=x3dom.fields.Quaternion.axisAngle(this._vPlane,beta);h=q.toMatrix();this._rotationOffset=h.mult(this._rotationOffset);var mat=this._rotationOffset.mult(x3dom.fields.SFMatrix4f.scale(this._scaleOffset));var rot=new x3dom.fields.Quaternion(0,0,1,0);rot.setValue(mat);return rot;};x3dom.Moveable.prototype.over=function(event){var that=this._iMove;that._runtime.getCanvas().style.cursor="crosshair";};x3dom.Moveable.prototype.out=function(event){var that=this._iMove;if(!that._drag) +that._runtime.getCanvas().style.cursor="pointer";};x3dom.Moveable.prototype.start=function(event){var that=this._iMove;switch(that._mode){case"translation":that._buttonState=(event.button==4)?1:(event.button&3);break;case"rotation":that._buttonState=4;break;case"all":default:that._buttonState=event.button;break;} +if(!that._drag&&that._buttonState){that._lastX=event.layerX;that._lastY=event.layerY;that._drag=true;that._navType=that._runtime.navigationType();that._runtime.noNav();that._isect=new x3dom.fields.SFVec3f(event.worldX,event.worldY,event.worldZ);that.calcViewPlane(that._isect);that._firstRay=that._runtime.getViewingRay(event.layerX,event.layerY);var mTrans=that._moveable.getAttribute("translation");that._matrixTrafo=null;if(mTrans){that._translationOffset=x3dom.fields.SFVec3f.parse(mTrans);var mRot=that._moveable.getAttribute("rotation");mRot=mRot?x3dom.fields.Quaternion.parseAxisAngle(mRot):new x3dom.fields.Quaternion(0,0,1,0);that._rotationOffset=mRot.toMatrix();var mScal=that._moveable.getAttribute("scale");that._scaleOffset=mScal?x3dom.fields.SFVec3f.parse(mScal):new x3dom.fields.SFVec3f(1,1,1);} +else{mTrans=that._moveable.getAttribute("matrix");if(mTrans){that._matrixTrafo=x3dom.fields.SFMatrix4f.parse(mTrans).transpose();var translation=new x3dom.fields.SFVec3f(0,0,0),scaleFactor=new x3dom.fields.SFVec3f(1,1,1);var rotation=new x3dom.fields.Quaternion(0,0,1,0),scaleOrientation=new x3dom.fields.Quaternion(0,0,1,0);that._matrixTrafo.getTransform(translation,rotation,scaleFactor,scaleOrientation);that._translationOffset=translation;that._rotationOffset=rotation.toMatrix();that._scaleOffset=scaleFactor;} +else{that._translationOffset=new x3dom.fields.SFVec3f(0,0,0);that._rotationOffset=new x3dom.fields.SFMatrix4f();that._scaleOffset=new x3dom.fields.SFVec3f(1,1,1);}} +that._runtime.getCanvas().style.cursor="crosshair";}};x3dom.Moveable.prototype.move=function(event){for(var i=0,n=this._iMove.length;i<n;i++){var that=this._iMove[i];if(that._drag){var pos=that._runtime.mousePosition(event);var ray=that._runtime.getViewingRay(pos[0],pos[1]);var track=null;if(that._buttonState==2) +track=that.translateZ(that._firstRay,pos[1]);else if(that._buttonState==1) +track=that.translateXY(ray);else +track=that.rotate(pos[0],pos[1]);if(track){if(that._gridSize>0&&that._buttonState!=4){var x=that._gridSize*Math.round(track.x/that._gridSize);var y=that._gridSize*Math.round(track.y/that._gridSize);var z=that._gridSize*Math.round(track.z/that._gridSize);track=new x3dom.fields.SFVec3f(x,y,z);} +if(!that._matrixTrafo){if(that._buttonState==4){that._moveable.setAttribute("rotation",track.toAxisAngle().toString());} +else{that._moveable.setAttribute("translation",track.toString());}} +else{if(that._buttonState==4){that._matrixTrafo.setRotate(track);} +else{that._matrixTrafo.setTranslate(track);} +that._moveable.setAttribute("matrix",that._matrixTrafo.toGL().toString());} +if(that._callback){that._callback(that._moveable,track);}} +that._lastX=pos[0];that._lastY=pos[1];}}};x3dom.Moveable.prototype.stop=function(event){for(var i=0,n=this._iMove.length;i<n;i++){var that=this._iMove[i];if(that._drag){that._lastX=event.layerX;that._lastY=event.layerY;that._isect=null;that._drag=false;var navi=that._runtime.canvas.doc._scene.getNavigationInfo();navi.setType(that._navType);that._runtime.getCanvas().style.cursor="pointer";}}};x3dom.Moveable.prototype.touchStartHandler=function(evt){evt.preventDefault();};x3dom.Moveable.prototype.touchStartHandlerMoz=function(evt){evt.preventDefault();};x3dom.Moveable.prototype.touchMoveHandler=function(evt){evt.preventDefault();};x3dom.Moveable.prototype.touchMoveHandlerMoz=function(evt){evt.preventDefault();};x3dom.Moveable.prototype.touchEndHandler=function(evt){if(this._iMove.length){var that=this._iMove[0];that.stop.apply(that._x3domRoot,[evt]);} +evt.preventDefault();};x3dom.Moveable.prototype.touchEndHandlerMoz=function(evt){if(this._iMove.length){var that=this._iMove[0];that.stop.apply(that._x3domRoot,[evt]);} +evt.preventDefault();};x3dom.X3DCanvas=function(x3dElem,canvasIdx) +{var that=this;this._canvasIdx=canvasIdx;this.isFlashReady=false;this.x3dElem=x3dElem;this._current_dim=[0,0];this.fps_t0=new Date().getTime();this.lastTimeFPSWasTaken=0;this.framesSinceLastTime=0;this.doc=null;x3dom.caps.DOMNodeInsertedEvent_perSubtree=(navigator.userAgent.indexOf('MSIE')!=-1||navigator.userAgent.indexOf('Trident'))?true:false;x3dElem.__setAttribute=x3dElem.setAttribute;x3dElem.setAttribute=function(attrName,newVal) +{this.__setAttribute(attrName,newVal);switch(attrName){case"width":that.canvas.setAttribute("width",newVal);if(that.doc&&that.doc._viewarea){that.doc._viewarea._width=parseInt(that.canvas.getAttribute("width"),0);that.doc.needRender=true;} +break;case"height":that.canvas.setAttribute("height",newVal);if(that.doc&&that.doc._viewarea){that.doc._viewarea._height=parseInt(that.canvas.getAttribute("height"),0);that.doc.needRender=true;} +break;default:break;}};x3dom.caps.MOBILE=(navigator.appVersion.indexOf("Mobile")>-1);this.backend=this.x3dElem.getAttribute('backend');if(this.backend) +this.backend=this.backend.toLowerCase();else +this.backend='none';if(this.backend=='flash'){this.backend='flash';this.canvas=this._createFlashObject(x3dElem);if(this.canvas!=null){this.canvas.parent=this;this.gl=this._initFlashContext(this.canvas,this.flash_renderType);}else{this._createInitFailedDiv(x3dElem);return;}}else{this.canvas=this._createHTMLCanvas(x3dElem);this.canvas.parent=this;this.gl=this._initContext(this.canvas,(this.backend.search("desktop")>=0),(this.backend.search("mobile")>=0),(this.backend.search("flashie")>=0),(this.backend.search("webgl2")>=0));this.backend='webgl';if(this.gl==null) +{x3dom.debug.logInfo("Fallback to Flash Renderer");this.backend='flash';this.canvas=this._createFlashObject(x3dElem);if(this.canvas!=null){this.canvas.parent=this;this.gl=this._initFlashContext(this.canvas,this.flash_renderType);}else{this._createInitFailedDiv(x3dElem);return;}}} +x3dom.caps.BACKEND=this.backend;var runtimeEnabled=x3dElem.getAttribute("runtimeEnabled");if(runtimeEnabled!==null){this.hasRuntime=(runtimeEnabled.toLowerCase()=="true");}else{this.hasRuntime=x3dElem.hasRuntime;} +if(this.gl===null){this.hasRuntime=false;} +if(this.backend!="flash"){this.showStat=x3dElem.getAttribute("showStat");this.stateViewer=new x3dom.States(x3dElem);if(this.showStat!==null&&this.showStat=="true"){this.stateViewer.display(true);} +this.x3dElem.appendChild(this.stateViewer.viewer);} +this.showProgress=x3dElem.getAttribute("showProgress");this.progressDiv=this._createProgressDiv();this.progressDiv.style.display=(this.showProgress!==null&&this.showProgress=="true")?"inline":"none";this.x3dElem.appendChild(this.progressDiv);this.showTouchpoints=x3dElem.getAttribute("showTouchpoints");this.showTouchpoints=this.showTouchpoints?!(this.showTouchpoints.toLowerCase()=="false"):true;this.disableTouch=x3dElem.getAttribute("disableTouch");this.disableTouch=this.disableTouch?(this.disableTouch.toLowerCase()=="true"):false;if(this.canvas!==null&&this.gl!==null&&this.hasRuntime&&this.backend!=="flash"){this.canvas.mouse_dragging=false;this.canvas.mouse_button=0;this.canvas.mouse_drag_x=0;this.canvas.mouse_drag_y=0;this.canvas.isMulti=false;this.canvas.oncontextmenu=function(evt){evt.preventDefault();evt.stopPropagation();return false;};this.canvas.addEventListener("webglcontextlost",function(event){x3dom.debug.logError("WebGL context lost");event.preventDefault();},false);this.canvas.addEventListener("webglcontextrestored",function(event){x3dom.debug.logError("recover WebGL state and resources on context lost NYI");event.preventDefault();},false);this.canvas.addEventListener('mousedown',function(evt){if(!this.isMulti){this.focus();this.classList.add('x3dom-canvas-mousedown');switch(evt.button){case 0:this.mouse_button=1;break;case 1:this.mouse_button=4;break;case 2:this.mouse_button=2;break;default:this.mouse_button=0;break;} +if(evt.shiftKey){this.mouse_button=1;} +if(evt.ctrlKey){this.mouse_button=4;} +if(evt.altKey){this.mouse_button=2;} +var pos=this.parent.mousePosition(evt);this.mouse_drag_x=pos.x;this.mouse_drag_y=pos.y;this.mouse_dragging=true;this.parent.doc.onMousePress(that.gl,this.mouse_drag_x,this.mouse_drag_y,this.mouse_button);this.parent.doc.needRender=true;}},false);this.canvas.addEventListener('mouseup',function(evt){if(!this.isMulti){var prev_mouse_button=this.mouse_button;this.classList.remove('x3dom-canvas-mousedown');this.mouse_button=0;this.mouse_dragging=false;this.parent.doc.onMouseRelease(that.gl,this.mouse_drag_x,this.mouse_drag_y,this.mouse_button,prev_mouse_button);this.parent.doc.needRender=true;}},false);this.canvas.addEventListener('mouseover',function(evt){if(!this.isMulti){this.mouse_button=0;this.mouse_dragging=false;this.parent.doc.onMouseOver(that.gl,this.mouse_drag_x,this.mouse_drag_y,this.mouse_button);this.parent.doc.needRender=true;}},false);this.canvas.addEventListener('mouseout',function(evt){if(!this.isMulti){this.mouse_button=0;this.mouse_dragging=false;this.parent.doc.onMouseOut(that.gl,this.mouse_drag_x,this.mouse_drag_y,this.mouse_button);this.parent.doc.needRender=true;}},false);this.canvas.addEventListener('dblclick',function(evt){if(!this.isMulti){this.mouse_button=0;var pos=this.parent.mousePosition(evt);this.mouse_drag_x=pos.x;this.mouse_drag_y=pos.y;this.mouse_dragging=false;this.parent.doc.onDoubleClick(that.gl,this.mouse_drag_x,this.mouse_drag_y);this.parent.doc.needRender=true;}},false);this.canvas.addEventListener('mousemove',function(evt){if(!this.isMulti){if(evt.shiftKey){this.mouse_button=1;} +if(evt.ctrlKey){this.mouse_button=4;} +if(evt.altKey){this.mouse_button=2;} +var pos=this.parent.mousePosition(evt);this.mouse_drag_x=pos.x;this.mouse_drag_y=pos.y;if(this.mouse_dragging){this.parent.doc.onDrag(that.gl,this.mouse_drag_x,this.mouse_drag_y,this.mouse_button);} +else{this.parent.doc.onMove(that.gl,this.mouse_drag_x,this.mouse_drag_y,this.mouse_button);} +this.parent.doc.needRender=true;evt.preventDefault();evt.stopPropagation();}},false);this.canvas.addEventListener('DOMMouseScroll',function(evt){if(!this.isMulti){this.focus();this.mouse_drag_y+=2*evt.detail;this.parent.doc.onDrag(that.gl,this.mouse_drag_x,this.mouse_drag_y,2);this.parent.doc.needRender=true;evt.preventDefault();evt.stopPropagation();}},false);this.canvas.addEventListener('mousewheel',function(evt){if(!this.isMulti){this.focus();this.mouse_drag_y-=0.1*evt.wheelDelta;this.parent.doc.onDrag(that.gl,this.mouse_drag_x,this.mouse_drag_y,2);this.parent.doc.needRender=true;evt.preventDefault();evt.stopPropagation();}},false);this.canvas.addEventListener('keypress',function(evt){var keysEnabled=this.parent.x3dElem.getAttribute("keysEnabled");if(!keysEnabled||keysEnabled.toLowerCase()=="true"){this.parent.doc.onKeyPress(evt.charCode);} +this.parent.doc.needRender=true;},true);this.canvas.addEventListener('keyup',function(evt){var keysEnabled=this.parent.x3dElem.getAttribute("keysEnabled");if(!keysEnabled||keysEnabled.toLowerCase()=="true"){this.parent.doc.onKeyUp(evt.keyCode);} +this.parent.doc.needRender=true;},true);this.canvas.addEventListener('keydown',function(evt){var keysEnabled=this.parent.x3dElem.getAttribute("keysEnabled");if(!keysEnabled||keysEnabled.toLowerCase()=="true"){this.parent.doc.onKeyDown(evt.keyCode);} +this.parent.doc.needRender=true;},true);var touches={numTouches:0,firstTouchTime:new Date().getTime(),firstTouchPoint:new x3dom.fields.SFVec2f(0,0),lastDrag:new x3dom.fields.SFVec2f(),lastMiddle:new x3dom.fields.SFVec2f(),lastDistance:new x3dom.fields.SFVec2f(),lastSquareDistance:0,lastAngle:0,lastLayer:[],examineNavType:true,calcAngle:function(vector) +{var rotation=vector.normalize().dot(new x3dom.fields.SFVec2f(1,0));rotation=Math.acos(rotation);if(vector.y<0) +rotation=Math.PI+(Math.PI-rotation);return rotation;},disableTouch:this.disableTouch,visMarker:this.showTouchpoints,visMarkerBag:[],visualizeTouches:function(evt) +{if(!this.visMarker) +return;var touchBag=[];var marker=null;for(var i=0;i<evt.touches.length;i++){var id=evt.touches[i].identifier||evt.touches[i].streamId;if(!id)id=0;var index=this.visMarkerBag.indexOf(id);if(index>=0){marker=document.getElementById("visMarker"+id);marker.style.left=(evt.touches[i].pageX)+"px";marker.style.top=(evt.touches[i].pageY)+"px";} +else{marker=document.createElement("div");marker.appendChild(document.createTextNode("#"+id));marker.id="visMarker"+id;marker.className="x3dom-touch-marker";document.body.appendChild(marker);index=this.visMarkerBag.length;this.visMarkerBag[index]=id;} +touchBag.push(id);} +for(var j=this.visMarkerBag.length-1;j>=0;j--){var oldId=this.visMarkerBag[j];if(touchBag.indexOf(oldId)<0){this.visMarkerBag.splice(j,1);marker=document.getElementById("visMarker"+oldId);document.body.removeChild(marker);}}}};var mozilla_ids=[];var mozilla_touches={touches:[],preventDefault:function(){}};var touchStartHandler=function(evt,doc) +{this.isMulti=true;evt.preventDefault();touches.visualizeTouches(evt);this.focus();if(doc==null) +doc=this.parent.doc;var navi=doc._scene.getNavigationInfo();touches.examineNavType=(navi.getType()=="examine");touches.lastLayer=[];var i,pos;for(i=0;i<evt.touches.length;i++){pos=this.parent.mousePosition(evt.touches[i]);touches.lastLayer.push([evt.touches[i].identifier,new x3dom.fields.SFVec2f(pos.x,pos.y)]);} +if(touches.numTouches<1&&evt.touches.length==1){touches.numTouches=1;touches.lastDrag=new x3dom.fields.SFVec2f(evt.touches[0].screenX,evt.touches[0].screenY);} +else if(touches.numTouches<2&&evt.touches.length>=2){touches.numTouches=2;var touch0=new x3dom.fields.SFVec2f(evt.touches[0].screenX,evt.touches[0].screenY);var touch1=new x3dom.fields.SFVec2f(evt.touches[1].screenX,evt.touches[1].screenY);var distance=touch1.subtract(touch0);var middle=distance.multiply(0.5).add(touch0);var squareDistance=distance.dot(distance);touches.lastDistance=distance;touches.lastMiddle=middle;touches.lastSquareDistance=squareDistance;touches.lastAngle=touches.calcAngle(distance);} +doc._scene.updateVolume();if(touches.examineNavType){for(i=0;i<evt.touches.length;i++){pos=this.parent.mousePosition(evt.touches[i]);doc.onPick(that.gl,pos.x,pos.y);doc._viewarea.prepareEvents(pos.x,pos.y,1,"onmousedown");doc._viewarea._pickingInfo.lastClickObj=doc._viewarea._pickingInfo.pickObj;}} +else if(evt.touches.length){pos=this.parent.mousePosition(evt.touches[0]);doc.onMousePress(that.gl,pos.x,pos.y,1);} +doc.needRender=true;};var touchStartHandlerMoz=function(evt) +{this.isMulti=true;evt.preventDefault();var new_id=true;for(var i=0;i<mozilla_ids.length;++i) +if(mozilla_ids[i]==evt.streamId) +new_id=false;if(new_id==true){evt.identifier=evt.streamId;mozilla_ids.push(evt.streamId);mozilla_touches.touches.push(evt);} +touchStartHandler(mozilla_touches,this.parent.doc);};var touchMoveHandler=function(evt,doc) +{evt.preventDefault();touches.visualizeTouches(evt);if(doc==null) +doc=this.parent.doc;var pos=null;var rotMatrix=null;if(touches.examineNavType){if(evt.touches.length==1){var currentDrag=new x3dom.fields.SFVec2f(evt.touches[0].screenX,evt.touches[0].screenY);var deltaDrag=currentDrag.subtract(touches.lastDrag);touches.lastDrag=currentDrag;var mx=x3dom.fields.SFMatrix4f.rotationY(deltaDrag.x/100);var my=x3dom.fields.SFMatrix4f.rotationX(deltaDrag.y/100);rotMatrix=mx.mult(my);doc.onMoveView(that.gl,null,rotMatrix);} +else if(evt.touches.length>=2){var touch0=new x3dom.fields.SFVec2f(evt.touches[0].screenX,evt.touches[0].screenY);var touch1=new x3dom.fields.SFVec2f(evt.touches[1].screenX,evt.touches[1].screenY);var distance=touch1.subtract(touch0);var middle=distance.multiply(0.5).add(touch0);var squareDistance=distance.dot(distance);var deltaMiddle=middle.subtract(touches.lastMiddle);var deltaZoom=squareDistance-touches.lastSquareDistance;var deltaMove=new x3dom.fields.SFVec3f(deltaMiddle.x/screen.width,-deltaMiddle.y/screen.height,deltaZoom/(screen.width*screen.height*0.2));var rotation=touches.calcAngle(distance);var angleDelta=touches.lastAngle-rotation;touches.lastAngle=rotation;rotMatrix=x3dom.fields.SFMatrix4f.rotationZ(angleDelta);touches.lastMiddle=middle;touches.lastDistance=distance;touches.lastSquareDistance=squareDistance;doc.onMoveView(that.gl,deltaMove,rotMatrix);}} +else if(evt.touches.length){pos=this.parent.mousePosition(evt.touches[0]);doc.onDrag(that.gl,pos.x,pos.y,1);} +doc.needRender=true;};var touchMoveHandlerMoz=function(evt) +{evt.preventDefault();for(var i=0;i<mozilla_ids.length;++i) +if(mozilla_ids[i]==evt.streamId) +mozilla_touches.touches[i]=evt;touchMoveHandler(mozilla_touches,this.parent.doc);};var touchEndHandler=function(evt,doc) +{this.isMulti=false;evt.preventDefault();touches.visualizeTouches(evt);if(doc==null) +doc=this.parent.doc;doc._viewarea._isMoving=false;if(touches.numTouches==2&&evt.touches.length==1) +touches.lastDrag=new x3dom.fields.SFVec2f(evt.touches[0].screenX,evt.touches[0].screenY);var dblClick=false;if(evt.touches.length<2){if(touches.numTouches==1) +dblClick=true;touches.numTouches=evt.touches.length;} +if(touches.examineNavType){for(var i=0;i<touches.lastLayer.length;i++){var pos=touches.lastLayer[i][1];doc.onPick(that.gl,pos.x,pos.y);if(doc._scene._vf.pickMode.toLowerCase()!=="box"){doc._viewarea.prepareEvents(pos.x,pos.y,1,"onmouseup");doc._viewarea._pickingInfo.lastClickObj=doc._viewarea._pickingInfo.pickObj;if(doc._viewarea._pickingInfo.pickObj&&doc._viewarea._pickingInfo.pickObj===doc._viewarea._pickingInfo.lastClickObj){doc._viewarea.prepareEvents(pos.x,pos.y,1,"onclick");}} +else{var line=doc._viewarea.calcViewRay(pos.x,pos.y);var isect=doc._scene.doIntersect(line);var obj=line.hitObject;if(isect&&obj){doc._viewarea._pick.setValues(line.hitPoint);doc._viewarea.checkEvents(obj,pos.x,pos.y,1,"onclick");x3dom.debug.logInfo("Hit '"+obj._xmlNode.localName+"/ "+ +obj._DEF+"' at pos "+doc._viewarea._pick);}}} +if(dblClick){var now=new Date().getTime();var dist=touches.firstTouchPoint.subtract(touches.lastDrag).length();if(dist<18&&now-touches.firstTouchTime<180) +doc.onDoubleClick(that.gl,0,0);touches.firstTouchTime=now;touches.firstTouchPoint=touches.lastDrag;}} +else if(touches.lastLayer.length){pos=touches.lastLayer[0][1];doc.onMouseRelease(that.gl,pos.x,pos.y,0,1);} +doc.needRender=true;};var touchEndHandlerMoz=function(evt) +{this.isMulti=false;evt.preventDefault();var remove_index=-1;for(var i=0;i<mozilla_ids.length;++i) +if(mozilla_ids[i]==evt.streamId) +remove_index=i;if(remove_index!=-1) +{mozilla_ids.splice(remove_index,1);mozilla_touches.touches.splice(remove_index,1);} +touchEndHandler(mozilla_touches,this.parent.doc);};if(!this.disableTouch) +{this.canvas.addEventListener('MozTouchDown',touchStartHandlerMoz,true);this.canvas.addEventListener('MozTouchMove',touchMoveHandlerMoz,true);this.canvas.addEventListener('MozTouchUp',touchEndHandlerMoz,true);this.canvas.addEventListener('touchstart',touchStartHandler,true);this.canvas.addEventListener('touchmove',touchMoveHandler,true);this.canvas.addEventListener('touchend',touchEndHandler,true);}}};x3dom.X3DCanvas.prototype._initContext=function(canvas,forbidMobileShaders,forceMobileShaders,forceFlashForIE,tryWebGL2) +{x3dom.debug.logInfo("Initializing X3DCanvas for ["+canvas.id+"]");var gl=x3dom.gfx_webgl(canvas,forbidMobileShaders,forceMobileShaders,tryWebGL2,this.x3dElem);if(!gl) +{x3dom.debug.logError("No 3D context found...");this.x3dElem.removeChild(canvas);return null;} +else +{var webglVersion=parseFloat(x3dom.caps.VERSION.match(/\d+\.\d+/)[0]);if(webglVersion<1.0){console.log(forceFlashForIE);if(forceFlashForIE){x3dom.debug.logError("No valid 3D context found...");this.x3dElem.removeChild(canvas);return null;}else{x3dom.debug.logError("WebGL version "+x3dom.caps.VERSION+" lacks important WebGL/GLSL features needed for shadows, special vertex attribute types, etc.!");}}} +return gl;};x3dom.X3DCanvas.prototype._initFlashContext=function(canvas,renderType){x3dom.debug.logInfo("Initializing X3DObject for ["+canvas.id+"]");return x3dom.gfx_flash(canvas,renderType);};x3dom.X3DCanvas.prototype.appendParam=function(node,name,value){var param=document.createElement('param');param.setAttribute('name',name);param.setAttribute('value',value);node.appendChild(param);};x3dom.X3DCanvas.prototype._fileExists=function(url){var xhr=new XMLHttpRequest();try{xhr.open("HEAD",url,false);xhr.send(null);return(xhr.status!=404);}catch(e){return true;}};x3dom.X3DCanvas.prototype._detectFlash=function(required,max) +{var required_version=required;var max_version=max;var available_version=0;if(typeof(navigator.plugins["Shockwave Flash"])=="object") +{var description=navigator.plugins["Shockwave Flash"].description;available_version=description.substr(16,(description.indexOf(".",16)-16));} +else if(typeof(ActiveXObject)=="function"){for(var i=10;i<(max_version+1);i++){try{if(typeof(new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i))=="object"){available_version=i+1;}} +catch(error){}}} +return[available_version,required_version];};x3dom.X3DCanvas.prototype._createInitFailedDiv=function(x3dElem){var div=document.createElement('div');div.setAttribute("id","x3dom-create-init-failed");div.style.width=x3dElem.getAttribute("width");div.style.height=x3dElem.getAttribute("height");div.style.backgroundColor="#C00";div.style.color="#FFF";div.style.fontSize="20px";div.style.fontWidth="bold";div.style.padding="10px 10px 10px 10px";div.style.display="inline-block";div.style.fontFamily="Helvetica";div.style.textAlign="center";div.appendChild(document.createTextNode('Your Browser does not support X3DOM'));div.appendChild(document.createElement('br'));div.appendChild(document.createTextNode('Read more about Browser support on:'));div.appendChild(document.createElement('br'));var link=document.createElement('a');link.setAttribute('href','http://www.x3dom.org/?page_id=9');link.appendChild(document.createTextNode('X3DOM | Browser Support'));div.appendChild(link);var altImg=x3dElem.getAttribute("altImg")||null;if(altImg){var altImgObj=new Image();altImgObj.src=altImg;div.style.backgroundImage="url("+altImg+")";div.style.backgroundRepeat="no-repeat";div.style.backgroundPosition="50% 50%";} +x3dElem.appendChild(div);x3dom.debug.logError("Your Browser does not support X3DOM!");};x3dom.X3DCanvas.prototype._createFlashObject=function(x3dElem){var result=this._detectFlash(11,11);if(!result[0]||result[0]<result[1]){return null;}else{x3dom.debug.logInfo("Creating FlashObject for (X)3D element...");var id=this.x3dElem.getAttribute("id");if(id!==null){id="x3dom-"+id+"-object";}else{var index=new Date().getTime();id="x3dom-"+index+"-object";} +var swf_path=this.x3dElem.getAttribute("swfpath");if(swf_path===null){swf_path="x3dom.swf";} +if(!this._fileExists(swf_path)){var version;if(x3dom.versionInfo===undefined||x3dom.versionInfo.version.indexOf('dev')!=-1) +{version="dev";} +else{var modification=test.substr(test.length-1);if(modification>0){version=x3dom.versionInfo.version;}else{version=x3dom.versionInfo.version.substr(3);}} +swf_path="http://www.x3dom.org/download/"+version+"/x3dom.swf";x3dom.debug.logWarning("Can't find local x3dom.swf ("+version+"). X3DOM now using the online version from x3dom.org."+"The online version needs a <a href='http://examples.x3dom.org/crossdomain.xml'>crossdomain.xml</a> "+"file in the root directory of your domain to access textures");} +var width=this.x3dElem.getAttribute("width");var idx=-1;if(width==null){width=550;}else{idx=width.indexOf("px");if(idx!=-1){width=width.substr(0,idx);}} +var height=this.x3dElem.getAttribute("height");if(height==null){height=400;}else{idx=height.indexOf("px");if(idx!=-1){height=height.substr(0,idx);}} +var renderType=this.x3dElem.getAttribute("flashrenderer");if(renderType==null){this.flash_renderType="forward";}else{this.flash_renderType="deferred";} +var obj=document.createElement('object');obj.setAttribute('width','100%');obj.setAttribute('height','100%');obj.setAttribute('id',id);if(!document.doctype||document.doctype&&document.doctype.publicId.search(/DTD XHTML/i)!=-1){x3dom.debug.logWarning("Flash backend doesn't like XHTML, please use HTML5!");obj.setAttribute('style','width:'+width+'px; height:'+height+'px;');}else{if(x3dElem.getAttribute('style')==null){x3dElem.setAttribute('style','width:'+width+'px; height:'+height+'px;');}} +this.appendParam(obj,'menu','false');this.appendParam(obj,'quality','high');this.appendParam(obj,'wmode','direct');this.appendParam(obj,'allowScriptAccess','always');this.appendParam(obj,'flashvars','canvasIdx='+this._canvasIdx+'&renderType='+this.flash_renderType);this.appendParam(obj,'movie',swf_path);if(navigator.appName=="Microsoft Internet Explorer"){x3dElem.appendChild(obj);obj.setAttribute('classid','clsid:d27cdb6e-ae6d-11cf-96b8-444553540000');}else{obj.setAttribute('type','application/x-shockwave-flash');obj.setAttribute('data',swf_path);x3dElem.appendChild(obj);} +return obj;}};x3dom.X3DCanvas.prototype._createHTMLCanvas=function(x3dElem) +{x3dom.debug.logInfo("Creating canvas for (X)3D element...");var canvas=document.createElement('canvas');canvas.setAttribute("class","x3dom-canvas");var userStyle=x3dElem.getAttribute("style");if(userStyle){x3dom.debug.logInfo("Inline X3D styles detected");} +var evtArr=["onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onclick","ondblclick","onkeydown","onkeypress","onkeyup","ontouchstart","ontouchmove","ontouchend","ontouchcancel","ontouchleave","ontouchenter","onMozTouchDown","onMozTouchMove","onMozTouchUp","ondragstart","ondrop","ondragover"];for(var i=0;i<evtArr.length;i++) +{var evtName=evtArr[i];var userEvt=x3dElem.getAttribute(evtName);if(userEvt){x3dom.debug.logInfo(evtName+", "+userEvt);canvas.setAttribute(evtName,userEvt);x3dElem.removeAttribute(evtName);}} +var userProp=x3dElem.getAttribute("draggable");if(userProp){x3dom.debug.logInfo("draggable="+userProp);canvas.setAttribute("draggable",userProp);} +if(!x3dElem.__addEventListener&&!x3dElem.__removeEventListener) +{x3dElem.__addEventListener=x3dElem.addEventListener;x3dElem.__removeEventListener=x3dElem.removeEventListener;x3dElem.addEventListener=function(type,func,phase){var j,found=false;for(j=0;j<evtArr.length&&!found;j++){if(evtArr[j]===type){found=true;}} +if(found){x3dom.debug.logInfo('addEventListener for div.on'+type);that.canvas.addEventListener(type,func,phase);}else{x3dom.debug.logInfo('addEventListener for X3D.on'+type);this.__addEventListener(type,func,phase);}};x3dElem.removeEventListener=function(type,func,phase){var j,found=false;for(j=0;j<evtArr.length&&!found;j++){if(evtArr[j]===type){found=true;}} +if(found){x3dom.debug.logInfo('removeEventListener for div.on'+type);that.canvas.removeEventListener(type,func,phase);}else{x3dom.debug.logInfo('removeEventListener for X3D.on'+type);this.__removeEventListener(type,func,phase);}};} +x3dElem.appendChild(canvas);var id=x3dElem.getAttribute("id");if(id!==null){canvas.id="x3dom-"+id+"-canvas";}else{var index=new Date().getTime();canvas.id="x3dom-"+index+"-canvas";} +var w,h;if((w=x3dElem.getAttribute("width"))!==null){if(w.indexOf("%")>=0){x3dom.debug.logWarning("The width attribute is to be specified in pixels not in percent.");} +canvas.style.width=w;canvas.setAttribute("width",w);} +if((h=x3dElem.getAttribute("height"))!==null){if(h.indexOf("%")>=0){x3dom.debug.logWarning("The height attribute is to be specified in pixels not in percent.");} +canvas.style.height=h;canvas.setAttribute("height",h);} +canvas.setAttribute("tabindex","0");return canvas;};x3dom.X3DCanvas.prototype._watchForResize=function(){var new_dim=[parseInt(x3dom.getStyle(this.canvas,"width")),parseInt(x3dom.getStyle(this.canvas,"height"))];if((this._current_dim[0]!=new_dim[0])||(this._current_dim[1]!=new_dim[1])){this._current_dim=new_dim;this.x3dElem.setAttribute("width",new_dim[0]+"px");this.x3dElem.setAttribute("height",new_dim[1]+"px");}};x3dom.X3DCanvas.prototype._createProgressDiv=function(){var progressDiv=document.createElement('div');progressDiv.setAttribute("class","x3dom-progress");var _text=document.createElement('strong');_text.appendChild(document.createTextNode('Loading...'));progressDiv.appendChild(_text);var _inner=document.createElement('span');_inner.setAttribute('style',"width: 25%;");_inner.appendChild(document.createTextNode(' '));progressDiv.appendChild(_inner);progressDiv.oncontextmenu=progressDiv.onmousedown=function(evt){evt.preventDefault();evt.stopPropagation();return false;};return progressDiv;};x3dom.X3DCanvas.prototype.mousePosition=function(evt) +{var x=0,y=0;if("getBoundingClientRect"in document.documentElement){var elem=evt.target.offsetParent;var box=elem.getBoundingClientRect();var scrollLeft=window.pageXOffset||document.documentElement.scrollLeft;var scrollTop=window.pageYOffset||document.documentElement.scrollTop;var compStyle=document.defaultView.getComputedStyle(elem,null);var paddingLeft=parseFloat(compStyle.getPropertyValue('padding-left'));var borderLeftWidth=parseFloat(compStyle.getPropertyValue('border-left-width'));var paddingTop=parseFloat(compStyle.getPropertyValue('padding-top'));var borderTopWidth=parseFloat(compStyle.getPropertyValue('border-top-width'));x=Math.round(evt.pageX-(box.left+paddingLeft+borderLeftWidth+scrollLeft));y=Math.round(evt.pageY-(box.top+paddingTop+borderTopWidth+scrollTop));} +else{x3dom.debug.logError('NO getBoundingClientRect');} +return new x3dom.fields.SFVec2f(x,y);};x3dom.X3DCanvas.prototype.tick=function() +{var runtime=this.x3dElem.runtime;var d=new Date().getTime();var diff=d-this.lastTimeFPSWasTaken;var fps=1000.0/(d-this.fps_t0);this.fps_t0=d;this.doc.advanceTime(d/1000.0);var animD=new Date().getTime()-d;if(this.doc.needRender){if(diff>=1000){runtime.fps=this.framesSinceLastTime/(diff/1000.0);runtime.addMeasurement('FPS',runtime.fps);this.framesSinceLastTime=0;this.lastTimeFPSWasTaken=d;} +this.framesSinceLastTime++;runtime.addMeasurement('ANIM',animD);if(runtime.isReady==false){runtime.ready();runtime.isReady=true;} +runtime.enterFrame();if(this.backend=='flash'){if(this.isFlashReady){this.canvas.setFPS({fps:fps});this.doc.needRender=false;this.doc.render(this.gl);}} +else{this.doc.needRender=false;this.doc.render(this.gl);if(!this.doc._scene._vf.doPickPass) +runtime.removeMeasurement('PICKING');} +runtime.exitFrame();} +if(this.progressDiv){if(this.doc.downloadCount>0){runtime.addInfo("#LOADS:",this.doc.downloadCount);}else{runtime.removeInfo("#LOADS:");} +if(this.doc.properties.getProperty("showProgress")!=='false'){if(this.progressDiv){this.progressDiv.childNodes[0].textContent='Loading: '+(+this.doc.downloadCount);if(this.doc.downloadCount>0){this.progressDiv.style.display='inline';}else{this.progressDiv.style.display='none';}}}else{this.progressDiv.style.display='none';}}};x3dom.X3DCanvas.prototype.load=function(uri,sceneElemPos,settings){this.doc=new x3dom.X3DDocument(this.canvas,this.gl,settings);var x3dCanvas=this;this.doc.onload=function(){if(x3dCanvas.hasRuntime){(function mainloop(){if(x3dCanvas.doc&&x3dCanvas.x3dElem.runtime){x3dCanvas._watchForResize();x3dCanvas.tick();window.requestAnimFrame(mainloop,x3dCanvas);}})();}else{x3dCanvas.tick();}};this.x3dElem.render=function(){if(x3dCanvas.hasRuntime){x3dCanvas.doc.needRender=true;}else{x3dCanvas.doc.render(x3dCanvas.gl);}};this.x3dElem.context=x3dCanvas.gl.ctx3d;this.doc.onerror=function(){alert('Failed to load X3D document');};this.doc.load(uri,sceneElemPos);};x3dom.runtime={};x3dom.Runtime=function(doc,canvas){this.doc=doc;this.canvas=canvas;this.config={};this.isReady=false;this.fps=0;this.states={measurements:[],infos:[]};};x3dom.Runtime.prototype.addMeasurement=function(title,value){this.states.measurements[title]=value;};x3dom.Runtime.prototype.removeMeasurement=function(title){if(this.states.measurements[title]){delete this.states.measurements[title];}};x3dom.Runtime.prototype.addInfo=function(title,value){this.states.infos[title]=value;};x3dom.Runtime.prototype.removeInfo=function(title){delete this.states.infos[title];};x3dom.Runtime.prototype.initialize=function(doc,canvas){this.doc=doc;this.canvas=canvas;this.config={};this.isReady=false;this.fps=0;};x3dom.Runtime.prototype.noBackendFound=function(){x3dom.debug.logInfo('No backend found. Unable to render.');};x3dom.Runtime.prototype.ready=function(){x3dom.debug.logInfo('System ready.');};x3dom.Runtime.prototype.enterFrame=function(){};x3dom.Runtime.prototype.exitFrame=function(){};x3dom.Runtime.prototype.triggerRedraw=function(){this.canvas.doc.needRender=true;};x3dom.Runtime.prototype.getActiveBindable=function(typeName){var stacks;var i,current,result;var type;stacks=this.canvas.doc._bindableBag._stacks;result=[];type=x3dom.nodeTypesLC[typeName.toLowerCase()];if(!type){x3dom.debug.logError('No node of type "'+typeName+'" found.');return null;} +for(i=0;i<stacks.length;i++){current=stacks[i].getActive();if(current._xmlNode!==undefined&&x3dom.isa(current,type)){result.push(current);}} +return result[0]?result[0]._xmlNode:null;};x3dom.Runtime.prototype.nextView=function(){var stack=this.canvas.doc._scene.getViewpoint()._stack;if(stack){stack.switchTo('next');}else{x3dom.debug.logError('No valid ViewBindable stack.');}};x3dom.Runtime.prototype.prevView=function(){var stack=this.canvas.doc._scene.getViewpoint()._stack;if(stack){stack.switchTo('prev');}else{x3dom.debug.logError('No valid ViewBindable stack.');}};x3dom.Runtime.prototype.viewpoint=function(){return this.canvas.doc._scene.getViewpoint();};x3dom.Runtime.prototype.viewMatrix=function(){return this.canvas.doc._viewarea.getViewMatrix();};x3dom.Runtime.prototype.projectionMatrix=function(){return this.canvas.doc._viewarea.getProjectionMatrix();};x3dom.Runtime.prototype.getWorldToCameraCoordinatesMatrix=function(){return this.canvas.doc._viewarea.getWCtoCCMatrix();};x3dom.Runtime.prototype.getCameraToWorldCoordinatesMatrix=function(){return this.canvas.doc._viewarea.getCCtoWCMatrix();};x3dom.Runtime.prototype.getViewingRay=function(x,y){return this.canvas.doc._viewarea.calcViewRay(x,y);};x3dom.Runtime.prototype.shootRay=function(x,y){var doc=this.canvas.doc;var info=doc._viewarea._pickingInfo;doc.onPick(this.canvas.gl,x,y);return{pickPosition:info.pickObj?info.pickPos:null,pickNormal:info.pickObj?info.pickNorm:null,pickObject:info.pickObj?info.pickObj._xmlNode:null};};x3dom.Runtime.prototype.getWidth=function(){return this.canvas.doc._viewarea._width;};x3dom.Runtime.prototype.getHeight=function(){return this.canvas.doc._viewarea._height;};x3dom.Runtime.prototype.mousePosition=function(event){var pos=this.canvas.mousePosition(event);return[pos.x,pos.y];};x3dom.Runtime.prototype.calcCanvasPos=function(wx,wy,wz){var pnt=new x3dom.fields.SFVec3f(wx,wy,wz);var mat=this.canvas.doc._viewarea.getWCtoCCMatrix();var pos=mat.multFullMatrixPnt(pnt);var w=this.canvas.doc._viewarea._width;var h=this.canvas.doc._viewarea._height;var x=Math.round((pos.x+1)*(w-1)/2);var y=Math.round((h-1)*(1-pos.y)/2);return[x,y];};x3dom.Runtime.prototype.calcPagePos=function(wx,wy,wz){var elem=this.canvas.canvas.offsetParent;if(!elem){x3dom.debug.logError("Can't calc page pos without offsetParent.");return[0,0];} +var canvasPos=elem.getBoundingClientRect();var mousePos=this.calcCanvasPos(wx,wy,wz);var scrollLeft=window.pageXOffset||document.body.scrollLeft;var scrollTop=window.pageYOffset||document.body.scrollTop;var compStyle=document.defaultView.getComputedStyle(elem,null);var paddingLeft=parseFloat(compStyle.getPropertyValue('padding-left'));var borderLeftWidth=parseFloat(compStyle.getPropertyValue('border-left-width'));var paddingTop=parseFloat(compStyle.getPropertyValue('padding-top'));var borderTopWidth=parseFloat(compStyle.getPropertyValue('border-top-width'));var x=canvasPos.left+paddingLeft+borderLeftWidth+scrollLeft+mousePos[0];var y=canvasPos.top+paddingTop+borderTopWidth+scrollTop+mousePos[1];return[x,y];};x3dom.Runtime.prototype.calcClientPos=function(wx,wy,wz){var elem=this.canvas.canvas.offsetParent;if(!elem){x3dom.debug.logError("Can't calc client pos without offsetParent.");return[0,0];} +var canvasPos=elem.getBoundingClientRect();var mousePos=this.calcCanvasPos(wx,wy,wz);var compStyle=document.defaultView.getComputedStyle(elem,null);var paddingLeft=parseFloat(compStyle.getPropertyValue('padding-left'));var borderLeftWidth=parseFloat(compStyle.getPropertyValue('border-left-width'));var paddingTop=parseFloat(compStyle.getPropertyValue('padding-top'));var borderTopWidth=parseFloat(compStyle.getPropertyValue('border-top-width'));var x=canvasPos.left+paddingLeft+borderLeftWidth+mousePos[0];var y=canvasPos.top+paddingTop+borderTopWidth+mousePos[1];return[x,y];};x3dom.Runtime.prototype.getScreenshot=function(){var url="";var backend=this.canvas.backend;var canvas=this.canvas.canvas;if(canvas){if(backend=="flash"){url=canvas.getScreenshot();} +else{var canvas2d=document.createElement("canvas");canvas2d.width=canvas.width;canvas2d.height=canvas.height;var ctx=canvas2d.getContext("2d");ctx.drawImage(canvas,0,0,canvas.width,canvas.height);ctx.scale(1,-1);ctx.translate(0,-canvas.height);url=canvas2d.toDataURL();}} +return url;};x3dom.Runtime.prototype.getCanvas=function(){return this.canvas.canvas;};x3dom.Runtime.prototype.lightMatrix=function(){this.canvas.doc._viewarea.getLightMatrix();};x3dom.Runtime.prototype.resetView=function(){this.canvas.doc._viewarea.resetView();};x3dom.Runtime.prototype.lightView=function(){if(this.canvas.doc._nodeBag.lights.length>0){this.canvas.doc._viewarea.animateTo(this.canvas.doc._viewarea.getLightMatrix()[0],this.canvas.doc._scene.getViewpoint());return true;}else{x3dom.debug.logInfo("No lights to navigate to.");return false;}};x3dom.Runtime.prototype.uprightView=function(){this.canvas.doc._viewarea.uprightView();};x3dom.Runtime.prototype.fitAll=function(updateCenterOfRotation) +{if(updateCenterOfRotation===undefined){updateCenterOfRotation=true;} +var scene=this.canvas.doc._scene;scene.updateVolume();this.canvas.doc._viewarea.fit(scene._lastMin,scene._lastMax,updateCenterOfRotation);};x3dom.Runtime.prototype.fitObject=function(obj,updateCenterOfRotation) +{if(obj&&obj._x3domNode) +{if(updateCenterOfRotation===undefined){updateCenterOfRotation=true;} +var min=x3dom.fields.SFVec3f.MAX();var max=x3dom.fields.SFVec3f.MIN();var vol=obj._x3domNode.getVolume();vol.getBounds(min,max);var mat=obj._x3domNode.getCurrentTransform();min=mat.multMatrixPnt(min);max=mat.multMatrixPnt(max);if(x3dom.isa(obj._x3domNode,x3dom.nodeTypes.X3DTransformNode)) +{var invMat=obj._x3domNode._trafo.inverse();min=invMat.multMatrixPnt(min);max=invMat.multMatrixPnt(max);} +this.canvas.doc._viewarea.fit(min,max,updateCenterOfRotation);}};x3dom.Runtime.prototype.showAll=function(axis){this.canvas.doc._viewarea.showAll(axis);};x3dom.Runtime.prototype.showObject=function(obj) +{if(obj&&obj._x3domNode) +{var min=x3dom.fields.SFVec3f.MAX();var max=x3dom.fields.SFVec3f.MIN();var vol=obj._x3domNode.getVolume();vol.getBounds(min,max);var mat=obj._x3domNode.getCurrentTransform();min=mat.multMatrixPnt(min);max=mat.multMatrixPnt(max);var viewarea=this.canvas.doc._viewarea;var focalLen=(viewarea._width<viewarea._height)?viewarea._width:viewarea._height;var n0=new x3dom.fields.SFVec3f(0,0,1);var viewpoint=this.canvas.doc._scene.getViewpoint();var fov=viewpoint.getFieldOfView()/2.0;var ta=Math.tan(fov);if(Math.abs(ta)>x3dom.fields.Eps){focalLen/=ta;} +var w=viewarea._width-1;var h=viewarea._height-1;var frame=0.25;var minScreenPos=new x3dom.fields.SFVec2f(frame*w,frame*h);frame=0.75;var maxScreenPos=new x3dom.fields.SFVec2f(frame*w,frame*h);var dia2=max.subtract(min).multiply(0.5);var rw=dia2.length();var pc=min.add(dia2);var vc=maxScreenPos.subtract(minScreenPos).multiply(0.5);var rs=1.5*vc.length();vc=vc.add(minScreenPos);var dist=1.0;if(rs>x3dom.fields.Eps){dist=(rw/rs)*Math.sqrt(vc.x*vc.x+vc.y*vc.y+focalLen*focalLen);} +n0=mat.multMatrixVec(n0).normalize();n0=n0.multiply(dist);var p0=pc.add(n0);var qDir=x3dom.fields.Quaternion.rotateFromTo(new x3dom.fields.SFVec3f(0,0,1),n0);var R=qDir.toMatrix();var T=x3dom.fields.SFMatrix4f.translation(p0.negate());var M=x3dom.fields.SFMatrix4f.translation(p0);M=M.mult(R).mult(T).mult(M);var viewmat=M.inverse();viewarea.animateTo(viewmat,viewpoint);}};x3dom.Runtime.prototype.getCenter=function(domNode){if(domNode&&domNode._x3domNode&&(this.isA(domNode,"X3DShapeNode")||this.isA(domNode,"X3DGeometryNode"))) +{return domNode._x3domNode.getCenter();} +return null;};x3dom.Runtime.prototype.getCurrentTransform=function(domNode){if(domNode&&domNode._x3domNode) +{return domNode._x3domNode.getCurrentTransform();} +return null;};x3dom.Runtime.prototype.getBBox=function(domNode){if(domNode&&domNode._x3domNode&&this.isA(domNode,"X3DBoundedObject")) +{var vol=domNode._x3domNode.getVolume();return{min:x3dom.fields.SFVec3f.copy(vol.min),max:x3dom.fields.SFVec3f.copy(vol.max)}} +return null;};x3dom.Runtime.prototype.getSceneBBox=function(){var scene=this.canvas.doc._scene;scene.updateVolume();return{min:x3dom.fields.SFVec3f.copy(scene._lastMin),max:x3dom.fields.SFVec3f.copy(scene._lastMax)}};x3dom.Runtime.prototype.debug=function(show){var doc=this.canvas.doc;if(doc._viewarea._visDbgBuf===undefined) +doc._viewarea._visDbgBuf=(doc._x3dElem.getAttribute("showLog")==='true');if(arguments.length>0){if(show===true){doc._viewarea._visDbgBuf=true;x3dom.debug.logContainer.style.display="block";} +else{doc._viewarea._visDbgBuf=false;x3dom.debug.logContainer.style.display="none";}} +else{doc._viewarea._visDbgBuf=!doc._viewarea._visDbgBuf;x3dom.debug.logContainer.style.display=(doc._viewarea._visDbgBuf==true)?"block":"none";} +doc.needRender=true;return doc._viewarea._visDbgBuf;};x3dom.Runtime.prototype.navigationType=function(){return this.canvas.doc._scene.getNavigationInfo().getType();};x3dom.Runtime.prototype.noNav=function(){this.canvas.doc._scene.getNavigationInfo().setType("none");};x3dom.Runtime.prototype.examine=function(){this.canvas.doc._scene.getNavigationInfo().setType("examine");};x3dom.Runtime.prototype.turnTable=function(){this.canvas.doc._scene.getNavigationInfo().setType("turntable");};x3dom.Runtime.prototype.fly=function(){this.canvas.doc._scene.getNavigationInfo().setType("fly");};x3dom.Runtime.prototype.freeFly=function(){this.canvas.doc._scene.getNavigationInfo().setType("freefly");};x3dom.Runtime.prototype.lookAt=function(){this.canvas.doc._scene.getNavigationInfo().setType("lookat");};x3dom.Runtime.prototype.lookAround=function(){this.canvas.doc._scene.getNavigationInfo().setType("lookaround");};x3dom.Runtime.prototype.walk=function(){this.canvas.doc._scene.getNavigationInfo().setType("walk");};x3dom.Runtime.prototype.game=function(){this.canvas.doc._scene.getNavigationInfo().setType("game");};x3dom.Runtime.prototype.helicopter=function(){this.canvas.doc._scene.getNavigationInfo().setType("helicopter");};x3dom.Runtime.prototype.resetExamin=function(){var viewarea=this.canvas.doc._viewarea;viewarea._rotMat=x3dom.fields.SFMatrix4f.identity();viewarea._transMat=x3dom.fields.SFMatrix4f.identity();viewarea._movement=new x3dom.fields.SFVec3f(0,0,0);viewarea._needNavigationMatrixUpdate=true;this.canvas.doc.needRender=true;};x3dom.Runtime.prototype.togglePoints=function(lines){var doc=this.canvas.doc;var mod=(lines===true)?3:2;doc._viewarea._points=++doc._viewarea._points%mod;doc.needRender=true;return doc._viewarea._points;};x3dom.Runtime.prototype.pickRect=function(x1,y1,x2,y2){return this.canvas.doc.onPickRect(this.canvas.gl,x1,y1,x2,y2);};x3dom.Runtime.prototype.pickMode=function(options){if(options&&options.internal===true){return this.canvas.doc._scene._vf.pickMode;} +return this.canvas.doc._scene._vf.pickMode.toLowerCase();};x3dom.Runtime.prototype.changePickMode=function(type){type=type.toLowerCase();switch(type){case'idbuf':type='idBuf';break;case'idbuf24':type='idBuf24';break;case'idbufid':type='idBufId';break;case'texcoord':type='texCoord';break;case'color':type='color';break;case'box':type='box';break;default:x3dom.debug.logWarning("Switch pickMode to "+type+' unknown intersect type');type=undefined;} +if(type!==undefined){this.canvas.doc._scene._vf.pickMode=type;x3dom.debug.logInfo("Switched pickMode to '"+type+"'.");return true;} +return false;};x3dom.Runtime.prototype.speed=function(newSpeed){var navi=this.canvas.doc._scene.getNavigationInfo();if(newSpeed){navi._vf.speed=newSpeed;x3dom.debug.logInfo("Changed navigation speed to "+navi._vf.speed);} +return navi._vf.speed;};x3dom.Runtime.prototype.statistics=function(mode){var states=this.canvas.stateViewer;if(states){this.canvas.doc.needRender=true;if(mode===true){states.display(mode);return true;} +else if(mode===false){states.display(mode);return false;} +else{states.display(!states.active);return states.active;}} +return false;};x3dom.Runtime.prototype.processIndicator=function(mode){var processDiv=this.canvas.progressDiv;if(processDiv){if(mode===true){processDiv.style.display='inline';return true;} +else if(mode===false){processDiv.style.display='none';return false;} +return processDiv.style.display!='none'} +return false;};x3dom.Runtime.prototype.properties=function(){return this.canvas.doc.properties;};x3dom.Runtime.prototype.backendName=function(){return this.canvas.backend;};x3dom.Runtime.prototype.getFPS=function(){return this.fps;};x3dom.Runtime.prototype.isA=function(domNode,nodeType){var inherits=false;if(nodeType&&domNode&&domNode._x3domNode){if(nodeType===""){nodeType="X3DNode";} +inherits=x3dom.isa(domNode._x3domNode,x3dom.nodeTypesLC[nodeType.toLowerCase()]);} +return inherits;};x3dom.detectActiveX=function(){var isInstalled=false;if(window.ActiveXObject){var control=null;try{control=new ActiveXObject('AVALONATX.InstantPluginATXCtrl.1');}catch(e){} +if(control){isInstalled=true;}} +return isInstalled;};x3dom.rerouteSetAttribute=function(node,browser){node._setAttribute=node.setAttribute;node.setAttribute=function(name,value){var id=node.getAttribute("_x3domNode");var anode=browser.findNode(id);if(anode) +return anode.parseField(name,value);else +return 0;};for(var i=0;i<node.childNodes.length;i++){var child=node.childNodes[i];x3dom.rerouteSetAttribute(child,browser);}};x3dom.insertActiveX=function(x3d){if(typeof x3dom.atxCtrlCounter=='undefined'){x3dom.atxCtrlCounter=0;} +var height=x3d.getAttribute("height");var width=x3d.getAttribute("width");var parent=x3d.parentNode;var divelem=document.createElement("div");divelem.setAttribute("id","x3dplaceholder");var inserted=parent.insertBefore(divelem,x3d);var hiddenx3d=document.createElement("div");hiddenx3d.style.display="none";parent.appendChild(hiddenx3d);parent.removeChild(x3d);hiddenx3d.appendChild(x3d);var atx=document.createElement("object");var containerName="Avalon"+x3dom.atxCtrlCounter;x3dom.atxCtrlCounter++;atx.setAttribute("id",containerName);atx.setAttribute("classid","CLSID:F3254BA0-99FF-4D14-BD81-EDA9873A471E");atx.setAttribute("width",width?width:"500");atx.setAttribute("height",height?height:"500");inserted.appendChild(atx);var atxctrl=document.getElementById(containerName);var browser=atxctrl.getBrowser();var scene=browser.importDocument(x3d);browser.replaceWorld(scene);x3d.getBrowser=function(){return atxctrl.getBrowser();};x3dom.rerouteSetAttribute(x3d,browser);};x3dom.userAgentFeature={supportsDOMAttrModified:false};(function loadX3DOM(){"use strict";var onload=function(){var i,j;var x3ds_unfiltered=document.getElementsByTagName('X3D');var x3ds=[];for(i=0;i<x3ds_unfiltered.length;i++){if(x3ds_unfiltered[i].hasRuntime===undefined) +x3ds.push(x3ds_unfiltered[i]);} +var params;var settings=new x3dom.Properties();var validParams=array_to_object(['showLog','showStat','showProgress','PrimitiveQuality','components','loadpath','disableDoubleClick','backend','altImg','flashrenderer','swfpath','runtimeEnabled','keysEnabled','showTouchpoints','disableTouch','maxActiveDownloads']);var components,prefix;var showLoggingConsole=false;for(i=0;i<x3ds.length;i++){settings.setProperty("showLog",x3ds[i].getAttribute("showLog")||'false');settings.setProperty("showStat",x3ds[i].getAttribute("showStat")||'false');settings.setProperty("showProgress",x3ds[i].getAttribute("showProgress")||'true');settings.setProperty("PrimitiveQuality",x3ds[i].getAttribute("PrimitiveQuality")||'High');params=x3ds[i].getElementsByTagName('PARAM');for(j=0;j<params.length;j++){if(params[j].getAttribute('name')in validParams){settings.setProperty(params[j].getAttribute('name'),params[j].getAttribute('value'));}else{}} +if(settings.getProperty('showLog')==='true'){showLoggingConsole=true;} +if(typeof X3DOM_SECURITY_OFF!='undefined'&&X3DOM_SECURITY_OFF===true){components=settings.getProperty('components',x3ds[i].getAttribute("components"));if(components){prefix=settings.getProperty('loadpath',x3ds[i].getAttribute("loadpath"));components=components.trim().split(',');for(j=0;j<components.length;j++){x3dom.loadJS(components[j]+".js",prefix);}} +if(x3ds[i].getAttribute("src")){var _scene=document.createElement("scene");var _inl=document.createElement("Inline");_inl.setAttribute("url",x3ds[i].getAttribute("src"));_scene.appendChild(_inl);x3ds[i].appendChild(_scene);}}} +if(showLoggingConsole==true){x3dom.debug.activate(true);}else{x3dom.debug.activate(false);} +x3ds=Array.map(x3ds,function(n){n.hasRuntime=true;return n;});var w3sg=document.getElementsByTagName('webSG');for(i=0;i<w3sg.length;i++){w3sg[i].hasRuntime=false;x3ds.push(w3sg[i]);} +if(x3dom.versionInfo!==undefined){x3dom.debug.logInfo("X3DOM version "+x3dom.versionInfo.version+", "+"Revison <a href='https://github.com/x3dom/x3dom/tree/"+x3dom.versionInfo.revision+"'>" ++x3dom.versionInfo.revision+"</a>, "+"Date "+x3dom.versionInfo.date);} +x3dom.debug.logInfo("Found "+(x3ds.length-w3sg.length)+" X3D and "+ +w3sg.length+" (experimental) WebSG nodes...");var x3d_element;var x3dcanvas;var altDiv,altP,aLnk,altImg;var t0,t1;for(i=0;i<x3ds.length;i++) +{x3d_element=x3ds[i];if(x3dom.detectActiveX()){x3dom.insertActiveX(x3d_element);continue;} +x3dcanvas=new x3dom.X3DCanvas(x3d_element,x3dom.canvases.length);x3dom.canvases.push(x3dcanvas);if(x3dcanvas.gl===null){altDiv=document.createElement("div");altDiv.setAttribute("class","x3dom-nox3d");altDiv.setAttribute("id","x3dom-nox3d");altP=document.createElement("p");altP.appendChild(document.createTextNode("WebGL is not yet supported in your browser. "));aLnk=document.createElement("a");aLnk.setAttribute("href","http://www.x3dom.org/?page_id=9");aLnk.appendChild(document.createTextNode("Follow link for a list of supported browsers... "));altDiv.appendChild(altP);altDiv.appendChild(aLnk);x3dcanvas.x3dElem.appendChild(altDiv);if(x3dcanvas.stateViewer){x3d_element.removeChild(x3dcanvas.stateViewer.viewer);} +continue;} +t0=new Date().getTime();x3ds[i].runtime=new x3dom.Runtime(x3ds[i],x3dcanvas);x3ds[i].runtime.initialize(x3ds[i],x3dcanvas);if(x3dom.runtime.ready){x3ds[i].runtime.ready=x3dom.runtime.ready;} +if(x3dcanvas.backend==''){x3dom.runtime.noBackendFound();} +x3dcanvas.load(x3ds[i],i,settings);if(settings.getProperty('showStat')==='true'){x3ds[i].runtime.statistics(true);}else{x3ds[i].runtime.statistics(false);} +if(settings.getProperty('showProgress')==='true'){if(settings.getProperty('showProgress')==='bar'){x3dcanvas.progressDiv.setAttribute("class","x3dom-progress bar");} +x3ds[i].runtime.processIndicator(true);}else{x3ds[i].runtime.processIndicator(false);} +t1=new Date().getTime()-t0;x3dom.debug.logInfo("Time for setup and init of GL element no. "+i+": "+t1+" ms.");} +var ready=(function(eventType){var evt=null;if(document.createEvent){evt=document.createEvent("Events");evt.initEvent(eventType,true,true);document.dispatchEvent(evt);}else if(document.createEventObject){evt=document.createEventObject();document.body.fireEvent('on'+eventType,evt);}})('load');};var onunload=function(){if(x3dom.canvases){for(var i=0;i<x3dom.canvases.length;i++){x3dom.canvases[i].doc.shutdown(x3dom.canvases[i].gl);} +x3dom.canvases=[];}};x3dom.reload=function(){onload();};if(navigator.userAgent.indexOf("Chrome")!=-1){document.__getElementsByTagName=document.getElementsByTagName;document.getElementsByTagName=function(tag){var obj=[];var elems=this.__getElementsByTagName("*");if(tag=="*"){obj=elems;}else{tag=tag.toUpperCase();for(var i=0;i<elems.length;i++){var tagName=elems[i].tagName.toUpperCase();if(tagName===tag){obj.push(elems[i]);}}} +return obj;};document.__getElementById=document.getElementById;document.getElementById=function(id){var obj=this.__getElementById(id);if(!obj){var elems=this.__getElementsByTagName("*");for(var i=0;i<elems.length&&!obj;i++){if(elems[i].getAttribute("id")===id){obj=elems[i];}}} +return obj;};}else{document.__getElementById=document.getElementById;document.getElementById=function(id){var obj=this.__getElementById(id);if(!obj){var elems=this.getElementsByTagName("*");for(var i=0;i<elems.length&&!obj;i++){if(elems[i].getAttribute("id")===id){obj=elems[i];}}} +return obj;};} +if(window.addEventListener){window.addEventListener('load',onload,false);window.addEventListener('unload',onunload,false);window.addEventListener('reload',onunload,false);}else if(window.attachEvent){window.attachEvent('onload',onload);window.attachEvent('onunload',onunload);window.attachEvent('onreload',onunload);} +if(document.readyState==="complete"){window.setTimeout(function(){onload();},20);}})();x3dom.Cache=function(){this.textures=[];this.shaders=[];};x3dom.Cache.prototype.getTexture2D=function(gl,doc,url,bgnd,withCredentials,scale,genMipMaps){var textureIdentifier=url;if(this.textures[textureIdentifier]===undefined){this.textures[textureIdentifier]=x3dom.Utils.createTexture2D(gl,doc,url,bgnd,withCredentials,scale,genMipMaps);} +return this.textures[textureIdentifier];};x3dom.Cache.prototype.getTextureCube=function(gl,doc,url,bgnd,withCredentials,scale,genMipMaps){var textureIdentifier="";for(var i=0;i<url.length;++i){textureIdentifier+=url[i]+"|";} +if(this.textures[textureIdentifier]===undefined){this.textures[textureIdentifier]=x3dom.Utils.createTextureCube(gl,doc,url,bgnd,withCredentials,scale,genMipMaps);} +return this.textures[textureIdentifier];};x3dom.Cache.prototype.getShader=function(gl,shaderIdentifier){var program=null;if(this.shaders[shaderIdentifier]===undefined){switch(shaderIdentifier){case x3dom.shader.PICKING:program=new x3dom.shader.PickingShader(gl);break;case x3dom.shader.PICKING_24:program=new x3dom.shader.Picking24Shader(gl);break;case x3dom.shader.PICKING_ID:program=new x3dom.shader.PickingIdShader(gl);break;case x3dom.shader.PICKING_COLOR:program=new x3dom.shader.PickingColorShader(gl);break;case x3dom.shader.PICKING_TEXCOORD:program=new x3dom.shader.PickingTexcoordShader(gl);break;case x3dom.shader.FRONTGROUND_TEXTURE:program=new x3dom.shader.FrontgroundTextureShader(gl);break;case x3dom.shader.BACKGROUND_TEXTURE:program=new x3dom.shader.BackgroundTextureShader(gl);break;case x3dom.shader.BACKGROUND_SKYTEXTURE:program=new x3dom.shader.BackgroundSkyTextureShader(gl);break;case x3dom.shader.BACKGROUND_CUBETEXTURE:program=new x3dom.shader.BackgroundCubeTextureShader(gl);break;case x3dom.shader.SHADOW:program=new x3dom.shader.ShadowShader(gl);break;case x3dom.shader.BLUR:program=new x3dom.shader.BlurShader(gl);break;case x3dom.shader.DEPTH:break;case x3dom.shader.NORMAL:program=new x3dom.shader.NormalShader(gl);break;case x3dom.shader.TEXTURE_REFINEMENT:program=new x3dom.shader.TextureRefinementShader(gl);break;default:break;} +if(program) +this.shaders[shaderIdentifier]=x3dom.Utils.wrapProgram(gl,program,shaderIdentifier);else +x3dom.debug.logError("Couldn't create shader: "+shaderIdentifier);} +return this.shaders[shaderIdentifier];};x3dom.Cache.prototype.getDynamicShader=function(gl,viewarea,shape){var properties=x3dom.Utils.generateProperties(viewarea,shape);var shaderID=properties.id;if(this.shaders[shaderID]===undefined){var program;if(properties.CSHADER!=-1){program=new x3dom.shader.ComposedShader(gl,shape);}else{program=(x3dom.caps.MOBILE&&!properties.CSSHADER)?new x3dom.shader.DynamicMobileShader(gl,properties):new x3dom.shader.DynamicShader(gl,properties);} +this.shaders[shaderID]=x3dom.Utils.wrapProgram(gl,program,shaderID);} +return this.shaders[shaderID];};x3dom.Cache.prototype.getShaderByProperties=function(gl,shape,properties){var shaderID=properties.id;if(this.shaders[shaderID]===undefined) +{var program;if(properties.CSHADER!=-1){program=new x3dom.shader.ComposedShader(gl,shape);}else{program=(x3dom.caps.MOBILE&&!properties.CSSHADER)?new x3dom.shader.DynamicMobileShader(gl,properties):new x3dom.shader.DynamicShader(gl,properties);} +this.shaders[shaderID]=x3dom.Utils.wrapProgram(gl,program,shaderID);} +return this.shaders[shaderID];};x3dom.Cache.prototype.getShadowRenderingShader=function(gl,shadowedLights){var ID="shadow";for(var i=0;i<shadowedLights.length;i++){if(x3dom.isa(shadowedLights[i],x3dom.nodeTypes.SpotLight)) +ID+="S";else if(x3dom.isa(shadowedLights[i],x3dom.nodeTypes.PointLight)) +ID+="P";else +ID+="D";} +if(this.shaders[ID]===undefined){var program=new x3dom.shader.ShadowRenderingShader(gl,shadowedLights);this.shaders[ID]=x3dom.Utils.wrapProgram(gl,program,ID);} +return this.shaders[ID];};x3dom.Cache.prototype.Release=function(gl){for(var texture in this.textures){gl.deleteTexture(this.textures[texture]);} +this.textures=[];for(var shaderId in this.shaders){var shader=this.shaders[shaderId];var glShaders=gl.getAttachedShaders(shader.program);for(var i=0;i<glShaders.length;++i){gl.detachShader(shader.program,glShaders[i]);gl.deleteShader(glShaders[i]);} +gl.deleteProgram(shader.program)} +this.shaders=[];};function startDashVideo(recurl,texturediv){var vars=function(){var vars={};var parts=window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(m,key,value){vars[key]=value;});return vars;},url=recurl,video,context,player;if(vars&&vars.hasOwnProperty("url")){url=vars.url;} +video=document.querySelector(texturediv);context=new Dash.di.DashContext();player=new MediaPlayer(context);player.startup();player.attachView(video);player.setAutoPlay(false);player.attachSource(url);} +x3dom.Texture=function(gl,doc,cache,node){this.gl=gl;this.doc=doc;this.cache=cache;this.node=node;this.samplerName="diffuseMap";this.type=gl.TEXTURE_2D;this.format=gl.RGBA;this.magFilter=gl.LINEAR;this.minFilter=gl.LINEAR;this.wrapS=gl.REPEAT;this.wrapT=gl.REPEAT;this.genMipMaps=false;this.texture=null;this.ready=false;this.dashtexture=false;var tex=this.node;var suffix="mpd";if(x3dom.isa(tex,x3dom.nodeTypes.MovieTexture)){if(tex._vf.url[0].indexOf(suffix,tex._vf.url[0].length-suffix.length)!==-1){this.dashtexture=true;var js=document.getElementById("AdditionalDashVideoScript");if(!js){js=document.createElement("script");js.setAttribute("type","text/javascript");js.setAttribute("src",x3dom.Texture.dashVideoScriptFile);js.setAttribute("id","AdditionalDashVideoScript");js.onload=function(){var texObj;while((texObj=x3dom.Texture.loadDashVideos.pop())){x3dom.Texture.textNum++;texObj.update();} +js.ready=true;};document.getElementsByTagName('head')[0].appendChild(js);} +if(js.ready===true){x3dom.Texture.textNum++;this.update();} +else{x3dom.Texture.loadDashVideos.push(this);}}} +if(!this.dashtexture){this.update();}};x3dom.Texture.dashVideoScriptFile="dash.all.js";x3dom.Texture.loadDashVideos=[];x3dom.Texture.textNum=0;x3dom.Texture.clampFontSize=false;x3dom.Texture.prototype.update=function() +{if(x3dom.isa(this.node,x3dom.nodeTypes.Text)) +{this.updateText();} +else +{this.updateTexture();}};x3dom.Texture.prototype.updateTexture=function() +{var gl=this.gl;var doc=this.doc;var tex=this.node;this.samplerName=tex._type;if(x3dom.isa(tex,x3dom.nodeTypes.X3DEnvironmentTextureNode)){this.type=gl.TEXTURE_CUBE_MAP;}else{this.type=gl.TEXTURE_2D;} +if(x3dom.isa(tex,x3dom.nodeTypes.PixelTexture)){switch(tex._vf.image.comp) +{case 1:this.format=gl.LUMINANCE;break;case 2:this.format=gl.LUMINANCE_ALPHA;break;case 3:this.format=gl.RGB;break;case 4:this.format=gl.RGBA;break;}}else{this.format=gl.RGBA;} +if(tex._cf.textureProperties.node!==null){var texProp=tex._cf.textureProperties.node;this.wrapS=x3dom.Utils.boundaryModesDic(gl,texProp._vf.boundaryModeS);this.wrapT=x3dom.Utils.boundaryModesDic(gl,texProp._vf.boundaryModeT);this.minFilter=x3dom.Utils.minFilterDic(gl,texProp._vf.minificationFilter);this.magFilter=x3dom.Utils.magFilterDic(gl,texProp._vf.magnificationFilter);if(texProp._vf.generateMipMaps===true){this.genMipMaps=true;if(this.minFilter==gl.NEAREST){this.minFilter=gl.NEAREST_MIPMAP_NEAREST;}else if(this.minFilter==gl.LINEAR){this.minFilter=gl.LINEAR_MIPMAP_LINEAR;} +if(this.texture&&(this.texture.ready||this.texture.textureCubeReady)){gl.bindTexture(this.type,this.texture);gl.generateMipmap(this.type);gl.bindTexture(this.type,null);}}else{this.genMipMaps=false;if((this.minFilter==gl.LINEAR_MIPMAP_LINEAR)||(this.minFilter==gl.LINEAR_MIPMAP_NEAREST)){this.minFilter=gl.LINEAR;}else if((this.minFilter==gl.NEAREST_MIPMAP_LINEAR)||(this.minFilter==gl.NEAREST_MIPMAP_NEAREST)){this.minFilter=gl.NEAREST;}}}else{if(tex._vf.repeatS==false){this.wrapS=gl.CLAMP_TO_EDGE;} +else +{this.wrapS=gl.REPEAT;} +if(tex._vf.repeatT==false){this.wrapT=gl.CLAMP_TO_EDGE;} +else +{this.wrapT=gl.REPEAT;} +if(this.samplerName=="displacementMap"||this.samplerName=="multiDiffuseAlphaMap"||this.samplerName=="multiVisibilityMap") +{this.wrapS=gl.CLAMP_TO_EDGE;this.wrapT=gl.CLAMP_TO_EDGE;this.minFilter=gl.NEAREST;this.magFilter=gl.NEAREST;}} +var childTex=(tex._video&&tex._needPerFrameUpdate===true);if(tex._isCanvas&&tex._canvas) +{if(this.texture==null){this.texture=gl.createTexture()} +this.texture.width=tex._canvas.width;this.texture.height=tex._canvas.height;this.texture.ready=true;gl.bindTexture(this.type,this.texture);gl.texImage2D(this.type,0,this.format,this.format,gl.UNSIGNED_BYTE,tex._canvas);if(this.genMipMaps){gl.generateMipmap(this.type);} +gl.bindTexture(this.type,null);} +else if(x3dom.isa(tex,x3dom.nodeTypes.RenderedTexture)) +{if(tex._webgl&&tex._webgl.fbo){this.texture=tex._webgl.fbo.tex;} +else{this.texture=null;x3dom.debug.logError("Try updating RenderedTexture without FBO initialized!");} +if(this.texture){this.texture.ready=true;}} +else if(x3dom.isa(tex,x3dom.nodeTypes.PixelTexture)) +{if(this.texture==null){this.texture=gl.createTexture()} +this.texture.width=tex._vf.image.width;this.texture.height=tex._vf.image.height;this.texture.ready=true;var pixelArr=tex._vf.image.toGL();var pixelArrfont_size=tex._vf.image.width*tex._vf.image.height*tex._vf.image.comp;while(pixelArr.length<pixelArrfont_size){pixelArr.push(0);} +var pixels=new Uint8Array(pixelArr);gl.bindTexture(this.type,this.texture);gl.pixelStorei(gl.UNPACK_ALIGNMENT,1);gl.texImage2D(this.type,0,this.format,tex._vf.image.width,tex._vf.image.height,0,this.format,gl.UNSIGNED_BYTE,pixels);if(this.genMipMaps){gl.generateMipmap(this.type);} +gl.bindTexture(this.type,null);} +else if(x3dom.isa(tex,x3dom.nodeTypes.MovieTexture)||childTex) +{var that=this;var p=document.getElementsByTagName('body')[0];if(this.texture==null){this.texture=gl.createTexture();} +if(this.dashtexture){var element_vid=document.createElement('div');element_vid.setAttribute('class','dash-video-player'+x3dom.Texture.textNum);tex._video=document.createElement('video');tex._video.setAttribute('preload','auto');tex._video.setAttribute('muted','muted');var scriptToRun=document.createElement('script');scriptToRun.setAttribute('type','text/javascript');scriptToRun.innerHTML='startDashVideo("'+tex._vf.url[0]+'",".dash-video-player'+x3dom.Texture.textNum+' video")';element_vid.appendChild(scriptToRun);element_vid.appendChild(tex._video);p.appendChild(element_vid);tex._video.style.visibility="hidden";tex._video.style.display="none";} +else{if(!childTex){tex._video=document.createElement('video');tex._video.setAttribute('preload','auto');tex._video.setAttribute('muted','muted');p.appendChild(tex._video);tex._video.style.visibility="hidden";tex._video.style.display="none";} +for(var i=0;i<tex._vf.url.length;i++){var videoUrl=tex._nameSpace.getURL(tex._vf.url[i]);x3dom.debug.logInfo('Adding video file: '+videoUrl);var src=document.createElement('source');src.setAttribute('src',videoUrl);tex._video.appendChild(src);}} +var updateMovie=function() +{gl.bindTexture(that.type,that.texture);gl.texImage2D(that.type,0,that.format,that.format,gl.UNSIGNED_BYTE,tex._video);if(that.genMipMaps){gl.generateMipmap(that.type);} +gl.bindTexture(that.type,null);that.texture.ready=true;doc.needRender=true;};var startVideo=function() +{tex._video.play();tex._intervalID=setInterval(updateMovie,16);};var videoDone=function() +{clearInterval(tex._intervalID);if(tex._vf.loop===true) +{tex._video.play();tex._intervalID=setInterval(updateMovie,16);}};tex._video.addEventListener("canplaythrough",startVideo,true);tex._video.addEventListener("ended",videoDone,true);} +else if(x3dom.isa(tex,x3dom.nodeTypes.X3DEnvironmentTextureNode)) +{this.texture=this.cache.getTextureCube(gl,doc,tex.getTexUrl(),false,tex._vf.withCredentials,tex._vf.scale,this.genMipMaps);} +else +{this.texture=this.cache.getTexture2D(gl,doc,tex._nameSpace.getURL(tex._vf.url[0]),false,tex._vf.withCredentials,tex._vf.scale,this.genMipMaps);}};x3dom.Texture.prototype.updateText=function() +{var gl=this.gl;this.wrapS=gl.CLAMP_TO_EDGE;this.wrapT=gl.CLAMP_TO_EDGE;var fontStyleNode=this.node._cf.fontStyle.node;var font_family='serif';var font_style='normal';var font_justify='left';var font_size=1.0;var font_spacing=1.0;var font_horizontal=true;var font_language="";if(fontStyleNode!==null) +{var fonts=fontStyleNode._vf.family.toString();fonts=fonts.trim().replace(/\'/g,'').replace(/\,/,' ');fonts=fonts.split(" ");font_family=Array.map(fonts,function(s){if(s=='SANS'){return'sans-serif';} +else if(s=='SERIF'){return'serif';} +else if(s=='TYPEWRITER'){return'monospace';} +else{return''+s+'';}}).join(",");font_style=fontStyleNode._vf.style.toString().replace(/\'/g,'');switch(font_style.toUpperCase()){case'PLAIN':font_style='normal';break;case'BOLD':font_style='bold';break;case'ITALIC':font_style='italic';break;case'BOLDITALIC':font_style='italic bold';break;default:font_style='normal';} +var leftToRight=fontStyleNode._vf.leftToRight?'ltr':'rtl';var topToBottom=fontStyleNode._vf.topToBottom;font_justify=fontStyleNode._vf.justify[0].toString().replace(/\'/g,'');switch(font_justify.toUpperCase()){case'BEGIN':font_justify='left';break;case'END':font_justify='right';break;case'FIRST':font_justify='left';break;case'MIDDLE':font_justify='center';break;default:font_justify='left';break;} +font_size=fontStyleNode._vf.size;font_spacing=fontStyleNode._vf.spacing;font_horizontal=fontStyleNode._vf.horizontal;font_language=fontStyleNode._vf.language;if(font_size<0.1)font_size=0.1;if(x3dom.Texture.clampFontSize&&font_size>2.3) +{font_size=2.3;}} +var textX,textY;var paragraph=this.node._vf.string;var text_canvas=document.createElement('canvas');text_canvas.dir=leftToRight;var textHeight=font_size*42;var textAlignment=font_justify;document.body.appendChild(text_canvas);var text_ctx=text_canvas.getContext('2d');text_ctx.font=font_style+" "+textHeight+"px "+font_family;var maxWidth=text_ctx.measureText(paragraph[0]).width;var i;for(i=1;i<paragraph.length;i++){if(text_ctx.measureText(paragraph[i]).width>maxWidth) +maxWidth=text_ctx.measureText(paragraph[i]).width;} +var canvas_scale=1.1;text_canvas.width=maxWidth*canvas_scale;text_canvas.height=textHeight*paragraph.length*canvas_scale;switch(textAlignment){case"left":textX=0;break;case"center":textX=text_canvas.width/2;break;case"right":textX=text_canvas.width;break;} +var txtW=text_canvas.width;var txtH=text_canvas.height;text_ctx.fillStyle='rgba(0,0,0,0)';text_ctx.fillRect(0,0,text_ctx.canvas.width,text_ctx.canvas.height);text_ctx.fillStyle='white';text_ctx.lineWidth=2.5;text_ctx.strokeStyle='grey';text_ctx.textBaseline='top';text_ctx.font=font_style+" "+textHeight+"px "+font_family;text_ctx.textAlign=textAlignment;for(i=0;i<paragraph.length;i++){textY=i*textHeight;text_ctx.fillText(paragraph[i],textX,textY);} +if(this.texture===null) +{this.texture=gl.createTexture();} +gl.bindTexture(this.type,this.texture);gl.texImage2D(this.type,0,this.format,this.format,gl.UNSIGNED_BYTE,text_canvas);gl.bindTexture(this.type,null);document.body.removeChild(text_canvas);var w=txtW/100.0;var h=txtH/100.0;this.node._mesh._positions[0]=[-w,-h+.4,0,w,-h+.4,0,w,h+.4,0,-w,h+.4,0];this.node.invalidateVolume();Array.forEach(this.node._parentNodes,function(node){node.setAllDirty();});};x3dom.X3DDocument=function(canvas,ctx,settings){this.canvas=canvas;this.ctx=ctx;this.properties=settings;this.needRender=true;this._x3dElem=null;this._scene=null;this._viewarea=null;this.downloadCount=0;this._nodeBag={timer:[],lights:[],clipPlanes:[],followers:[],trans:[],renderTextures:[],viewarea:[],affectedPointingSensors:[]};this.onload=function(){};this.onerror=function(){};};x3dom.X3DDocument.prototype.load=function(uri,sceneElemPos){var uri_docs={};var queued_uris=[uri];var doc=this;function next_step(){if(queued_uris.length===0){doc._setup(uri_docs[uri],uri_docs,sceneElemPos);doc.onload();return;} +var next_uri=queued_uris.shift();if(x3dom.isX3DElement(next_uri)&&(next_uri.localName.toLowerCase()==='x3d'||next_uri.localName.toLowerCase()==='websg')) +{uri_docs[next_uri]=next_uri;doc._x3dElem=next_uri;next_step();}} +next_step();};x3dom.findScene=function(x3dElem){var sceneElems=[];for(var i=0;i<x3dElem.childNodes.length;i++){var sceneElem=x3dElem.childNodes[i];if(sceneElem&&sceneElem.localName&&sceneElem.localName.toLowerCase()==="scene"){sceneElems.push(sceneElem);}} +if(sceneElems.length>1){x3dom.debug.logError("X3D element has more than one Scene child (has "+ +x3dElem.childNodes.length+").");} +else{return sceneElems[0];} +return null;};x3dom.X3DDocument.prototype._setup=function(sceneDoc,uriDocs,sceneElemPos){var doc=this;function cleanNodeBag(bag,node){for(var i=0,n=bag.length;i<n;i++){if(bag[i]===node){bag.splice(i,1);break;}}} +function removeX3DOMBackendGraph(domNode){var children=domNode.childNodes;for(var i=0,n=children.length;i<n;i++){removeX3DOMBackendGraph(children[i]);} +if(domNode._x3domNode){var node=domNode._x3domNode;var nameSpace=node._nameSpace;if(x3dom.isa(node,x3dom.nodeTypes.X3DShapeNode)){if(node._cleanupGLObjects){node._cleanupGLObjects(true);} +if(x3dom.nodeTypes.Shape.idMap.nodeID[node._objectID]){delete x3dom.nodeTypes.Shape.idMap.nodeID[node._objectID];}} +else if(x3dom.isa(node,x3dom.nodeTypes.TimeSensor)){cleanNodeBag(doc._nodeBag.timer,node);} +else if(x3dom.isa(node,x3dom.nodeTypes.X3DLightNode)){cleanNodeBag(doc._nodeBag.lights,node);} +else if(x3dom.isa(node,x3dom.nodeTypes.X3DFollowerNode)){cleanNodeBag(doc._nodeBag.followers,node);} +else if(x3dom.isa(node,x3dom.nodeTypes.X3DTransformNode)){cleanNodeBag(doc._nodeBag.trans,node);} +else if(x3dom.isa(node,x3dom.nodeTypes.RenderedTexture)){cleanNodeBag(doc._nodeBag.renderTextures,node);if(node._cleanupGLObjects){node._cleanupGLObjects();}} +else if(x3dom.isa(node,x3dom.nodeTypes.X3DPointingDeviceSensorNode)){cleanNodeBag(doc._nodeBag.affectedPointingSensors,node);} +else if(x3dom.isa(node,x3dom.nodeTypes.Texture)){node.shutdown();} +else if(x3dom.isa(node,x3dom.nodeTypes.AudioClip)){node.shutdown();} +else if(x3dom.isa(node,x3dom.nodeTypes.X3DBindableNode)){var stack=node._stack;if(stack){node.bind(false);cleanNodeBag(stack._bindBag,node);} +if(node._cleanupGLObjects){node._cleanupGLObjects();}} +else if(x3dom.isa(node,x3dom.nodeTypes.Scene)){if(node._webgl){node._webgl=null;}} +if(nameSpace&&!domNode.getAttribute('use')) +{nameSpace.removeNode(node._DEF);} +node._xmlNode=null;delete domNode._x3domNode;}} +var domEventListener={onAttrModified:function(e){if('_x3domNode'in e.target){var attrToString={1:"MODIFICATION",2:"ADDITION",3:"REMOVAL"};e.target._x3domNode.updateField(e.attrName,e.newValue);doc.needRender=true;}},onNodeRemoved:function(e){var domNode=e.target;if(!domNode) +return;if('_x3domNode'in domNode.parentNode&&'_x3domNode'in domNode){var parent=domNode.parentNode._x3domNode;var child=domNode._x3domNode;if(parent&&child){parent.removeChild(child);parent.nodeChanged();removeX3DOMBackendGraph(domNode);if(doc._viewarea&&doc._viewarea._scene){doc._viewarea._scene.nodeChanged();doc._viewarea._scene.updateVolume();doc.needRender=true;}}} +else if(domNode.localName&&domNode.localName.toUpperCase()=="ROUTE"&&domNode._nodeNameSpace){var fromNode=domNode._nodeNameSpace.defMap[domNode.getAttribute('fromNode')];var toNode=domNode._nodeNameSpace.defMap[domNode.getAttribute('toNode')];if(fromNode&&toNode){fromNode.removeRoute(domNode.getAttribute('fromField'),toNode,domNode.getAttribute('toField'));}} +else if(domNode.localName&&domNode.localName.toUpperCase()=="X3D"){var runtime=domNode.runtime;if(runtime&&runtime.canvas&&runtime.canvas.doc&&runtime.canvas.doc._scene){var sceneNode=runtime.canvas.doc._scene._xmlNode;removeX3DOMBackendGraph(sceneNode);for(var i=0;i<x3dom.canvases.length;i++){if(x3dom.canvases[i]===runtime.canvas){x3dom.canvases[i].doc.shutdown(x3dom.canvases[i].gl);x3dom.canvases.splice(i,1);break;}} +runtime.canvas.doc._scene=null;runtime.canvas.doc._viewarea=null;runtime.canvas.doc=null;runtime.canvas=null;runtime=null;domNode.context=null;domNode.runtime=null;}}},onNodeInserted:function(e){var child=e.target;var parentNode=child.parentNode;if('_x3domNode'in parentNode){if(parentNode.tagName&&parentNode.tagName.toLowerCase()=='inline'||parentNode.tagName.toLowerCase()=='multipart'){} +else{var parent=parentNode._x3domNode;if(parent&&parent._nameSpace&&(child instanceof Element)){if(x3dom.caps.DOMNodeInsertedEvent_perSubtree) +{removeX3DOMBackendGraph(child);} +var newNode=parent._nameSpace.setupTree(child);parent.addChild(newNode,child.getAttribute("containerField"));parent.nodeChanged();var grandParentNode=parentNode.parentNode;if(grandParentNode&&grandParentNode._x3domNode) +grandParentNode._x3domNode.nodeChanged();if(doc._viewarea&&doc._viewarea._scene){doc._viewarea._scene.nodeChanged();doc._viewarea._scene.updateVolume();doc.needRender=true;}} +else{x3dom.debug.logWarning("No _nameSpace in onNodeInserted");}}}}};sceneDoc.addEventListener('DOMNodeRemoved',domEventListener.onNodeRemoved,true);sceneDoc.addEventListener('DOMNodeInserted',domEventListener.onNodeInserted,true);if((x3dom.userAgentFeature.supportsDOMAttrModified===true)){sceneDoc.addEventListener('DOMAttrModified',domEventListener.onAttrModified,true);} +var sceneElem=x3dom.findScene(sceneDoc);this._bindableBag=new x3dom.BindableBag(this);var nameSpace=new x3dom.NodeNameSpace("scene",doc);var scene=nameSpace.setupTree(sceneElem);this._scene=scene;this._bindableBag.setRefNode(scene);this._viewarea=new x3dom.Viewarea(this,scene);this._viewarea._width=this.canvas.width;this._viewarea._height=this.canvas.height;};x3dom.X3DDocument.prototype.advanceTime=function(t){var i=0;if(this._nodeBag.timer.length){for(i=0;i<this._nodeBag.timer.length;i++) +{this.needRender|=this._nodeBag.timer[i].tick(t);}} +if(this._nodeBag.followers.length){for(i=0;i<this._nodeBag.followers.length;i++) +{this.needRender|=this._nodeBag.followers[i].tick(t);}} +if(this._nodeBag.trans.length){for(i=0;i<this._nodeBag.trans.length;i++) +{this.needRender|=this._nodeBag.trans[i].tick(t);}} +if(this._nodeBag.viewarea.length){for(i=0;i<this._nodeBag.viewarea.length;i++) +{this.needRender|=this._nodeBag.viewarea[i].tick(t);}}};x3dom.X3DDocument.prototype.render=function(ctx){if(!ctx||!this._viewarea){return;} +ctx.renderScene(this._viewarea);};x3dom.X3DDocument.prototype.onPick=function(ctx,x,y){if(!ctx||!this._viewarea){return;} +ctx.pickValue(this._viewarea,x,y,1);};x3dom.X3DDocument.prototype.onPickRect=function(ctx,x1,y1,x2,y2){if(!ctx||!this._viewarea){return[];} +return ctx.pickRect(this._viewarea,x1,y1,x2,y2);};x3dom.X3DDocument.prototype.onMove=function(ctx,x,y,buttonState){if(!ctx||!this._viewarea){return;} +if(this._viewarea._scene._vf.doPickPass) +ctx.pickValue(this._viewarea,x,y,buttonState);this._viewarea.onMove(x,y,buttonState);};x3dom.X3DDocument.prototype.onMoveView=function(ctx,translation,rotation){if(!ctx||!this._viewarea){return;} +this._viewarea.onMoveView(translation,rotation);};x3dom.X3DDocument.prototype.onDrag=function(ctx,x,y,buttonState){if(!ctx||!this._viewarea){return;} +if(this._viewarea._scene._vf.doPickPass) +ctx.pickValue(this._viewarea,x,y,buttonState);this._viewarea.onDrag(x,y,buttonState);};x3dom.X3DDocument.prototype.onMousePress=function(ctx,x,y,buttonState){if(!ctx||!this._viewarea){return;} +this._viewarea._scene.updateVolume();ctx.pickValue(this._viewarea,x,y,buttonState);this._viewarea.onMousePress(x,y,buttonState);};x3dom.X3DDocument.prototype.onMouseRelease=function(ctx,x,y,buttonState,prevButton){if(!ctx||!this._viewarea){return;} +var button=(prevButton<<8)|buttonState;ctx.pickValue(this._viewarea,x,y,button);this._viewarea.onMouseRelease(x,y,buttonState,prevButton);};x3dom.X3DDocument.prototype.onMouseOver=function(ctx,x,y,buttonState){if(!ctx||!this._viewarea){return;} +ctx.pickValue(this._viewarea,x,y,buttonState);this._viewarea.onMouseOver(x,y,buttonState);};x3dom.X3DDocument.prototype.onMouseOut=function(ctx,x,y,buttonState){if(!ctx||!this._viewarea){return;} +ctx.pickValue(this._viewarea,x,y,buttonState);this._viewarea.onMouseOut(x,y,buttonState);};x3dom.X3DDocument.prototype.onDoubleClick=function(ctx,x,y){if(!ctx||!this._viewarea){return;} +this._viewarea.onDoubleClick(x,y);};x3dom.X3DDocument.prototype.onKeyDown=function(keyCode) +{switch(keyCode){case 37:this._viewarea.strafeLeft();break;case 38:this._viewarea.moveFwd();break;case 39:this._viewarea.strafeRight();break;case 40:this._viewarea.moveBwd();break;default:}};x3dom.X3DDocument.prototype.onKeyUp=function(keyCode) +{var stack=null;switch(keyCode){case 13:x3dom.toggleFullScreen();break;case 27:window.history.back();break;case 33:stack=this._scene.getViewpoint()._stack;if(stack){stack.switchTo('next');} +else{x3dom.debug.logError('No valid ViewBindable stack.');} +break;case 34:stack=this._scene.getViewpoint()._stack;if(stack){stack.switchTo('prev');} +else{x3dom.debug.logError('No valid ViewBindable stack.');} +break;case 37:break;case 38:break;case 39:break;case 40:break;default:}};x3dom.X3DDocument.prototype.onKeyPress=function(charCode) +{var nav=this._scene.getNavigationInfo();var env=this._scene.getEnvironment();switch(charCode) +{case 32:var states=this.canvas.parent.stateViewer;if(states){states.display();} +x3dom.debug.logInfo("a: show all | d: show helper buffers | s: small feature culling | t: light view | "+"m: toggle render mode | c: frustum culling | p: intersect type | r: reset view | \n"+"e: examine mode | f: fly mode | y: freefly mode | w: walk mode | h: helicopter mode | "+"l: lookAt mode | o: lookaround | g: game mode | n: turntable | u: upright position | \n"+"v: print viewpoint info | pageUp: next view | pageDown: prev. view | "+"+: increase speed | -: decrease speed ");break;case 43:nav._vf.speed=2*nav._vf.speed;x3dom.debug.logInfo("Changed navigation speed to "+nav._vf.speed);break;case 45:nav._vf.speed=0.5*nav._vf.speed;x3dom.debug.logInfo("Changed navigation speed to "+nav._vf.speed);break;case 51:x3dom.nodeTypes.PopGeometry.ErrorToleranceFactor+=0.5;x3dom.debug.logInfo("Changed POP error tolerance to "+x3dom.nodeTypes.PopGeometry.ErrorToleranceFactor);break;case 52:x3dom.nodeTypes.PopGeometry.ErrorToleranceFactor-=0.5;x3dom.debug.logInfo("Changed POP error tolerance to "+x3dom.nodeTypes.PopGeometry.ErrorToleranceFactor);break;case 54:nav._vf.typeParams[1]+=1.0;nav._heliUpdated=false;x3dom.debug.logInfo("Changed helicopter height to "+nav._vf.typeParams[1]);break;case 55:nav._vf.typeParams[1]-=1.0;nav._heliUpdated=false;x3dom.debug.logInfo("Changed helicopter height to "+nav._vf.typeParams[1]);break;case 56:nav._vf.typeParams[0]-=0.02;nav._heliUpdated=false;x3dom.debug.logInfo("Changed helicopter angle to "+nav._vf.typeParams[0]);break;case 57:nav._vf.typeParams[0]+=0.02;nav._heliUpdated=false;x3dom.debug.logInfo("Changed helicopter angle to "+nav._vf.typeParams[0]);break;case 97:this._viewarea.showAll();break;case 99:env._vf.frustumCulling=!env._vf.frustumCulling;x3dom.debug.logInfo("Viewfrustum culling "+(env._vf.frustumCulling?"on":"off"));break;case 100:if(this._viewarea._visDbgBuf===undefined){this._viewarea._visDbgBuf=(this._x3dElem.getAttribute("showLog")==='true');} +this._viewarea._visDbgBuf=!this._viewarea._visDbgBuf;x3dom.debug.logContainer.style.display=(this._viewarea._visDbgBuf==true)?"block":"none";break;case 101:nav.setType("examine",this._viewarea);break;case 102:nav.setType("fly",this._viewarea);break;case 103:nav.setType("game",this._viewarea);break;case 104:nav.setType("helicopter",this._viewarea);break;case 105:this._viewarea.fit(this._scene._lastMin,this._scene._lastMax);break;case 108:nav.setType("lookat",this._viewarea);break;case 109:this._viewarea._points=++this._viewarea._points%3;break;case 110:nav.setType("turntable",this._viewarea);break;case 111:nav.setType("lookaround",this._viewarea);break;case 112:switch(this._scene._vf.pickMode.toLowerCase()) +{case"idbuf":this._scene._vf.pickMode="color";break;case"color":this._scene._vf.pickMode="texCoord";break;case"texcoord":this._scene._vf.pickMode="box";break;default:this._scene._vf.pickMode="idBuf";break;} +x3dom.debug.logInfo("Switch pickMode to '"+this._scene._vf.pickMode+"'.");break;case 114:this._viewarea.resetView();break;case 115:env._vf.smallFeatureCulling=!env._vf.smallFeatureCulling;x3dom.debug.logInfo("Small feature culling "+(env._vf.smallFeatureCulling?"on":"off"));break;case 116:if(this._nodeBag.lights.length>0){this._viewarea.animateTo(this._viewarea.getLightMatrix()[0],this._scene.getViewpoint());} +break;case 117:this._viewarea.uprightView();break;case 118:var that=this;(function(){var viewpoint=that._viewarea._scene.getViewpoint();var mat_view=that._viewarea.getViewMatrix().inverse();var rotation=new x3dom.fields.Quaternion(0,0,1,0);rotation.setValue(mat_view);var rot=rotation.toAxisAngle();var translation=mat_view.e3();x3dom.debug.logInfo('\n<Viewpoint position="'+translation.x.toFixed(5)+' ' ++translation.y.toFixed(5)+' '+translation.z.toFixed(5)+'" '+'orientation="'+rot[0].x.toFixed(5)+' '+rot[0].y.toFixed(5)+' ' ++rot[0].z.toFixed(5)+' '+rot[1].toFixed(5)+'" \n\t'+'zNear="'+viewpoint.getNear().toFixed(5)+'" '+'zFar="'+viewpoint.getFar().toFixed(5)+'" '+'description="'+viewpoint._vf.description+'">'+'</Viewpoint>');})();break;case 119:nav.setType("walk",this._viewarea);break;case 121:nav.setType("freefly",this._viewarea);break;default:}};x3dom.X3DDocument.prototype.shutdown=function(ctx) +{if(!ctx){return;} +ctx.shutdown(this._viewarea);};x3dom.MatrixMixer=function(beginTime,endTime){if(arguments.length===0){this._beginTime=0;this._endTime=1;} +else{this._beginTime=beginTime;this._endTime=endTime;} +this._beginMat=x3dom.fields.SFMatrix4f.identity();this._beginInvMat=x3dom.fields.SFMatrix4f.identity();this._beginLogMat=x3dom.fields.SFMatrix4f.identity();this._endMat=x3dom.fields.SFMatrix4f.identity();this._endLogMat=x3dom.fields.SFMatrix4f.identity();};x3dom.MatrixMixer.prototype.calcFraction=function(time){var fraction=(time-this._beginTime)/(this._endTime-this._beginTime);return(Math.sin((fraction*Math.PI)-(Math.PI/2))+1)/2.0;};x3dom.MatrixMixer.prototype.setBeginMatrix=function(mat){this._beginMat.setValues(mat);this._beginInvMat=mat.inverse();this._beginLogMat=x3dom.fields.SFMatrix4f.zeroMatrix();};x3dom.MatrixMixer.prototype.setEndMatrix=function(mat){this._endMat.setValues(mat);this._endLogMat=mat.mult(this._beginInvMat).log();this._logDiffMat=this._endLogMat.addScaled(this._beginLogMat,-1);};x3dom.MatrixMixer.prototype.mix=function(time){var mat=null;if(time<=this._beginTime) +{mat=x3dom.fields.SFMatrix4f.copy(this._beginLogMat);} +else +{if(time>=this._endTime) +{mat=x3dom.fields.SFMatrix4f.copy(this._endLogMat);} +else +{var fraction=this.calcFraction(time);mat=this._logDiffMat.multiply(fraction).add(this._beginLogMat);}} +return mat.exp().mult(this._beginMat);};x3dom.InputTypes={};x3dom.InputTypes.NAVIGATION=1;x3dom.InputTypes.INTERACTION=2;x3dom.Viewarea=function(document,scene){this._doc=document;this._scene=scene;document._nodeBag.viewarea.push(this);this._pickingInfo={pickPos:new x3dom.fields.SFVec3f(0,0,0),pickNorm:new x3dom.fields.SFVec3f(0,0,1),pickObj:null,firstObj:null,lastObj:null,lastClickObj:null,shadowObjectId:-1};this._currentInputType=x3dom.InputTypes.NAVIGATION;this._rotMat=x3dom.fields.SFMatrix4f.identity();this._transMat=x3dom.fields.SFMatrix4f.identity();this._movement=new x3dom.fields.SFVec3f(0,0,0);this._needNavigationMatrixUpdate=true;this._deltaT=0;this._pitch=0;this._yaw=0;this._eyePos=new x3dom.fields.SFVec3f(0,0,0);this._width=400;this._height=300;this._dx=0;this._dy=0;this._lastX=-1;this._lastY=-1;this._pressX=-1;this._pressY=-1;this._lastButton=0;this._points=0;this._numRenderedNodes=0;this._pick=new x3dom.fields.SFVec3f(0,0,0);this._pickNorm=new x3dom.fields.SFVec3f(0,0,1);this._isAnimating=false;this._isMoving=false;this._lastTS=0;this._mixer=new x3dom.MatrixMixer();this.arc=null;};x3dom.Viewarea.prototype.tick=function(timeStamp) +{var needMixAnim=false;var env=this._scene.getEnvironment();if(env._vf.enableARC&&this.arc==null) +{this.arc=new x3dom.arc.AdaptiveRenderControl(this._scene);} +if(this._mixer._beginTime>0) +{needMixAnim=true;if(timeStamp>=this._mixer._beginTime) +{if(timeStamp<=this._mixer._endTime) +{var mat=this._mixer.mix(timeStamp);this._scene.getViewpoint().setView(mat);} +else{this._mixer._beginTime=0;this._mixer._endTime=0;this._scene.getViewpoint().setView(this._mixer._endMat);}} +else{this._mixer._beginTime=0;this._mixer._endTime=0;this._scene.getViewpoint().setView(this._mixer._beginMat);}} +var needNavAnim=this.navigateTo(timeStamp);var lastIsAnimating=this._isAnimating;this._lastTS=timeStamp;this._isAnimating=(needMixAnim||needNavAnim);if(this.arc!=null) +{this.arc.update(this.isMovingOrAnimating()?1:0,this._doc._x3dElem.runtime.getFPS());} +return(this._isAnimating||lastIsAnimating);};x3dom.Viewarea.prototype.isMoving=function() +{return this._isMoving;};x3dom.Viewarea.prototype.isAnimating=function() +{return this._isAnimating;};x3dom.Viewarea.prototype.isMovingOrAnimating=function() +{return(this._isMoving||this._isAnimating);};x3dom.Viewarea.prototype.navigateTo=function(timeStamp) +{var navi=this._scene.getNavigationInfo();var navType=navi.getType();var needNavAnim=(this._currentInputType==x3dom.InputTypes.NAVIGATION)&&(navType==="game"||(this._lastButton>0&&(navType.indexOf("fly")>=0||navType==="walk"||navType==="helicopter"||navType.substr(0,5)==="looka")));this._deltaT=timeStamp-this._lastTS;if(needNavAnim) +{var avatarRadius=0.25;var avatarHeight=1.6;var avatarKnee=0.75;if(navi._vf.avatarSize.length>2){avatarRadius=navi._vf.avatarSize[0];avatarHeight=navi._vf.avatarSize[1];avatarKnee=navi._vf.avatarSize[2];} +var currViewMat=this.getViewMatrix();var dist=0;var step=(this._lastButton&2)?-1:1;step*=(this._deltaT*navi._vf.speed);var phi=2*Math.PI*this._deltaT*(this._pressX-this._lastX)/this._width;var theta=Math.PI*this._deltaT*(this._pressY-this._lastY)/this._height;if(this._needNavigationMatrixUpdate===true) +{this._needNavigationMatrixUpdate=false;this._rotMat=x3dom.fields.SFMatrix4f.identity();this._transMat=x3dom.fields.SFMatrix4f.identity();this._movement=new x3dom.fields.SFVec3f(0,0,0);var angleX=0;var angleY=Math.asin(currViewMat._02);var C=Math.cos(angleY);if(Math.abs(C)>0.0001){angleX=Math.atan2(-currViewMat._12/C,currViewMat._22/C);} +this._flyMat=currViewMat.inverse();this._from=this._flyMat.e3();this._at=this._from.subtract(this._flyMat.e2());if(navType==="helicopter") +this._at.y=this._from.y;if(navType.substr(0,5)!=="looka") +this._up=new x3dom.fields.SFVec3f(0,1,0);else +this._up=this._flyMat.e1();this._pitch=angleX*180/Math.PI;this._yaw=angleY*180/Math.PI;this._eyePos=this._from.negate();} +var tmpAt=null,tmpUp=null,tmpMat=null;var q,temp,fin;var lv,sv,up;if(navType==="game") +{this._pitch+=this._dy;this._yaw+=this._dx;if(this._pitch>=89)this._pitch=89;if(this._pitch<=-89)this._pitch=-89;if(this._yaw>=360)this._yaw-=360;if(this._yaw<0)this._yaw=360+this._yaw;this._dx=0;this._dy=0;var xMat=x3dom.fields.SFMatrix4f.rotationX(this._pitch/180*Math.PI);var yMat=x3dom.fields.SFMatrix4f.rotationY(this._yaw/180*Math.PI);var fPos=x3dom.fields.SFMatrix4f.translation(this._eyePos);this._flyMat=xMat.mult(yMat).mult(fPos);var flyMat=this._flyMat.inverse();var tmpFrom=flyMat.e3();tmpUp=new x3dom.fields.SFVec3f(0,-1,0);tmpAt=tmpFrom.add(tmpUp);tmpUp=flyMat.e0().cross(tmpUp).normalize();tmpMat=x3dom.fields.SFMatrix4f.lookAt(tmpFrom,tmpAt,tmpUp);tmpMat=tmpMat.inverse();this._scene._nameSpace.doc.ctx.pickValue(this,this._width/2,this._height/2,this._lastButton,tmpMat,this.getProjectionMatrix().mult(tmpMat));if(this._pickingInfo.pickObj) +{dist=this._pickingInfo.pickPos.subtract(tmpFrom).length();tmpFrom.y+=(avatarHeight-dist);flyMat.setTranslate(tmpFrom);this._eyePos=flyMat.e3().negate();this._flyMat=flyMat.inverse();this._pickingInfo.pickObj=null;} +this._scene.getViewpoint().setView(this._flyMat);return needNavAnim;} +else if(navType==="helicopter") +{var typeParams=navi.getTypeParams();if(this._lastButton&2) +{var stepUp=this._deltaT*this._deltaT*navi._vf.speed;stepUp*=0.1*(this._pressY-this._lastY)*Math.abs(this._pressY-this._lastY);typeParams[1]+=stepUp;navi.setTypeParams(typeParams);} +if(this._lastButton&1){step*=0.01*(this._pressY-this._lastY)*Math.abs(this._pressY-this._lastY);} +else{step=0;} +theta=typeParams[0];this._from.y=typeParams[1];this._at.y=this._from.y;q=x3dom.fields.Quaternion.axisAngle(this._up,phi);temp=q.toMatrix();fin=x3dom.fields.SFMatrix4f.translation(this._from);fin=fin.mult(temp);temp=x3dom.fields.SFMatrix4f.translation(this._from.negate());fin=fin.mult(temp);this._at=fin.multMatrixPnt(this._at);lv=this._at.subtract(this._from).normalize();sv=lv.cross(this._up).normalize();up=sv.cross(lv).normalize();lv=lv.multiply(step);this._from=this._from.add(lv);this._at=this._at.add(lv);q=x3dom.fields.Quaternion.axisAngle(sv,theta);temp=q.toMatrix();fin=x3dom.fields.SFMatrix4f.translation(this._from);fin=fin.mult(temp);temp=x3dom.fields.SFMatrix4f.translation(this._from.negate());fin=fin.mult(temp);var at=fin.multMatrixPnt(this._at);this._flyMat=x3dom.fields.SFMatrix4f.lookAt(this._from,at,up);this._scene.getViewpoint().setView(this._flyMat.inverse());return needNavAnim;} +q=x3dom.fields.Quaternion.axisAngle(this._up,phi);temp=q.toMatrix();fin=x3dom.fields.SFMatrix4f.translation(this._from);fin=fin.mult(temp);temp=x3dom.fields.SFMatrix4f.translation(this._from.negate());fin=fin.mult(temp);this._at=fin.multMatrixPnt(this._at);lv=this._at.subtract(this._from).normalize();sv=lv.cross(this._up).normalize();up=sv.cross(lv).normalize();q=x3dom.fields.Quaternion.axisAngle(sv,theta);temp=q.toMatrix();fin=x3dom.fields.SFMatrix4f.translation(this._from);fin=fin.mult(temp);temp=x3dom.fields.SFMatrix4f.translation(this._from.negate());fin=fin.mult(temp);this._at=fin.multMatrixPnt(this._at);if(navType.substr(0,5)!=="looka") +{var currProjMat=this.getProjectionMatrix();if(navType!=="freefly"){if(step<0){tmpMat=new x3dom.fields.SFMatrix4f();tmpMat.setValue(this._last_mat_view.e0(),this._last_mat_view.e1(),this._last_mat_view.e2().negate(),this._last_mat_view.e3());this._scene._nameSpace.doc.ctx.pickValue(this,this._width/2,this._height/2,this._lastButton,tmpMat,currProjMat.mult(tmpMat));} +else{this._scene._nameSpace.doc.ctx.pickValue(this,this._width/2,this._height/2,this._lastButton);} +if(this._pickingInfo.pickObj) +{dist=this._pickingInfo.pickPos.subtract(this._from).length();if(dist<=avatarRadius){step=0;}}} +lv=this._at.subtract(this._from).normalize().multiply(step);this._at=this._at.add(lv);this._from=this._from.add(lv);if(navType==="walk") +{tmpAt=this._from.addScaled(up,-1.0);tmpUp=sv.cross(up.negate()).normalize();tmpMat=x3dom.fields.SFMatrix4f.lookAt(this._from,tmpAt,tmpUp);tmpMat=tmpMat.inverse();this._scene._nameSpace.doc.ctx.pickValue(this,this._width/2,this._height/2,this._lastButton,tmpMat,currProjMat.mult(tmpMat));if(this._pickingInfo.pickObj) +{dist=this._pickingInfo.pickPos.subtract(this._from).length();this._at=this._at.add(up.multiply(avatarHeight-dist));this._from=this._from.add(up.multiply(avatarHeight-dist));}} +this._pickingInfo.pickObj=null;} +this._flyMat=x3dom.fields.SFMatrix4f.lookAt(this._from,this._at,up);this._scene.getViewpoint().setView(this._flyMat.inverse());} +return needNavAnim;};x3dom.Viewarea.prototype.moveFwd=function() +{var navi=this._scene.getNavigationInfo();if(navi.getType()==="game") +{var avatarRadius=0.25;var avatarHeight=1.6;if(navi._vf.avatarSize.length>2){avatarRadius=navi._vf.avatarSize[0];avatarHeight=navi._vf.avatarSize[1];} +var speed=5*this._deltaT*navi._vf.speed;var yRotRad=(this._yaw/180*Math.PI);var xRotRad=(this._pitch/180*Math.PI);var dist=0;var fMat=this._flyMat.inverse();this._scene._nameSpace.doc.ctx.pickValue(this,this._width/2,this._height/2,this._lastButton);if(this._pickingInfo.pickObj) +{dist=this._pickingInfo.pickPos.subtract(fMat.e3()).length();if(dist<=2*avatarRadius){} +else{this._eyePos.x-=Math.sin(yRotRad)*speed;this._eyePos.z+=Math.cos(yRotRad)*speed;this._eyePos.y+=Math.sin(xRotRad)*speed;}}}};x3dom.Viewarea.prototype.moveBwd=function() +{var navi=this._scene.getNavigationInfo();if(navi.getType()==="game") +{var speed=5*this._deltaT*navi._vf.speed;var yRotRad=(this._yaw/180*Math.PI);var xRotRad=(this._pitch/180*Math.PI);this._eyePos.x+=Math.sin(yRotRad)*speed;this._eyePos.z-=Math.cos(yRotRad)*speed;this._eyePos.y-=Math.sin(xRotRad)*speed;}};x3dom.Viewarea.prototype.strafeRight=function() +{var navi=this._scene.getNavigationInfo();if(navi.getType()==="game") +{var speed=5*this._deltaT*navi._vf.speed;var yRotRad=(this._yaw/180*Math.PI);this._eyePos.x-=Math.cos(yRotRad)*speed;this._eyePos.z-=Math.sin(yRotRad)*speed;}};x3dom.Viewarea.prototype.strafeLeft=function() +{var navi=this._scene.getNavigationInfo();if(navi.getType()==="game") +{var speed=5*this._deltaT*navi._vf.speed;var yRotRad=(this._yaw/180*Math.PI);this._eyePos.x+=Math.cos(yRotRad)*speed;this._eyePos.z+=Math.sin(yRotRad)*speed;}};x3dom.Viewarea.prototype.animateTo=function(target,prev,dur) +{var navi=this._scene.getNavigationInfo();if(x3dom.isa(target,x3dom.nodeTypes.X3DViewpointNode)){target=target.getViewMatrix().mult(target.getCurrentTransform().inverse());} +if(navi._vf.transitionType[0].toLowerCase()!=="teleport"&&navi.getType()!=="game") +{if(prev&&x3dom.isa(prev,x3dom.nodeTypes.X3DViewpointNode)){prev=prev.getViewMatrix().mult(prev.getCurrentTransform().inverse()).mult(this._transMat).mult(this._rotMat);this._mixer._beginTime=this._lastTS;if(arguments.length>=3){this._mixer._endTime=this._lastTS+dur;} +else{this._mixer._endTime=this._lastTS+navi._vf.transitionTime;} +this._mixer.setBeginMatrix(prev);this._mixer.setEndMatrix(target);this._scene.getViewpoint().setView(prev);} +else{this._scene.getViewpoint().setView(target);}} +else +{this._scene.getViewpoint().setView(target);} +this._rotMat=x3dom.fields.SFMatrix4f.identity();this._transMat=x3dom.fields.SFMatrix4f.identity();this._movement=new x3dom.fields.SFVec3f(0,0,0);this._needNavigationMatrixUpdate=true;};x3dom.Viewarea.prototype.getLights=function(){var enabledLights=[];for(var i=0;i<this._doc._nodeBag.lights.length;i++) +{if(this._doc._nodeBag.lights[i]._vf.on==true) +{enabledLights.push(this._doc._nodeBag.lights[i]);}} +return enabledLights;};x3dom.Viewarea.prototype.getLightsShadow=function(){var lights=this._doc._nodeBag.lights;for(var l=0;l<lights.length;l++){if(lights[l]._vf.shadowIntensity>0.0){return true;}} +return false;};x3dom.Viewarea.prototype.updateSpecialNavigation=function(viewpoint,mat_viewpoint){var navi=this._scene.getNavigationInfo();var navType=navi.getType();if(navType=="helicopter"&&!navi._heliUpdated) +{var typeParams=navi.getTypeParams();var theta=typeParams[0];var currViewMat=viewpoint.getViewMatrix().mult(mat_viewpoint.inverse()).inverse();this._from=currViewMat.e3();this._at=this._from.subtract(currViewMat.e2());this._up=new x3dom.fields.SFVec3f(0,1,0);this._from.y=typeParams[1];this._at.y=this._from.y;var sv=currViewMat.e0();var q=x3dom.fields.Quaternion.axisAngle(sv,theta);var temp=q.toMatrix();var fin=x3dom.fields.SFMatrix4f.translation(this._from);fin=fin.mult(temp);temp=x3dom.fields.SFMatrix4f.translation(this._from.negate());fin=fin.mult(temp);this._at=fin.multMatrixPnt(this._at);this._flyMat=x3dom.fields.SFMatrix4f.lookAt(this._from,this._at,this._up);this._scene.getViewpoint().setView(this._flyMat.inverse());navi._heliUpdated=true;}};x3dom.Viewarea.prototype.getViewpointMatrix=function() +{var viewpoint=this._scene.getViewpoint();var mat_viewpoint=viewpoint.getCurrentTransform();this.updateSpecialNavigation(viewpoint,mat_viewpoint);return viewpoint.getViewMatrix().mult(mat_viewpoint.inverse());};x3dom.Viewarea.prototype.getViewMatrix=function() +{return this.getViewpointMatrix().mult(this._transMat).mult(this._rotMat);};x3dom.Viewarea.prototype.getLightMatrix=function() +{var lights=this._doc._nodeBag.lights;var i,n=lights.length;if(n>0) +{var vol=this._scene.getVolume();if(vol.isValid()) +{var min=x3dom.fields.SFVec3f.MAX();var max=x3dom.fields.SFVec3f.MIN();vol.getBounds(min,max);var l_arr=[];var viewpoint=this._scene.getViewpoint();var fov=viewpoint.getFieldOfView();var dia=max.subtract(min);var dist1=(dia.y/2.0)/Math.tan(fov/2.0)+(dia.z/2.0);var dist2=(dia.x/2.0)/Math.tan(fov/2.0)+(dia.z/2.0);dia=min.add(dia.multiply(0.5));for(i=0;i<n;i++) +{if(x3dom.isa(lights[i],x3dom.nodeTypes.PointLight)){var wcLoc=lights[i].getCurrentTransform().multMatrixPnt(lights[i]._vf.location);dia=dia.subtract(wcLoc).normalize();} +else{var dir=lights[i].getCurrentTransform().multMatrixVec(lights[i]._vf.direction);dir=dir.normalize().negate();dia=dia.add(dir.multiply(1.2*(dist1>dist2?dist1:dist2)));} +l_arr[i]=lights[i].getViewMatrix(dia);} +return l_arr;}} +return[this.getViewMatrix()];};x3dom.Viewarea.prototype.getWCtoLCMatrix=function(lMat) +{var proj=this.getProjectionMatrix();var view;if(arguments.length===0){view=this.getLightMatrix()[0];} +else{view=lMat;} +return proj.mult(view);};x3dom.Viewarea.prototype.getWCtoLCMatricesPointLight=function(view,lightNode,mat_proj) +{var zNear=lightNode._vf.zNear;var zFar=lightNode._vf.zFar;var proj=this.getLightProjectionMatrix(view,zNear,zFar,false,mat_proj);proj._00=1;proj._11=1;var matrices=[];matrices[0]=proj.mult(view);var rotationMatrix;for(var i=1;i<=3;i++){rotationMatrix=x3dom.fields.SFMatrix4f.rotationY(i*Math.PI/2);matrices[i]=proj.mult(rotationMatrix.mult(view));} +rotationMatrix=x3dom.fields.SFMatrix4f.rotationX(Math.PI/2);matrices[4]=proj.mult(rotationMatrix.mult(view));rotationMatrix=x3dom.fields.SFMatrix4f.rotationX(3*Math.PI/2);matrices[5]=proj.mult(rotationMatrix.mult(view));return matrices;};x3dom.Viewarea.prototype.getWCtoLCMatricesCascaded=function(view,lightNode,mat_proj) +{var numCascades=Math.max(1,Math.min(lightNode._vf.shadowCascades,6));var splitFactor=Math.max(0,Math.min(lightNode._vf.shadowSplitFactor,1));var splitOffset=Math.max(0,Math.min(lightNode._vf.shadowSplitOffset,1));var isSpotLight=x3dom.isa(lightNode,x3dom.nodeTypes.SpotLight);var zNear=lightNode._vf.zNear;var zFar=lightNode._vf.zFar;var proj=this.getLightProjectionMatrix(view,zNear,zFar,true,mat_proj);if(isSpotLight){proj._00=1;proj._11=1;} +var viewProj=proj.mult(view);var matrices=[];if(numCascades==1){matrices[0]=viewProj;return matrices;} +var cascadeSplits=this.getShadowSplitDepths(numCascades,splitFactor,splitOffset,true,mat_proj);for(var i=0;i<numCascades;i++){var fittingMat=this.getLightFittingMatrix(viewProj,cascadeSplits[i],cascadeSplits[i+1],mat_proj);matrices[i]=fittingMat.mult(viewProj);} +return matrices;};x3dom.Viewarea.prototype.getLightProjectionMatrix=function(lMat,zNear,zFar,highPrecision,mat_proj) +{var proj=x3dom.fields.SFMatrix4f.copy(mat_proj);if(!highPrecision||zNear>0||zFar>0){var lightPos=lMat.inverse().e3();var nearScale=0.8;var farScale=1.2;var min=x3dom.fields.SFVec3f.copy(this._scene._lastMin);var max=x3dom.fields.SFVec3f.copy(this._scene._lastMax);var dia=max.subtract(min);var sRad=dia.length()/2;var sCenter=min.add(dia.multiply(0.5));var vDist=(lightPos.subtract(sCenter)).length();var near,far;if(sRad){if(vDist>sRad) +near=(vDist-sRad)*nearScale;else +near=1;far=(vDist+sRad)*farScale;} +if(zNear>0)near=zNear;if(zFar>0)far=zFar;proj._22=-(far+near)/(far-near);proj._23=-2.0*far*near/(far-near);return proj;} +else{var cropMatrix=this.getLightCropMatrix(proj.mult(lMat));return cropMatrix.mult(proj);}};x3dom.Viewarea.prototype.getProjectionMatrix=function() +{var viewpoint=this._scene.getViewpoint();return viewpoint.getProjectionMatrix(this._width/this._height);};x3dom.Viewarea.prototype.getViewfrustum=function(clipMat) +{var env=this._scene.getEnvironment();if(env._vf.frustumCulling==true) +{if(arguments.length==0){var proj=this.getProjectionMatrix();var view=this.getViewMatrix();return new x3dom.fields.FrustumVolume(proj.mult(view));} +else{return new x3dom.fields.FrustumVolume(clipMat);}} +return null;};x3dom.Viewarea.prototype.getWCtoCCMatrix=function() +{var view=this.getViewMatrix();var proj=this.getProjectionMatrix();return proj.mult(view);};x3dom.Viewarea.prototype.getCCtoWCMatrix=function() +{var mat=this.getWCtoCCMatrix();return mat.inverse();};x3dom.Viewarea.prototype.calcViewRay=function(x,y,mat) +{var cctowc=mat?mat:this.getCCtoWCMatrix();var rx=x/(this._width-1.0)*2.0-1.0;var ry=(this._height-1.0-y)/(this._height-1.0)*2.0-1.0;var from=cctowc.multFullMatrixPnt(new x3dom.fields.SFVec3f(rx,ry,-1));var at=cctowc.multFullMatrixPnt(new x3dom.fields.SFVec3f(rx,ry,1));var dir=at.subtract(from);return new x3dom.fields.Ray(from,dir);};x3dom.Viewarea.prototype.showAll=function(axis) +{if(axis===undefined) +axis="negZ";var scene=this._scene;scene.updateVolume();var min=x3dom.fields.SFVec3f.copy(scene._lastMin);var max=x3dom.fields.SFVec3f.copy(scene._lastMax);var x="x",y="y",z="z";var sign=1;var to,from=new x3dom.fields.SFVec3f(0,0,-1);switch(axis){case"posX":sign=-1;case"negX":z="x";x="y";y="z";to=new x3dom.fields.SFVec3f(sign,0,0);break;case"posY":sign=-1;case"negY":z="y";x="z";y="x";to=new x3dom.fields.SFVec3f(0,sign,0);break;case"posZ":sign=-1;case"negZ":default:to=new x3dom.fields.SFVec3f(0,0,-sign);break;} +var viewpoint=scene.getViewpoint();var fov=viewpoint.getFieldOfView();var dia=max.subtract(min);var diaz2=dia[z]/2.0,tanfov2=Math.tan(fov/2.0);var dist1=(dia[y]/2.0)/tanfov2+diaz2;var dist2=(dia[x]/2.0)/tanfov2+diaz2;dia=min.add(dia.multiply(0.5));dia[z]+=sign*(dist1>dist2?dist1:dist2)*1.01;var quat=x3dom.fields.Quaternion.rotateFromTo(from,to);var viewmat=quat.toMatrix();viewmat=viewmat.mult(x3dom.fields.SFMatrix4f.translation(dia.negate()));this.animateTo(viewmat,viewpoint);};x3dom.Viewarea.prototype.fit=function(min,max,updateCenterOfRotation) +{if(updateCenterOfRotation===undefined){updateCenterOfRotation=true;} +var dia2=max.subtract(min).multiply(0.5);var center=min.add(dia2);var bsr=dia2.length();var viewpoint=this._scene.getViewpoint();var fov=viewpoint.getFieldOfView();var viewmat=x3dom.fields.SFMatrix4f.copy(this.getViewMatrix());var rightDir=new x3dom.fields.SFVec3f(viewmat._00,viewmat._01,viewmat._02);var upDir=new x3dom.fields.SFVec3f(viewmat._10,viewmat._11,viewmat._12);var viewDir=new x3dom.fields.SFVec3f(viewmat._20,viewmat._21,viewmat._22);var tanfov2=Math.tan(fov/2.0);var dist=bsr/tanfov2;var eyePos=center.add(viewDir.multiply(dist));viewmat._03=-rightDir.dot(eyePos);viewmat._13=-upDir.dot(eyePos);viewmat._23=-viewDir.dot(eyePos);if(updateCenterOfRotation){viewpoint.setCenterOfRotation(center);} +if(x3dom.isa(viewpoint,x3dom.nodeTypes.OrthoViewpoint)) +{viewpoint._vf.fieldOfView[0]=-dist;viewpoint._vf.fieldOfView[1]=-dist;viewpoint._vf.fieldOfView[2]=dist;viewpoint._vf.fieldOfView[3]=dist;viewpoint._projMatrix=null;this.animateTo(viewmat,viewpoint,0);} +else +{this.animateTo(viewmat,viewpoint);}};x3dom.Viewarea.prototype.resetView=function() +{var navi=this._scene.getNavigationInfo();if(navi._vf.transitionType[0].toLowerCase()!=="teleport"&&navi.getType()!=="game") +{this._mixer._beginTime=this._lastTS;this._mixer._endTime=this._lastTS+navi._vf.transitionTime;this._mixer.setBeginMatrix(this.getViewMatrix());var target=this._scene.getViewpoint();target.resetView();target=target.getViewMatrix().mult(target.getCurrentTransform().inverse());this._mixer.setEndMatrix(target);} +else +{this._scene.getViewpoint().resetView();} +this.resetNavHelpers();navi._heliUpdated=false;};x3dom.Viewarea.prototype.resetNavHelpers=function() +{this._rotMat=x3dom.fields.SFMatrix4f.identity();this._transMat=x3dom.fields.SFMatrix4f.identity();this._movement=new x3dom.fields.SFVec3f(0,0,0);this._needNavigationMatrixUpdate=true;};x3dom.Viewarea.prototype.uprightView=function() +{var mat=this.getViewMatrix().inverse();var from=mat.e3();var at=from.subtract(mat.e2());var up=new x3dom.fields.SFVec3f(0,1,0);var s=mat.e2().cross(up).normalize();var v=s.cross(up).normalize();at=from.add(v);mat=x3dom.fields.SFMatrix4f.lookAt(from,at,up);mat=mat.inverse();this.animateTo(mat,this._scene.getViewpoint());};x3dom.Viewarea.prototype.callEvtHandler=function(node,eventType,event) +{if(!node||!node._xmlNode) +return null;try{var attrib=node._xmlNode[eventType];if(typeof(attrib)==="function"){attrib.call(node._xmlNode,event);} +else{var funcStr=node._xmlNode.getAttribute(eventType);var func=new Function('event',funcStr);func.call(node._xmlNode,event);} +var list=node._listeners[event.type];if(list){for(var it=0;it<list.length;it++){list[it].call(node._xmlNode,event);}}} +catch(e){x3dom.debug.logException(e);} +return event.cancelBubble;};x3dom.Viewarea.prototype.checkEvents=function(obj,x,y,buttonState,eventType) +{var that=this;var needRecurse=true;var childNode;var i;var target=(obj&&obj._xmlNode)?obj._xmlNode:{};var affectedPointingSensorsList=this._doc._nodeBag.affectedPointingSensors;var event={viewarea:that,target:target,type:eventType.substr(2,eventType.length-2),button:buttonState,layerX:x,layerY:y,worldX:that._pick.x,worldY:that._pick.y,worldZ:that._pick.z,normalX:that._pickNorm.x,normalY:that._pickNorm.y,normalZ:that._pickNorm.z,hitPnt:that._pick.toGL(),hitObject:target,shadowObjectId:that._pickingInfo.shadowObjectId,cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;},preventDefault:function(){this.cancelBubble=true;}};try{var anObj=obj;if(anObj&&anObj._xmlNode&&anObj._cf.geometry&&!anObj._xmlNode[eventType]&&!anObj._xmlNode.hasAttribute(eventType)&&!anObj._listeners[event.type]){anObj=anObj._cf.geometry.node;} +if(anObj&&that.callEvtHandler(anObj,eventType,event)===true){needRecurse=false;}} +catch(e){x3dom.debug.logException(e);} +var recurse=function(obj){Array.forEach(obj._parentNodes,function(node){if(node._xmlNode&&(node._xmlNode[eventType]||node._xmlNode.hasAttribute(eventType)||node._listeners[event.type])) +{if(that.callEvtHandler(node,eventType,event)===true){needRecurse=false;}} +if(buttonState==0&&affectedPointingSensorsList.length==0&&(eventType=='onmousemove'||eventType=='onmouseover'||eventType=='onmouseout')) +{for(i=0;i<node._childNodes.length;++i) +{childNode=node._childNodes[i];if(x3dom.isa(childNode,x3dom.nodeTypes.X3DPointingDeviceSensorNode)) +{affectedPointingSensorsList.push(childNode);}}} +if(x3dom.isa(node,x3dom.nodeTypes.Anchor)&&eventType==='onclick'){node.handleTouch();needRecurse=false;} +else if(needRecurse){recurse(node);}});};if(needRecurse&&obj){recurse(obj);} +return needRecurse;};x3dom.Viewarea.prototype._notifyAffectedPointingSensors=function(event) +{var i;var affectedPointingSensorsList=this._doc._nodeBag.affectedPointingSensors;if(affectedPointingSensorsList.length>0) +{if(event.type=='mousedown') +{for(i=0;i<affectedPointingSensorsList.length;++i) +{affectedPointingSensorsList[i].pointerPressedOverSibling(event);}} +else if(event.type=='mousemove') +{for(i=0;i<affectedPointingSensorsList.length;++i) +{affectedPointingSensorsList[i].pointerMoved(event);}} +else if(event.type=='mouseover') +{for(i=0;i<affectedPointingSensorsList.length;++i) +{affectedPointingSensorsList[i].pointerMovedOver(event);}} +else if(event.type=='mouseout') +{for(i=0;i<affectedPointingSensorsList.length;++i) +{affectedPointingSensorsList[i].pointerMovedOut(event);}}}} +x3dom.Viewarea.prototype.initMouseState=function() +{this._deltaT=0;this._dx=0;this._dy=0;this._lastX=-1;this._lastY=-1;this._pressX=-1;this._pressY=-1;this._lastButton=0;this._isMoving=false;this._needNavigationMatrixUpdate=true;};x3dom.Viewarea.prototype.initTurnTable=function(navi) +{var currViewMat=this.getViewMatrix();var viewpoint=this._scene.getViewpoint();var center=x3dom.fields.SFVec3f.copy(viewpoint.getCenterOfRotation());this._flyMat=currViewMat.inverse();this._from=this._flyMat.e3();this._at=center;this._up=this._flyMat.e1();this._flyMat=x3dom.fields.SFMatrix4f.lookAt(this._from,this._at,this._up);this._flyMat=this.calcOrbit(0,0,navi);var dur=0.2/navi._vf.speed;this.animateTo(this._flyMat.inverse(),viewpoint,dur);this.resetNavHelpers();};x3dom.Viewarea.prototype.onMousePress=function(x,y,buttonState) +{this._needNavigationMatrixUpdate=true;this.prepareEvents(x,y,buttonState,"onmousedown");this._pickingInfo.lastClickObj=this._pickingInfo.pickObj;this._pickingInfo.firstObj=this._pickingInfo.pickObj;this._dx=0;this._dy=0;this._lastX=x;this._lastY=y;this._pressX=x;this._pressY=y;this._lastButton=buttonState;this._isMoving=false;if(this._currentInputType==x3dom.InputTypes.NAVIGATION) +{var navi=this._scene.getNavigationInfo();if(navi.getType()==="turntable"){this.initTurnTable(navi);}}};x3dom.Viewarea.prototype.onMouseRelease=function(x,y,buttonState,prevButton) +{var i;var affectedPointingSensorsList=this._doc._nodeBag.affectedPointingSensors;for(i=0;i<affectedPointingSensorsList.length;++i) +{affectedPointingSensorsList[i].pointerReleased();} +this._doc._nodeBag.affectedPointingSensors=[];var tDist=3.0;var dir;var navi=this._scene.getNavigationInfo();var navType=navi.getType();if(this._scene._vf.pickMode.toLowerCase()!=="box"){this.prepareEvents(x,y,prevButton,"onmouseup");if(this._pickingInfo.pickObj&&this._pickingInfo.pickObj===this._pickingInfo.lastClickObj) +{this.prepareEvents(x,y,prevButton,"onclick");} +else if(!this._pickingInfo.pickObj&&!this._pickingInfo.lastClickObj&&!this._pickingInfo.firstObj) +{var eventType="backgroundClicked";try{if(this._scene._xmlNode&&(this._scene._xmlNode["on"+eventType]||this._scene._xmlNode.hasAttribute("on"+eventType)||this._scene._listeners[eventType])){var event={target:this._scene._xmlNode,type:eventType,button:prevButton,layerX:x,layerY:y,cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;},preventDefault:function(){this.cancelBubble=true;}};this._scene.callEvtHandler(("on"+eventType),event);}} +catch(e){x3dom.debug.logException("backgroundClicked: "+e);}}} +else{var t0=new Date().getTime();var line=this.calcViewRay(x,y);var isect=this._scene.doIntersect(line);var obj=line.hitObject;if(isect&&obj) +{this._pick.setValues(line.hitPoint);this.checkEvents(obj,x,y,buttonState,"onclick");x3dom.debug.logInfo("Hit '"+obj._xmlNode.localName+"/ "+ +obj._DEF+"' at dist="+line.dist.toFixed(4));x3dom.debug.logInfo("Ray hit at position "+this._pick);} +var t1=new Date().getTime()-t0;x3dom.debug.logInfo("Picking time (box): "+t1+"ms");if(!isect){dir=this.getViewMatrix().e2().negate();var u=dir.dot(line.pos.negate())/dir.dot(line.dir);this._pick=line.pos.add(line.dir.multiply(u));}} +this._pickingInfo.firstObj=null;if(this._currentInputType==x3dom.InputTypes.NAVIGATION&&(this._pickingInfo.pickObj||this._pickingInfo.shadowObjectId>=0)&&navType==="lookat"&&this._pressX===x&&this._pressY===y) +{var step=(this._lastButton&2)?-1:1;var dist=this._pickingInfo.pickPos.subtract(this._from).length()/tDist;var laMat=new x3dom.fields.SFMatrix4f();laMat.setValues(this.getViewMatrix());laMat=laMat.inverse();var from=laMat.e3();var at=from.subtract(laMat.e2());var up=laMat.e1();dir=this._pickingInfo.pickPos.subtract(from);var len=dir.length();dir=dir.normalize();var newAt=from.addScaled(dir,len);var s=dir.cross(up).normalize();dir=s.cross(up).normalize();if(step<0){dist=(0.5+len+dist)*2;} +var newFrom=newAt.addScaled(dir,dist);laMat=x3dom.fields.SFMatrix4f.lookAt(newFrom,newAt,up);laMat=laMat.inverse();dist=newFrom.subtract(from).length();var dur=Math.max(0.5,Math.log((1+dist)/navi._vf.speed));this.animateTo(laMat,this._scene.getViewpoint(),dur);} +this._dx=0;this._dy=0;this._lastX=x;this._lastY=y;this._lastButton=buttonState;this._isMoving=false;};x3dom.Viewarea.prototype.onMouseOver=function(x,y,buttonState) +{this._dx=0;this._dy=0;this._lastButton=0;this._isMoving=false;this._lastX=x;this._lastY=y;this._deltaT=0;};x3dom.Viewarea.prototype.onMouseOut=function(x,y,buttonState) +{this._dx=0;this._dy=0;this._lastButton=0;this._isMoving=false;this._lastX=x;this._lastY=y;this._deltaT=0;};x3dom.Viewarea.prototype.onDoubleClick=function(x,y) +{if(this._doc.properties.getProperty('disableDoubleClick','false')==='true'){return;} +var navi=this._scene.getNavigationInfo();if(navi.getType()=="none"){return;} +var pickMode=this._scene._vf.pickMode.toLowerCase();if((pickMode=="color"||pickMode=="texcoord")){return;} +var viewpoint=this._scene.getViewpoint();viewpoint.setCenterOfRotation(this._pick);x3dom.debug.logInfo("New center of Rotation: "+this._pick);var mat=this.getViewMatrix().inverse();var from=mat.e3();var at=this._pick;var up=mat.e1();var norm=mat.e0().cross(up).normalize();var dist=norm.dot(this._pick.subtract(from));from=at.addScaled(norm,-dist);mat=x3dom.fields.SFMatrix4f.lookAt(from,at,up);x3dom.debug.logInfo("New camera position: "+from);this.animateTo(mat.inverse(),viewpoint);};x3dom.Viewarea.prototype.handleMoveEvt=function(x,y,buttonState) +{if(buttonState==0) +{this._doc._nodeBag.affectedPointingSensors=[];} +this.prepareEvents(x,y,buttonState,"onmousemove");if(this._pickingInfo.pickObj!==this._pickingInfo.lastObj) +{if(this._pickingInfo.lastObj){var obj=this._pickingInfo.pickObj;this._pickingInfo.pickObj=this._pickingInfo.lastObj;this.prepareEvents(x,y,buttonState,"onmouseout");this._pickingInfo.pickObj=obj;} +if(this._pickingInfo.pickObj){this.prepareEvents(x,y,buttonState,"onmouseover");} +this._pickingInfo.lastObj=this._pickingInfo.pickObj;}};x3dom.Viewarea.prototype.onMove=function(x,y,buttonState) +{this.handleMoveEvt(x,y,buttonState);if(this._lastX<0||this._lastY<0){this._lastX=x;this._lastY=y;} +this._dx=x-this._lastX;this._dy=y-this._lastY;this._lastX=x;this._lastY=y;};x3dom.Viewarea.prototype.onMoveView=function(translation,rotation) +{if(this._currentInputType==x3dom.InputTypes.NAVIGATION) +{var navi=this._scene.getNavigationInfo();var viewpoint=this._scene.getViewpoint();if(navi.getType()==="examine") +{if(translation) +{var distance=(this._scene._lastMax.subtract(this._scene._lastMin)).length();distance=((distance<x3dom.fields.Eps)?1:distance)*navi._vf.speed;translation=translation.multiply(distance);this._movement=this._movement.add(translation);this._transMat=viewpoint.getViewMatrix().inverse().mult(x3dom.fields.SFMatrix4f.translation(this._movement)).mult(viewpoint.getViewMatrix());} +if(rotation) +{var center=viewpoint.getCenterOfRotation();var mat=this.getViewMatrix();mat.setTranslate(new x3dom.fields.SFVec3f(0,0,0));this._rotMat=this._rotMat.mult(x3dom.fields.SFMatrix4f.translation(center)).mult(mat.inverse()).mult(rotation).mult(mat).mult(x3dom.fields.SFMatrix4f.translation(center.negate()));} +this._isMoving=true;}}};x3dom.Viewarea.prototype.onDrag=function(x,y,buttonState) +{this.handleMoveEvt(x,y,buttonState);if(this._currentInputType==x3dom.InputTypes.NAVIGATION) +{var navi=this._scene.getNavigationInfo();var navType=navi.getType();var navRestrict=navi.getExplorationMode();if(navType==="none"||navRestrict==0){return;} +var viewpoint=this._scene.getViewpoint();var dx=x-this._lastX;var dy=y-this._lastY;var d,vec,cor,mat=null;var alpha,beta;buttonState=((navRestrict&buttonState)!=buttonState)?navRestrict:buttonState;if(navType==="examine") +{if(buttonState&1) +{alpha=(dy*2*Math.PI)/this._width;beta=(dx*2*Math.PI)/this._height;mat=this.getViewMatrix();var mx=x3dom.fields.SFMatrix4f.rotationX(alpha);var my=x3dom.fields.SFMatrix4f.rotationY(beta);var center=viewpoint.getCenterOfRotation();mat.setTranslate(new x3dom.fields.SFVec3f(0,0,0));this._rotMat=this._rotMat.mult(x3dom.fields.SFMatrix4f.translation(center)).mult(mat.inverse()).mult(mx).mult(my).mult(mat).mult(x3dom.fields.SFMatrix4f.translation(center.negate()));} +if(buttonState&4) +{d=(this._scene._lastMax.subtract(this._scene._lastMin)).length();d=((d<x3dom.fields.Eps)?1:d)*navi._vf.speed;vec=new x3dom.fields.SFVec3f(d*dx/this._width,d*(-dy)/this._height,0);this._movement=this._movement.add(vec);mat=this.getViewpointMatrix().mult(this._transMat);this._transMat=mat.inverse().mult(x3dom.fields.SFMatrix4f.translation(this._movement)).mult(mat);} +if(buttonState&2) +{d=(this._scene._lastMax.subtract(this._scene._lastMin)).length();d=((d<x3dom.fields.Eps)?1:d)*navi._vf.speed;vec=new x3dom.fields.SFVec3f(0,0,d*(dx+dy)/this._height);if(x3dom.isa(viewpoint,x3dom.nodeTypes.OrthoViewpoint)) +{viewpoint._vf.fieldOfView[0]+=vec.z;viewpoint._vf.fieldOfView[1]+=vec.z;viewpoint._vf.fieldOfView[2]-=vec.z;viewpoint._vf.fieldOfView[3]-=vec.z;viewpoint._projMatrix=null;} +else +{this._movement=this._movement.add(vec);mat=this.getViewpointMatrix().mult(this._transMat);this._transMat=mat.inverse().mult(x3dom.fields.SFMatrix4f.translation(this._movement)).mult(mat);}} +this._isMoving=true;} +else if(navType==="turntable") +{if(buttonState&1) +{alpha=(dy*2*Math.PI)/this._height;beta=(dx*2*Math.PI)/this._width;this._flyMat=this.calcOrbit(alpha,beta,navi);viewpoint.setView(this._flyMat.inverse());} +else if(buttonState&2) +{d=(this._scene._lastMax.subtract(this._scene._lastMin)).length();d=((d<x3dom.fields.Eps)?1:d)*navi._vf.speed;this._up=this._flyMat.e1();this._from=this._flyMat.e3();cor=viewpoint.getCenterOfRotation();var lastDir=cor.subtract(this._from);var lastDirL=lastDir.length();lastDir=lastDir.normalize();var zoomAmount=d*(dx+dy)/this._height;if(navi._vf.typeParams.length>=5&&navi._vf.typeParams[4]!=0) +{var newDist=Math.min(zoomAmount,lastDirL-0.01);this._from=this._from.addScaled(lastDir,newDist);} +else +{var diff=zoomAmount-lastDirL+0.01;if(diff>=0){cor=cor.addScaled(lastDir,diff);viewpoint.setCenterOfRotation(cor);} +this._from=this._from.addScaled(lastDir,zoomAmount);} +this._from=this._from.addScaled(lastDir,zoomAmount);this._flyMat=x3dom.fields.SFMatrix4f.lookAt(this._from,cor,this._up);viewpoint.setView(this._flyMat.inverse());} +else if(buttonState&4) +{d=(this._scene._lastMax.subtract(this._scene._lastMin)).length();d=((d<x3dom.fields.Eps)?1:d)*navi._vf.speed*0.75;var tx=-d*dx/this._width;var ty=d*dy/this._height;this._up=this._flyMat.e1();this._from=this._flyMat.e3();var s=this._flyMat.e0();this._from=this._from.addScaled(this._up,ty);this._from=this._from.addScaled(s,tx);cor=viewpoint.getCenterOfRotation();cor=cor.addScaled(this._up,ty);cor=cor.addScaled(s,tx);viewpoint.setCenterOfRotation(cor);this._flyMat=x3dom.fields.SFMatrix4f.lookAt(this._from,cor,this._up);viewpoint.setView(this._flyMat.inverse());} +this._isMoving=true;}} +this._dx=dx;this._dy=dy;this._lastX=x;this._lastY=y;};x3dom.Viewarea.prototype.calcOrbit=function(alpha,beta,navi) +{this._up=this._flyMat.e1();this._from=this._flyMat.e3();var offset=this._from.subtract(this._at);var phi=Math.atan2(offset.x,offset.z);var theta=Math.atan2(Math.sqrt(offset.x*offset.x+offset.z*offset.z),offset.y);phi-=Math.min(beta,0.1);theta-=Math.min(alpha,0.1);var typeParams=navi.getTypeParams();theta=Math.max(typeParams[2],Math.min(typeParams[3],theta));var radius=offset.length();var rSinPhi=radius*Math.sin(theta);offset.x=rSinPhi*Math.sin(phi);offset.y=radius*Math.cos(theta);offset.z=rSinPhi*Math.cos(phi);offset=this._at.add(offset);theta-=Math.PI/2;var sinPhi=Math.sin(theta);var cosPhi=Math.cos(theta);var up=new x3dom.fields.SFVec3f(sinPhi*Math.sin(phi),cosPhi,sinPhi*Math.cos(phi));if(up.y<0) +up=up.negate();return x3dom.fields.SFMatrix4f.lookAt(offset,this._at,up);};x3dom.Viewarea.prototype.prepareEvents=function(x,y,buttonState,eventType) +{var affectedPointingSensorsList=this._doc._nodeBag.affectedPointingSensors;var pickMode=this._scene._vf.pickMode.toLowerCase();var avoidTraversal=(pickMode.indexOf("idbuf")==0||pickMode=="color"||pickMode=="texcoord");var obj=null;if(avoidTraversal){obj=this._pickingInfo.pickObj;if(obj){this._pick.setValues(this._pickingInfo.pickPos);this._pickNorm.setValues(this._pickingInfo.pickNorm);this.checkEvents(obj,x,y,buttonState,eventType);if(eventType==="onclick"){if(obj._xmlNode) +x3dom.debug.logInfo("Hit \""+obj._xmlNode.localName+"/ "+obj._DEF+"\"");x3dom.debug.logInfo("Ray hit at position "+this._pick);}}} +var event={viewarea:this,target:{},type:eventType.substr(2,eventType.length-2),button:buttonState,layerX:x,layerY:y,worldX:this._pick.x,worldY:this._pick.y,worldZ:this._pick.z,normalX:this._pickNorm.x,normalY:this._pickNorm.y,normalZ:this._pickNorm.z,hitPnt:this._pick.toGL(),hitObject:(obj&&obj._xmlNode)?obj._xmlNode:null,shadowObjectId:this._pickingInfo.shadowObjectId,cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;},preventDefault:function(){this.cancelBubble=true;}};this._notifyAffectedPointingSensors(event);if(affectedPointingSensorsList.length>0) +{this._currentInputType=x3dom.InputTypes.INTERACTION;} +else +{this._currentInputType=x3dom.InputTypes.NAVIGATION;}};x3dom.Viewarea.prototype.getRenderMode=function() +{return this._points;};x3dom.Viewarea.prototype.getShadowedLights=function() +{var shadowedLights=[];var shadowIndex=0;var slights=this.getLights();for(var i=0;i<slights.length;i++){if(slights[i]._vf.shadowIntensity>0.0){shadowedLights[shadowIndex]=slights[i];shadowIndex++;}} +return shadowedLights;};x3dom.Viewarea.prototype.getShadowSplitDepths=function(numCascades,splitFactor,splitOffset,postProject,mat_proj) +{var logSplit;var practSplit=[];var viewPoint=this._scene.getViewpoint();var zNear=viewPoint.getNear();var zFar=viewPoint.getFar();practSplit[0]=zNear;zNear=zNear+splitOffset*(zFar-zNear)/10;for(var i=1;i<numCascades;i++){logSplit=zNear*Math.pow((zFar/zNear),i/numCascades);practSplit[i]=splitFactor*logSplit+(1-splitFactor)*(zNear+i/(numCascades*(zNear-zFar)));} +practSplit[numCascades]=zFar;if(!postProject) +return practSplit;var postProj=[];for(var j=0;j<=numCascades;j++){postProj[j]=mat_proj.multFullMatrixPnt(new x3dom.fields.SFVec3f(0,0,-practSplit[j])).z;} +return postProj;};x3dom.Viewarea.prototype.getLightCropMatrix=function(WCToLCMatrix) +{var sceneMin=x3dom.fields.SFVec3f.copy(this._scene._lastMin);var sceneMax=x3dom.fields.SFVec3f.copy(this._scene._lastMax);var sceneCorners=[];sceneCorners[0]=new x3dom.fields.SFVec3f(sceneMin.x,sceneMin.y,sceneMin.z);sceneCorners[1]=new x3dom.fields.SFVec3f(sceneMin.x,sceneMin.y,sceneMax.z);sceneCorners[2]=new x3dom.fields.SFVec3f(sceneMin.x,sceneMax.y,sceneMin.z);sceneCorners[3]=new x3dom.fields.SFVec3f(sceneMin.x,sceneMax.y,sceneMax.z);sceneCorners[4]=new x3dom.fields.SFVec3f(sceneMax.x,sceneMin.y,sceneMin.z);sceneCorners[5]=new x3dom.fields.SFVec3f(sceneMax.x,sceneMin.y,sceneMax.z);sceneCorners[6]=new x3dom.fields.SFVec3f(sceneMax.x,sceneMax.y,sceneMin.z);sceneCorners[7]=new x3dom.fields.SFVec3f(sceneMax.x,sceneMax.y,sceneMax.z);var i;for(i=0;i<8;i++){sceneCorners[i]=WCToLCMatrix.multFullMatrixPnt(sceneCorners[i]);} +var minScene=x3dom.fields.SFVec3f.copy(sceneCorners[0]);var maxScene=x3dom.fields.SFVec3f.copy(sceneCorners[0]);for(i=1;i<8;i++){minScene.z=Math.min(sceneCorners[i].z,minScene.z);maxScene.z=Math.max(sceneCorners[i].z,maxScene.z);} +var scaleZ=2.0/(maxScene.z-minScene.z);var offsetZ=-(scaleZ*(maxScene.z+minScene.z))/2.0;var cropMatrix=x3dom.fields.SFMatrix4f.identity();cropMatrix._22=scaleZ;cropMatrix._23=offsetZ;return cropMatrix;};x3dom.Viewarea.prototype.getLightFittingMatrix=function(WCToLCMatrix,zNear,zFar,mat_proj) +{var mat_view=this.getViewMatrix();var mat_view_proj=mat_proj.mult(mat_view);var mat_view_proj_inverse=mat_view_proj.inverse();var frustumCorners=[];frustumCorners[0]=new x3dom.fields.SFVec3f(-1,-1,zFar);frustumCorners[1]=new x3dom.fields.SFVec3f(-1,-1,zNear);frustumCorners[2]=new x3dom.fields.SFVec3f(-1,1,zFar);frustumCorners[3]=new x3dom.fields.SFVec3f(-1,1,zNear);frustumCorners[4]=new x3dom.fields.SFVec3f(1,-1,zFar);frustumCorners[5]=new x3dom.fields.SFVec3f(1,-1,zNear);frustumCorners[6]=new x3dom.fields.SFVec3f(1,1,zFar);frustumCorners[7]=new x3dom.fields.SFVec3f(1,1,zNear);var i;for(i=0;i<8;i++){frustumCorners[i]=mat_view_proj_inverse.multFullMatrixPnt(frustumCorners[i]);frustumCorners[i]=WCToLCMatrix.multFullMatrixPnt(frustumCorners[i]);} +var minFrustum=x3dom.fields.SFVec3f.copy(frustumCorners[0]);var maxFrustum=x3dom.fields.SFVec3f.copy(frustumCorners[0]);for(i=1;i<8;i++){minFrustum.x=Math.min(frustumCorners[i].x,minFrustum.x);minFrustum.y=Math.min(frustumCorners[i].y,minFrustum.y);minFrustum.z=Math.min(frustumCorners[i].z,minFrustum.z);maxFrustum.x=Math.max(frustumCorners[i].x,maxFrustum.x);maxFrustum.y=Math.max(frustumCorners[i].y,maxFrustum.y);maxFrustum.z=Math.max(frustumCorners[i].z,maxFrustum.z);} +function clip(min,max) +{var xMin=min.x;var yMin=min.y;var zMin=min.z;var xMax=max.x;var yMax=max.y;var zMax=max.z;if(xMin>1.0||xMax<-1.0){xMin=-1.0;xMax=1.0;}else{xMin=Math.max(xMin,-1.0);xMax=Math.min(xMax,1.0);} +if(yMin>1.0||yMax<-1.0){yMin=-1.0;yMax=1.0;}else{yMin=Math.max(yMin,-1.0);yMax=Math.min(yMax,1.0);} +if(zMin>1.0||zMax<-1.0){zMin=-1.0;zMax=1.0;}else{zMin=Math.max(zMin,-1.0);zMax=Math.min(zMax,1.0);} +var minValues=new x3dom.fields.SFVec3f(xMin,yMin,zMin);var maxValues=new x3dom.fields.SFVec3f(xMax,yMax,zMax);return new x3dom.fields.BoxVolume(minValues,maxValues);} +var frustumBB=clip(minFrustum,maxFrustum);var scaleX=2.0/(frustumBB.max.x-frustumBB.min.x);var scaleY=2.0/(frustumBB.max.y-frustumBB.min.y);var offsetX=-(scaleX*(frustumBB.max.x+frustumBB.min.x))/2.0;var offsetY=-(scaleY*(frustumBB.max.y+frustumBB.min.y))/2.0;var fittingMatrix=x3dom.fields.SFMatrix4f.identity();fittingMatrix._00=scaleX;fittingMatrix._11=scaleY;fittingMatrix._03=offsetX;fittingMatrix._13=offsetY;return fittingMatrix;};x3dom.Mesh=function(parent) +{this._parent=parent;this._vol=new x3dom.fields.BoxVolume();this._invalidate=true;this._numFaces=0;this._numCoords=0;this._primType='TRIANGLES';this._positions=[];this._normals=[];this._texCoords=[];this._colors=[];this._indices=[];this._positions[0]=[];this._normals[0]=[];this._texCoords[0]=[];this._colors[0]=[];this._indices[0]=[];};x3dom.Mesh.prototype._dynamicFields={};x3dom.Mesh.prototype._numPosComponents=3;x3dom.Mesh.prototype._numTexComponents=2;x3dom.Mesh.prototype._numColComponents=3;x3dom.Mesh.prototype._numNormComponents=3;x3dom.Mesh.prototype._lit=true;x3dom.Mesh.prototype._vol=null;x3dom.Mesh.prototype._invalidate=true;x3dom.Mesh.prototype._numFaces=0;x3dom.Mesh.prototype._numCoords=0;x3dom.Mesh.prototype.setMeshData=function(positions,normals,texCoords,colors,indices) +{this._positions[0]=positions;this._normals[0]=normals;this._texCoords[0]=texCoords;this._colors[0]=colors;this._indices[0]=indices;this._invalidate=true;this._numFaces=this._indices[0].length/3;this._numCoords=this._positions[0].length/3;};x3dom.Mesh.prototype.getVolume=function() +{if(this._invalidate==true&&!this._vol.isValid()) +{var coords=this._positions[0];var n=coords.length;if(n>3) +{var initVal=new x3dom.fields.SFVec3f(coords[0],coords[1],coords[2]);this._vol.setBounds(initVal,initVal);for(var i=3;i<n;i+=3) +{if(this._vol.min.x>coords[i]){this._vol.min.x=coords[i];} +if(this._vol.min.y>coords[i+1]){this._vol.min.y=coords[i+1];} +if(this._vol.min.z>coords[i+2]){this._vol.min.z=coords[i+2];} +if(this._vol.max.x<coords[i]){this._vol.max.x=coords[i];} +if(this._vol.max.y<coords[i+1]){this._vol.max.y=coords[i+1];} +if(this._vol.max.z<coords[i+2]){this._vol.max.z=coords[i+2];}} +this._invalidate=false;}} +return this._vol;};x3dom.Mesh.prototype.invalidate=function() +{this._invalidate=true;this._vol.invalidate();};x3dom.Mesh.prototype.isValid=function() +{return this._vol.isValid();};x3dom.Mesh.prototype.getCenter=function() +{return this.getVolume().getCenter();};x3dom.Mesh.prototype.getDiameter=function() +{return this.getVolume().getDiameter();};x3dom.Mesh.prototype.doIntersect=function(line) +{var vol=this.getVolume();var isect=line.intersect(vol.min,vol.max);if(isect&&line.enter<line.dist) +{line.dist=line.enter;line.hitObject=this._parent;line.hitPoint=line.pos.add(line.dir.multiply(line.enter));} +return isect;};x3dom.Mesh.prototype.calcNormals=function(creaseAngle,ccw) +{if(ccw===undefined) +ccw=true;var multInd=this._multiIndIndices&&this._multiIndIndices.length;var idxs=multInd?this._multiIndIndices:this._indices[0];var coords=this._positions[0];var vertNormals=[];var vertFaceNormals=[];var i,j,m=coords.length;var a,b,n=null;var num=(this._posSize!==undefined&&this._posSize>m)?this._posSize/3:m/3;num=3*((num-Math.floor(num)>0)?Math.floor(num+1):num);for(i=0;i<num;++i){vertFaceNormals[i]=[];} +num=idxs.length;for(i=0;i<num;i+=3){var ind_i0,ind_i1,ind_i2;var t;if(!multInd){ind_i0=idxs[i]*3;ind_i1=idxs[i+1]*3;ind_i2=idxs[i+2]*3;t=new x3dom.fields.SFVec3f(coords[ind_i1],coords[ind_i1+1],coords[ind_i1+2]);a=new x3dom.fields.SFVec3f(coords[ind_i0],coords[ind_i0+1],coords[ind_i0+2]).subtract(t);b=t.subtract(new x3dom.fields.SFVec3f(coords[ind_i2],coords[ind_i2+1],coords[ind_i2+2]));ind_i0=i*3;ind_i1=(i+1)*3;ind_i2=(i+2)*3;} +else{ind_i0=i*3;ind_i1=(i+1)*3;ind_i2=(i+2)*3;t=new x3dom.fields.SFVec3f(coords[ind_i1],coords[ind_i1+1],coords[ind_i1+2]);a=new x3dom.fields.SFVec3f(coords[ind_i0],coords[ind_i0+1],coords[ind_i0+2]).subtract(t);b=t.subtract(new x3dom.fields.SFVec3f(coords[ind_i2],coords[ind_i2+1],coords[ind_i2+2]));} +n=a.cross(b).normalize();if(!ccw) +n=n.negate();if(creaseAngle<=x3dom.fields.Eps){vertNormals[ind_i0]=vertNormals[ind_i1]=vertNormals[ind_i2]=n.x;vertNormals[ind_i0+1]=vertNormals[ind_i1+1]=vertNormals[ind_i2+1]=n.y;vertNormals[ind_i0+2]=vertNormals[ind_i1+2]=vertNormals[ind_i2+2]=n.z;} +else{vertFaceNormals[idxs[i]].push(n);vertFaceNormals[idxs[i+1]].push(n);vertFaceNormals[idxs[i+2]].push(n);}} +if(creaseAngle>x3dom.fields.Eps) +{for(i=0;i<m;i+=3){var iThird=i/3;var arr;if(!multInd){arr=vertFaceNormals[iThird];} +else{arr=vertFaceNormals[idxs[iThird]];} +num=arr.length;n=new x3dom.fields.SFVec3f(0,0,0);for(j=0;j<num;++j){n=n.add(arr[j]);} +n=n.normalize();vertNormals[i]=n.x;vertNormals[i+1]=n.y;vertNormals[i+2]=n.z;}} +this._normals[0]=vertNormals;};x3dom.Mesh.prototype.splitMesh=function(primStride,checkMultiIndIndices) +{var pStride;var isMultiInd;if(typeof primStride===undefined){pStride=3;}else{pStride=primStride;} +if(typeof checkMultiIndIndices===undefined){checkMultiIndIndices=false;} +var MAX=x3dom.Utils.maxIndexableCoords;MAX=Math.floor(MAX/pStride)*pStride;if(this._positions[0].length/3<=MAX&&!checkMultiIndIndices){return;} +if(checkMultiIndIndices){isMultiInd=this._multiIndIndices&&this._multiIndIndices.length;}else{isMultiInd=false;} +var positions=this._positions[0];var normals=this._normals[0];var texCoords=this._texCoords[0];var colors=this._colors[0];var indices=isMultiInd?this._multiIndIndices:this._indices[0];var i=0;do +{this._positions[i]=[];this._normals[i]=[];this._texCoords[i]=[];this._colors[i]=[];this._indices[i]=[];var k=(indices.length-((i+1)*MAX)>=0);if(k){this._indices[i]=indices.slice(i*MAX,(i+1)*MAX);}else{this._indices[i]=indices.slice(i*MAX);} +if(!isMultiInd){if(i){var m=i*MAX;for(var j=0,l=this._indices[i].length;j<l;j++){this._indices[i][j]-=m;}}}else{for(var j=0,l=this._indices[i].length;j<l;j++){this._indices[i][j]=j;}} +if(k){this._positions[i]=positions.slice(i*MAX*3,3*(i+1)*MAX);}else{this._positions[i]=positions.slice(i*MAX*3);} +if(normals.length){if(k){this._normals[i]=normals.slice(i*MAX*3,3*(i+1)*MAX);}else{this._normals[i]=normals.slice(i*MAX*3);}} +if(texCoords.length){if(k){this._texCoords[i]=texCoords.slice(i*MAX*this._numTexComponents,this._numTexComponents*(i+1)*MAX);}else{this._texCoords[i]=texCoords.slice(i*MAX*this._numTexComponents);}} +if(colors.length){if(k){this._colors[i]=colors.slice(i*MAX*this._numColComponents,this._numColComponents*(i+1)*MAX);}else{this._colors[i]=colors.slice(i*MAX*this._numColComponents);}}} +while(positions.length>++i*MAX*3);};x3dom.Mesh.prototype.calcTexCoords=function(mode) +{this._texCoords[0]=[];if(mode.toLowerCase()==="sphere-local") +{for(var i=0,j=0,n=this._normals[0].length;i<n;i+=3) +{this._texCoords[0][j++]=0.5+this._normals[0][i]/2.0;this._texCoords[0][j++]=0.5+this._normals[0][i+1]/2.0;}} +else +{var min=new x3dom.fields.SFVec3f(0,0,0),max=new x3dom.fields.SFVec3f(0,0,0);var vol=this.getVolume();vol.getBounds(min,max);var dia=max.subtract(min);var S=0,T=1;if(dia.x>=dia.y) +{if(dia.x>=dia.z) +{S=0;T=dia.y>=dia.z?1:2;} +else +{S=2;T=0;}} +else +{if(dia.y>=dia.z) +{S=1;T=dia.x>=dia.z?0:2;} +else +{S=2;T=1;}} +var sDenom=1,tDenom=1;var sMin=0,tMin=0;switch(S){case 0:sDenom=dia.x;sMin=min.x;break;case 1:sDenom=dia.y;sMin=min.y;break;case 2:sDenom=dia.z;sMin=min.z;break;} +switch(T){case 0:tDenom=dia.x;tMin=min.x;break;case 1:tDenom=dia.y;tMin=min.y;break;case 2:tDenom=dia.z;tMin=min.z;break;} +for(var k=0,l=0,m=this._positions[0].length;k<m;k+=3) +{this._texCoords[0][l++]=(this._positions[0][k+S]-sMin)/sDenom;this._texCoords[0][l++]=(this._positions[0][k+T]-tMin)/tDenom;}}};if(typeof x3dom==="undefined") +{x3dom={extend:function(f){function G(){} +G.prototype=f.prototype||f;return new G();},debug:{logInfo:function(msg){console.log(msg);},logWarning:function(msg){console.warn(msg);},logError:function(msg){console.error(msg);}}};if(!Array.map){Array.map=function(array,fun,thisp){var len=array.length;var res=[];for(var i=0;i<len;i++){if(i in array){res[i]=fun.call(thisp,array[i],i,array);}} +return res;};} +console.log("Using x3dom fields.js as standalone math and/or base types library.");} +x3dom.fields={};var VecMath=x3dom.fields;x3dom.fields.Eps=0.000001;x3dom.fields.SFMatrix4f=function(_00,_01,_02,_03,_10,_11,_12,_13,_20,_21,_22,_23,_30,_31,_32,_33) +{if(arguments.length===0){this._00=1;this._01=0;this._02=0;this._03=0;this._10=0;this._11=1;this._12=0;this._13=0;this._20=0;this._21=0;this._22=1;this._23=0;this._30=0;this._31=0;this._32=0;this._33=1;} +else{this._00=_00;this._01=_01;this._02=_02;this._03=_03;this._10=_10;this._11=_11;this._12=_12;this._13=_13;this._20=_20;this._21=_21;this._22=_22;this._23=_23;this._30=_30;this._31=_31;this._32=_32;this._33=_33;}};x3dom.fields.SFMatrix4f.prototype.e0=function(){var baseVec=new x3dom.fields.SFVec3f(this._00,this._10,this._20);return baseVec.normalize();};x3dom.fields.SFMatrix4f.prototype.e1=function(){var baseVec=new x3dom.fields.SFVec3f(this._01,this._11,this._21);return baseVec.normalize();};x3dom.fields.SFMatrix4f.prototype.e2=function(){var baseVec=new x3dom.fields.SFVec3f(this._02,this._12,this._22);return baseVec.normalize();};x3dom.fields.SFMatrix4f.prototype.e3=function(){return new x3dom.fields.SFVec3f(this._03,this._13,this._23);};x3dom.fields.SFMatrix4f.copy=function(that){return new x3dom.fields.SFMatrix4f(that._00,that._01,that._02,that._03,that._10,that._11,that._12,that._13,that._20,that._21,that._22,that._23,that._30,that._31,that._32,that._33);};x3dom.fields.SFMatrix4f.prototype.copy=function(){return x3dom.fields.SFMatrix4f.copy(this);};x3dom.fields.SFMatrix4f.identity=function(){return new x3dom.fields.SFMatrix4f(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);};x3dom.fields.SFMatrix4f.zeroMatrix=function(){return new x3dom.fields.SFMatrix4f(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);};x3dom.fields.SFMatrix4f.translation=function(vec){return new x3dom.fields.SFMatrix4f(1,0,0,vec.x,0,1,0,vec.y,0,0,1,vec.z,0,0,0,1);};x3dom.fields.SFMatrix4f.rotationX=function(a){var c=Math.cos(a);var s=Math.sin(a);return new x3dom.fields.SFMatrix4f(1,0,0,0,0,c,-s,0,0,s,c,0,0,0,0,1);};x3dom.fields.SFMatrix4f.rotationY=function(a){var c=Math.cos(a);var s=Math.sin(a);return new x3dom.fields.SFMatrix4f(c,0,s,0,0,1,0,0,-s,0,c,0,0,0,0,1);};x3dom.fields.SFMatrix4f.rotationZ=function(a){var c=Math.cos(a);var s=Math.sin(a);return new x3dom.fields.SFMatrix4f(c,-s,0,0,s,c,0,0,0,0,1,0,0,0,0,1);};x3dom.fields.SFMatrix4f.scale=function(vec){return new x3dom.fields.SFMatrix4f(vec.x,0,0,0,0,vec.y,0,0,0,0,vec.z,0,0,0,0,1);};x3dom.fields.SFMatrix4f.lookAt=function(from,at,up) +{var view=from.subtract(at).normalize();var right=up.normalize().cross(view).normalize();if(right.dot(right)<x3dom.fields.Eps){x3dom.debug.logWarning("View matrix is linearly dependent.");return x3dom.fields.SFMatrix4f.translation(from);} +var newUp=view.cross(right).normalize();var tmp=x3dom.fields.SFMatrix4f.identity();tmp.setValue(right,newUp,view,from);return tmp;};x3dom.fields.SFMatrix4f.perspectiveFrustum=function(left,right,bottom,top,near,far) +{return new x3dom.fields.SFMatrix4f(2*near/(right-left),0,(right+left)/(right-left),0,0,2*near/(top-bottom),(top+bottom)/(top-bottom),0,0,0,-(far+near)/(far-near),-2*far*near/(far-near),0,0,-1,0);};x3dom.fields.SFMatrix4f.perspective=function(fov,aspect,near,far) +{var f=1/Math.tan(fov/2);return new x3dom.fields.SFMatrix4f(f/aspect,0,0,0,0,f,0,0,0,0,(near+far)/(near-far),2*near*far/(near-far),0,0,-1,0);};x3dom.fields.SFMatrix4f.ortho=function(left,right,bottom,top,near,far,aspect) +{var rl=(right-left)/2;var tb=(top-bottom)/2;var fn=far-near;if(aspect===undefined) +aspect=1.0;if(aspect<(rl/tb)) +tb=rl/aspect;else +rl=tb*aspect;left=-rl;right=rl;bottom=-tb;top=tb;rl*=2;tb*=2;return new x3dom.fields.SFMatrix4f(2/rl,0,0,-(right+left)/rl,0,2/tb,0,-(top+bottom)/tb,0,0,-2/fn,-(far+near)/fn,0,0,0,1);};x3dom.fields.SFMatrix4f.prototype.setTranslate=function(vec){this._03=vec.x;this._13=vec.y;this._23=vec.z;};x3dom.fields.SFMatrix4f.prototype.setScale=function(vec){this._00=vec.x;this._11=vec.y;this._22=vec.z;};x3dom.fields.SFMatrix4f.prototype.setRotate=function(quat){var xx=quat.x*quat.x;var xy=quat.x*quat.y;var xz=quat.x*quat.z;var yy=quat.y*quat.y;var yz=quat.y*quat.z;var zz=quat.z*quat.z;var wx=quat.w*quat.x;var wy=quat.w*quat.y;var wz=quat.w*quat.z;this._00=1-2*(yy+zz);this._01=2*(xy-wz);this._02=2*(xz+wy);this._10=2*(xy+wz);this._11=1-2*(xx+zz);this._12=2*(yz-wx);this._20=2*(xz-wy);this._21=2*(yz+wx);this._22=1-2*(xx+yy);};x3dom.fields.SFMatrix4f.parseRotation=function(str){var m=/^([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)$/.exec(str);var x=+m[1],y=+m[2],z=+m[3],a=+m[4];var d=Math.sqrt(x*x+y*y+z*z);if(d===0){x=1;y=z=0;}else{x/=d;y/=d;z/=d;} +var c=Math.cos(a);var s=Math.sin(a);var t=1-c;return new x3dom.fields.SFMatrix4f(t*x*x+c,t*x*y+s*z,t*x*z-s*y,0,t*x*y-s*z,t*y*y+c,t*y*z+s*x,0,t*x*z+s*y,t*y*z-s*x,t*z*z+c,0,0,0,0,1).transpose();};x3dom.fields.SFMatrix4f.parse=function(str){var needTranspose=false;var val=/matrix.*\((.+)\)/;if(val.exec(str)){str=RegExp.$1;needTranspose=true;} +var arr=Array.map(str.split(/[,\s]+/),function(n){return+n;});if(arr.length>=16) +{if(!needTranspose){return new x3dom.fields.SFMatrix4f(arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9],arr[10],arr[11],arr[12],arr[13],arr[14],arr[15]);} +else{return new x3dom.fields.SFMatrix4f(arr[0],arr[4],arr[8],arr[12],arr[1],arr[5],arr[9],arr[13],arr[2],arr[6],arr[10],arr[14],arr[3],arr[7],arr[11],arr[15]);}} +else if(arr.length===6){return new x3dom.fields.SFMatrix4f(arr[0],arr[1],0,arr[4],arr[2],arr[3],0,arr[5],0,0,1,0,0,0,0,1);} +else{x3dom.debug.logWarning("SFMatrix4f - can't parse string: "+str);return x3dom.fields.SFMatrix4f.identity();}};x3dom.fields.SFMatrix4f.prototype.mult=function(that){return new x3dom.fields.SFMatrix4f(this._00*that._00+this._01*that._10+this._02*that._20+this._03*that._30,this._00*that._01+this._01*that._11+this._02*that._21+this._03*that._31,this._00*that._02+this._01*that._12+this._02*that._22+this._03*that._32,this._00*that._03+this._01*that._13+this._02*that._23+this._03*that._33,this._10*that._00+this._11*that._10+this._12*that._20+this._13*that._30,this._10*that._01+this._11*that._11+this._12*that._21+this._13*that._31,this._10*that._02+this._11*that._12+this._12*that._22+this._13*that._32,this._10*that._03+this._11*that._13+this._12*that._23+this._13*that._33,this._20*that._00+this._21*that._10+this._22*that._20+this._23*that._30,this._20*that._01+this._21*that._11+this._22*that._21+this._23*that._31,this._20*that._02+this._21*that._12+this._22*that._22+this._23*that._32,this._20*that._03+this._21*that._13+this._22*that._23+this._23*that._33,this._30*that._00+this._31*that._10+this._32*that._20+this._33*that._30,this._30*that._01+this._31*that._11+this._32*that._21+this._33*that._31,this._30*that._02+this._31*that._12+this._32*that._22+this._33*that._32,this._30*that._03+this._31*that._13+this._32*that._23+this._33*that._33);};x3dom.fields.SFMatrix4f.prototype.multMatrixPnt=function(vec){return new x3dom.fields.SFVec3f(this._00*vec.x+this._01*vec.y+this._02*vec.z+this._03,this._10*vec.x+this._11*vec.y+this._12*vec.z+this._13,this._20*vec.x+this._21*vec.y+this._22*vec.z+this._23);};x3dom.fields.SFMatrix4f.prototype.multMatrixVec=function(vec){return new x3dom.fields.SFVec3f(this._00*vec.x+this._01*vec.y+this._02*vec.z,this._10*vec.x+this._11*vec.y+this._12*vec.z,this._20*vec.x+this._21*vec.y+this._22*vec.z);};x3dom.fields.SFMatrix4f.prototype.multFullMatrixPnt=function(vec){var w=this._30*vec.x+this._31*vec.y+this._32*vec.z+this._33;if(w){w=1.0/w;} +return new x3dom.fields.SFVec3f((this._00*vec.x+this._01*vec.y+this._02*vec.z+this._03)*w,(this._10*vec.x+this._11*vec.y+this._12*vec.z+this._13)*w,(this._20*vec.x+this._21*vec.y+this._22*vec.z+this._23)*w);};x3dom.fields.SFMatrix4f.prototype.transpose=function(){return new x3dom.fields.SFMatrix4f(this._00,this._10,this._20,this._30,this._01,this._11,this._21,this._31,this._02,this._12,this._22,this._32,this._03,this._13,this._23,this._33);};x3dom.fields.SFMatrix4f.prototype.negate=function(){return new x3dom.fields.SFMatrix4f(-this._00,-this._01,-this._02,-this._03,-this._10,-this._11,-this._12,-this._13,-this._20,-this._21,-this._22,-this._23,-this._30,-this._31,-this._32,-this._33);};x3dom.fields.SFMatrix4f.prototype.multiply=function(s){return new x3dom.fields.SFMatrix4f(s*this._00,s*this._01,s*this._02,s*this._03,s*this._10,s*this._11,s*this._12,s*this._13,s*this._20,s*this._21,s*this._22,s*this._23,s*this._30,s*this._31,s*this._32,s*this._33);};x3dom.fields.SFMatrix4f.prototype.add=function(that){return new x3dom.fields.SFMatrix4f(this._00+that._00,this._01+that._01,this._02+that._02,this._03+that._03,this._10+that._10,this._11+that._11,this._12+that._12,this._13+that._13,this._20+that._20,this._21+that._21,this._22+that._22,this._23+that._23,this._30+that._30,this._31+that._31,this._32+that._32,this._33+that._33);};x3dom.fields.SFMatrix4f.prototype.addScaled=function(that,s){return new x3dom.fields.SFMatrix4f(this._00+s*that._00,this._01+s*that._01,this._02+s*that._02,this._03+s*that._03,this._10+s*that._10,this._11+s*that._11,this._12+s*that._12,this._13+s*that._13,this._20+s*that._20,this._21+s*that._21,this._22+s*that._22,this._23+s*that._23,this._30+s*that._30,this._31+s*that._31,this._32+s*that._32,this._33+s*that._33);};x3dom.fields.SFMatrix4f.prototype.setValues=function(that){this._00=that._00;this._01=that._01;this._02=that._02;this._03=that._03;this._10=that._10;this._11=that._11;this._12=that._12;this._13=that._13;this._20=that._20;this._21=that._21;this._22=that._22;this._23=that._23;this._30=that._30;this._31=that._31;this._32=that._32;this._33=that._33;};x3dom.fields.SFMatrix4f.prototype.setValue=function(v1,v2,v3,v4){this._00=v1.x;this._01=v2.x;this._02=v3.x;this._10=v1.y;this._11=v2.y;this._12=v3.y;this._20=v1.z;this._21=v2.z;this._22=v3.z;this._30=0;this._31=0;this._32=0;if(arguments.length>3){this._03=v4.x;this._13=v4.y;this._23=v4.z;this._33=1;}};x3dom.fields.SFMatrix4f.prototype.setFromArray=function(a){this._00=a[0];this._01=a[4];this._02=a[8];this._03=a[12];this._10=a[1];this._11=a[5];this._12=a[9];this._13=a[13];this._20=a[2];this._21=a[6];this._22=a[10];this._23=a[14];this._30=a[3];this._31=a[7];this._32=a[11];this._33=a[15];};x3dom.fields.SFMatrix4f.prototype.toGL=function(){return[this._00,this._10,this._20,this._30,this._01,this._11,this._21,this._31,this._02,this._12,this._22,this._32,this._03,this._13,this._23,this._33];};x3dom.fields.SFMatrix4f.prototype.at=function(i,j){var field="_"+i+j;return this[field];};x3dom.fields.SFMatrix4f.prototype.sqrt=function(){var Y=x3dom.fields.SFMatrix4f.identity();var result=x3dom.fields.SFMatrix4f.copy(this);for(var i=0;i<6;i++) +{var iX=result.inverse();var iY=(i==0)?x3dom.fields.SFMatrix4f.identity():Y.inverse();var rd=result.det(),yd=Y.det();var g=Math.abs(Math.pow(rd*yd,-0.125));var ig=1.0/g;result=result.multiply(g);result=result.addScaled(iY,ig);result=result.multiply(0.5);Y=Y.multiply(g);Y=Y.addScaled(iX,ig);Y=Y.multiply(0.5);} +return result;};x3dom.fields.SFMatrix4f.prototype.normInfinity=function(){var t=0,m=0;if((t=Math.abs(this._00))>m){m=t;} +if((t=Math.abs(this._01))>m){m=t;} +if((t=Math.abs(this._02))>m){m=t;} +if((t=Math.abs(this._03))>m){m=t;} +if((t=Math.abs(this._10))>m){m=t;} +if((t=Math.abs(this._11))>m){m=t;} +if((t=Math.abs(this._12))>m){m=t;} +if((t=Math.abs(this._13))>m){m=t;} +if((t=Math.abs(this._20))>m){m=t;} +if((t=Math.abs(this._21))>m){m=t;} +if((t=Math.abs(this._22))>m){m=t;} +if((t=Math.abs(this._23))>m){m=t;} +if((t=Math.abs(this._30))>m){m=t;} +if((t=Math.abs(this._31))>m){m=t;} +if((t=Math.abs(this._32))>m){m=t;} +if((t=Math.abs(this._33))>m){m=t;} +return m;};x3dom.fields.SFMatrix4f.prototype.norm1_3x3=function(){var max=Math.abs(this._00)+ +Math.abs(this._10)+ +Math.abs(this._20);var t=0;if((t=Math.abs(this._01)+ +Math.abs(this._11)+ +Math.abs(this._21))>max){max=t;} +if((t=Math.abs(this._02)+ +Math.abs(this._12)+ +Math.abs(this._22))>max){max=t;} +return max;};x3dom.fields.SFMatrix4f.prototype.normInf_3x3=function(){var max=Math.abs(this._00)+ +Math.abs(this._01)+ +Math.abs(this._02);var t=0;if((t=Math.abs(this._10)+ +Math.abs(this._11)+ +Math.abs(this._12))>max){max=t;} +if((t=Math.abs(this._20)+ +Math.abs(this._21)+ +Math.abs(this._22))>max){max=t;} +return max;};x3dom.fields.SFMatrix4f.prototype.adjointT_3x3=function(){var result=x3dom.fields.SFMatrix4f.identity();result._00=this._11*this._22-this._12*this._21;result._01=this._12*this._20-this._10*this._22;result._02=this._10*this._21-this._11*this._20;result._10=this._21*this._02-this._22*this._01;result._11=this._22*this._00-this._20*this._02;result._12=this._20*this._01-this._21*this._00;result._20=this._01*this._12-this._02*this._11;result._21=this._02*this._10-this._00*this._12;result._22=this._00*this._11-this._01*this._10;return result;};x3dom.fields.SFMatrix4f.prototype.equals=function(that){var eps=0.000000000001;return Math.abs(this._00-that._00)<eps&&Math.abs(this._01-that._01)<eps&&Math.abs(this._02-that._02)<eps&&Math.abs(this._03-that._03)<eps&&Math.abs(this._10-that._10)<eps&&Math.abs(this._11-that._11)<eps&&Math.abs(this._12-that._12)<eps&&Math.abs(this._13-that._13)<eps&&Math.abs(this._20-that._20)<eps&&Math.abs(this._21-that._21)<eps&&Math.abs(this._22-that._22)<eps&&Math.abs(this._23-that._23)<eps&&Math.abs(this._30-that._30)<eps&&Math.abs(this._31-that._31)<eps&&Math.abs(this._32-that._32)<eps&&Math.abs(this._33-that._33)<eps;};x3dom.fields.SFMatrix4f.prototype.getTransform=function(translation,rotation,scaleFactor,scaleOrientation,center) +{var m=null;if(arguments.length>4){m=x3dom.fields.SFMatrix4f.translation(center.negate());m=m.mult(this);var c=x3dom.fields.SFMatrix4f.translation(center);m=m.mult(c);} +else{m=x3dom.fields.SFMatrix4f.copy(this);} +var flip=m.decompose(translation,rotation,scaleFactor,scaleOrientation);scaleFactor.setValues(scaleFactor.multiply(flip));};x3dom.fields.SFMatrix4f.prototype.decompose=function(t,r,s,so) +{var A=x3dom.fields.SFMatrix4f.copy(this);var Q=x3dom.fields.SFMatrix4f.identity(),S=x3dom.fields.SFMatrix4f.identity(),SO=x3dom.fields.SFMatrix4f.identity();t.x=A._03;t.y=A._13;t.z=A._23;A._03=0.0;A._13=0.0;A._23=0.0;A._30=0.0;A._31=0.0;A._32=0.0;var det=A.polarDecompose(Q,S);var f=1.0;if(det<0.0){Q=Q.negate();f=-1.0;} +r.setValue(Q);S.spectralDecompose(SO,s);so.setValue(SO);return f;};x3dom.fields.SFMatrix4f.prototype.polarDecompose=function(Q,S) +{var TOL=0.000000000001;var Mk=this.transpose();var Ek=x3dom.fields.SFMatrix4f.identity();var Mk_one=Mk.norm1_3x3();var Mk_inf=Mk.normInf_3x3();var MkAdjT;var MkAdjT_one,MkAdjT_inf;var Ek_one,Mk_det;do +{MkAdjT=Mk.adjointT_3x3();Mk_det=Mk._00*MkAdjT._00+ +Mk._01*MkAdjT._01+ +Mk._02*MkAdjT._02;if(Mk_det==0.0) +{x3dom.debug.logWarning("polarDecompose: Mk_det == 0.0");break;} +MkAdjT_one=MkAdjT.norm1_3x3();MkAdjT_inf=MkAdjT.normInf_3x3();var gamma=Math.sqrt(Math.sqrt((MkAdjT_one*MkAdjT_inf)/(Mk_one*Mk_inf))/Math.abs(Mk_det));var g1=0.5*gamma;var g2=0.5/(gamma*Mk_det);Ek.setValues(Mk);Mk=Mk.multiply(g1);Mk=Mk.addScaled(MkAdjT,g2);Ek=Ek.addScaled(Mk,-1.0);Ek_one=Ek.norm1_3x3();Mk_one=Mk.norm1_3x3();Mk_inf=Mk.normInf_3x3();}while(Ek_one>(Mk_one*TOL));Q.setValues(Mk.transpose());S.setValues(Mk.mult(this));for(var i=0;i<3;++i) +{for(var j=i;j<3;++j) +{S['_'+j+i]=0.5*(S['_'+j+i]+S['_'+i+j]);S['_'+i+j]=0.5*(S['_'+j+i]+S['_'+i+j]);}} +return Mk_det;};x3dom.fields.SFMatrix4f.prototype.spectralDecompose=function(SO,k) +{var next=[1,2,0];var maxIterations=20;var diag=[this._00,this._11,this._22];var offDiag=[this._12,this._20,this._01];for(var iter=0;iter<maxIterations;++iter) +{var sm=Math.abs(offDiag[0])+Math.abs(offDiag[1])+Math.abs(offDiag[2]);if(sm==0){break;} +for(var i=2;i>=0;--i) +{var p=next[i];var q=next[p];var absOffDiag=Math.abs(offDiag[i]);var g=100.0*absOffDiag;if(absOffDiag>0.0) +{var t=0,h=diag[q]-diag[p];var absh=Math.abs(h);if(absh+g==absh) +{t=offDiag[i]/h;} +else +{var theta=0.5*h/offDiag[i];t=1.0/(Math.abs(theta)+Math.sqrt(theta*theta+1.0));t=theta<0.0?-t:t;} +var c=1.0/Math.sqrt(t*t+1.0);var s=t*c;var tau=s/(c+1.0);var ta=t*offDiag[i];offDiag[i]=0.0;diag[p]-=ta;diag[q]+=ta;var offDiagq=offDiag[q];offDiag[q]-=s*(offDiag[p]+tau*offDiagq);offDiag[p]+=s*(offDiagq-tau*offDiag[p]);for(var j=2;j>=0;--j) +{var a=SO['_'+j+p];var b=SO['_'+j+q];SO['_'+j+p]-=s*(b+tau*a);SO['_'+j+q]+=s*(a-tau*b);}}}} +k.x=diag[0];k.y=diag[1];k.z=diag[2];};x3dom.fields.SFMatrix4f.prototype.log=function(){var maxiter=12;var eps=1e-12;var A=x3dom.fields.SFMatrix4f.copy(this),Z=x3dom.fields.SFMatrix4f.copy(this);Z._00-=1;Z._11-=1;Z._22-=1;Z._33-=1;var k=0;while(Z.normInfinity()>0.5) +{A=A.sqrt();Z.setValues(A);Z._00-=1;Z._11-=1;Z._22-=1;Z._33-=1;k++;} +A._00-=1;A._11-=1;A._22-=1;A._33-=1;A=A.negate();Z.setValues(A);var result=x3dom.fields.SFMatrix4f.copy(A);var i=1;while(Z.normInfinity()>eps&&i<maxiter) +{Z=Z.mult(A);i++;result=result.addScaled(Z,1.0/i);} +return result.multiply(-(1<<k));};x3dom.fields.SFMatrix4f.prototype.exp=function(){var q=6;var A=x3dom.fields.SFMatrix4f.copy(this),D=x3dom.fields.SFMatrix4f.identity(),N=x3dom.fields.SFMatrix4f.identity(),result=x3dom.fields.SFMatrix4f.identity();var k=0,c=1.0;var j=1.0+parseInt(Math.log(A.normInfinity()/0.693));if(j<0){j=0;} +A=A.multiply(1.0/(1<<j));for(k=1;k<=q;k++) +{c*=(q-k+1)/(k*(2*q-k+1));result=A.mult(result);N=N.addScaled(result,c);if(k%2){D=D.addScaled(result,-c);} +else{D=D.addScaled(result,c);}} +result=D.inverse().mult(N);for(k=0;k<j;k++) +{result=result.mult(result);} +return result;};x3dom.fields.SFMatrix4f.prototype.det3=function(a1,a2,a3,b1,b2,b3,c1,c2,c3){return((a1*b2*c3)+(a2*b3*c1)+(a3*b1*c2)- +(a1*b3*c2)-(a2*b1*c3)-(a3*b2*c1));};x3dom.fields.SFMatrix4f.prototype.det=function(){var a1=this._00;var b1=this._10;var c1=this._20;var d1=this._30;var a2=this._01;var b2=this._11;var c2=this._21;var d2=this._31;var a3=this._02;var b3=this._12;var c3=this._22;var d3=this._32;var a4=this._03;var b4=this._13;var c4=this._23;var d4=this._33;return(a1*this.det3(b2,b3,b4,c2,c3,c4,d2,d3,d4)- +b1*this.det3(a2,a3,a4,c2,c3,c4,d2,d3,d4)+ +c1*this.det3(a2,a3,a4,b2,b3,b4,d2,d3,d4)- +d1*this.det3(a2,a3,a4,b2,b3,b4,c2,c3,c4));};x3dom.fields.SFMatrix4f.prototype.inverse=function(){var a1=this._00;var b1=this._10;var c1=this._20;var d1=this._30;var a2=this._01;var b2=this._11;var c2=this._21;var d2=this._31;var a3=this._02;var b3=this._12;var c3=this._22;var d3=this._32;var a4=this._03;var b4=this._13;var c4=this._23;var d4=this._33;var rDet=this.det();if(rDet==0) +{x3dom.debug.logWarning("Invert matrix: singular matrix, no inverse!");return x3dom.fields.SFMatrix4f.identity();} +rDet=1.0/rDet;return new x3dom.fields.SFMatrix4f(+this.det3(b2,b3,b4,c2,c3,c4,d2,d3,d4)*rDet,-this.det3(a2,a3,a4,c2,c3,c4,d2,d3,d4)*rDet,+this.det3(a2,a3,a4,b2,b3,b4,d2,d3,d4)*rDet,-this.det3(a2,a3,a4,b2,b3,b4,c2,c3,c4)*rDet,-this.det3(b1,b3,b4,c1,c3,c4,d1,d3,d4)*rDet,+this.det3(a1,a3,a4,c1,c3,c4,d1,d3,d4)*rDet,-this.det3(a1,a3,a4,b1,b3,b4,d1,d3,d4)*rDet,+this.det3(a1,a3,a4,b1,b3,b4,c1,c3,c4)*rDet,+this.det3(b1,b2,b4,c1,c2,c4,d1,d2,d4)*rDet,-this.det3(a1,a2,a4,c1,c2,c4,d1,d2,d4)*rDet,+this.det3(a1,a2,a4,b1,b2,b4,d1,d2,d4)*rDet,-this.det3(a1,a2,a4,b1,b2,b4,c1,c2,c4)*rDet,-this.det3(b1,b2,b3,c1,c2,c3,d1,d2,d3)*rDet,+this.det3(a1,a2,a3,c1,c2,c3,d1,d2,d3)*rDet,-this.det3(a1,a2,a3,b1,b2,b3,d1,d2,d3)*rDet,+this.det3(a1,a2,a3,b1,b2,b3,c1,c2,c3)*rDet);};x3dom.fields.SFMatrix4f.prototype.getEulerAngles=function(){var theta_1,theta_2,theta;var phi_1,phi_2,phi;var psi_1,psi_2,psi;var cos_theta_1,cos_theta_2;if(Math.abs(this._20)!=1.0){theta_1=-Math.asin(this._20);theta_2=Math.PI-theta_1;cos_theta_1=Math.cos(theta_1);cos_theta_2=Math.cos(theta_2);psi_1=Math.atan2(this._21/cos_theta_1,this._22/cos_theta_1);psi_2=Math.atan2(this._21/cos_theta_2,this._22/cos_theta_2);phi_1=Math.atan2(this._10/cos_theta_1,this._00/cos_theta_1);phi_2=Math.atan2(this._10/cos_theta_2,this._00/cos_theta_2);return[psi_1,theta_1,phi_1,psi_2,theta_2,phi_2];} +else{phi=0;if(this._20==-1.0){theta=Math.PI/2.0;psi=phi+Math.atan2(this._01,this._02);} +else{theta=-(Math.PI/2.0);psi=-phi+Math.atan2(-this._01,-this._02);} +return[psi,theta,phi,psi,theta,phi];}};x3dom.fields.SFMatrix4f.prototype.toString=function(){return'\n'+ +this._00.toFixed(6)+', '+this._01.toFixed(6)+', '+ +this._02.toFixed(6)+', '+this._03.toFixed(6)+', \n'+ +this._10.toFixed(6)+', '+this._11.toFixed(6)+', '+ +this._12.toFixed(6)+', '+this._13.toFixed(6)+', \n'+ +this._20.toFixed(6)+', '+this._21.toFixed(6)+', '+ +this._22.toFixed(6)+', '+this._23.toFixed(6)+', \n'+ +this._30.toFixed(6)+', '+this._31.toFixed(6)+', '+ +this._32.toFixed(6)+', '+this._33.toFixed(6);};x3dom.fields.SFMatrix4f.prototype.setValueByStr=function(str){var needTranspose=false;var val=/matrix.*\((.+)\)/;if(val.exec(str)){str=RegExp.$1;needTranspose=true;} +var arr=Array.map(str.split(/[,\s]+/),function(n){return+n;});if(arr.length>=16) +{if(!needTranspose){this._00=arr[0];this._01=arr[1];this._02=arr[2];this._03=arr[3];this._10=arr[4];this._11=arr[5];this._12=arr[6];this._13=arr[7];this._20=arr[8];this._21=arr[9];this._22=arr[10];this._23=arr[11];this._30=arr[12];this._31=arr[13];this._32=arr[14];this._33=arr[15];} +else{this._00=arr[0];this._01=arr[4];this._02=arr[8];this._03=arr[12];this._10=arr[1];this._11=arr[5];this._12=arr[9];this._13=arr[13];this._20=arr[2];this._21=arr[6];this._22=arr[10];this._23=arr[14];this._30=arr[3];this._31=arr[7];this._32=arr[11];this._33=arr[15];}} +else if(arr.length===6){this._00=arr[0];this._01=arr[1];this._02=0;this._03=arr[4];this._10=arr[2];this._11=arr[3];this._12=0;this._13=arr[5];this._20=0;this._21=0;this._22=1;this._23=0;this._30=0;this._31=0;this._32=0;this._33=1;} +else{x3dom.debug.logWarning("SFMatrix4f - can't parse string: "+str);} +return this;};x3dom.fields.SFVec2f=function(x,y){if(arguments.length===0){this.x=0;this.y=0;} +else{this.x=x;this.y=y;}};x3dom.fields.SFVec2f.copy=function(v){return new x3dom.fields.SFVec2f(v.x,v.y);};x3dom.fields.SFVec2f.parse=function(str){var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);return new x3dom.fields.SFVec2f(+m[1],+m[2]);};x3dom.fields.SFVec2f.prototype.copy=function(){return x3dom.fields.SFVec2f.copy(this);};x3dom.fields.SFVec2f.prototype.setValues=function(that){this.x=that.x;this.y=that.y;};x3dom.fields.SFVec2f.prototype.at=function(i){switch(i){case 0:return this.x;case 1:return this.y;default:return this.x;}};x3dom.fields.SFVec2f.prototype.add=function(that){return new x3dom.fields.SFVec2f(this.x+that.x,this.y+that.y);};x3dom.fields.SFVec2f.prototype.subtract=function(that){return new x3dom.fields.SFVec2f(this.x-that.x,this.y-that.y);};x3dom.fields.SFVec2f.prototype.negate=function(){return new x3dom.fields.SFVec2f(-this.x,-this.y);};x3dom.fields.SFVec2f.prototype.dot=function(that){return this.x*that.x+this.y*that.y;};x3dom.fields.SFVec2f.prototype.reflect=function(n){var d2=this.dot(n)*2;return new x3dom.fields.SFVec2f(this.x-d2*n.x,this.y-d2*n.y);};x3dom.fields.SFVec2f.prototype.normalize=function(){var n=this.length();if(n){n=1.0/n;} +return new x3dom.fields.SFVec2f(this.x*n,this.y*n);};x3dom.fields.SFVec2f.prototype.multComponents=function(that){return new x3dom.fields.SFVec2f(this.x*that.x,this.y*that.y);};x3dom.fields.SFVec2f.prototype.multiply=function(n){return new x3dom.fields.SFVec2f(this.x*n,this.y*n);};x3dom.fields.SFVec2f.prototype.divide=function(n){var denom=n?(1.0/n):1.0;return new x3dom.fields.SFVec2f(this.x*denom,this.y*denom);};x3dom.fields.SFVec2f.prototype.equals=function(that,eps){return Math.abs(this.x-that.x)<eps&&Math.abs(this.y-that.y)<eps;};x3dom.fields.SFVec2f.prototype.length=function(){return Math.sqrt((this.x*this.x)+(this.y*this.y));};x3dom.fields.SFVec2f.prototype.toGL=function(){return[this.x,this.y];};x3dom.fields.SFVec2f.prototype.toString=function(){return this.x+" "+this.y;};x3dom.fields.SFVec2f.prototype.setValueByStr=function(str){var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);this.x=+m[1];this.y=+m[2];return this;};x3dom.fields.SFVec3f=function(x,y,z){if(arguments.length===0){this.x=0;this.y=0;this.z=0;} +else{this.x=x;this.y=y;this.z=z;}};x3dom.fields.SFVec3f.NullVector=new x3dom.fields.SFVec3f(0,0,0);x3dom.fields.SFVec3f.OneVector=new x3dom.fields.SFVec3f(1,1,1);x3dom.fields.SFVec3f.copy=function(v){return new x3dom.fields.SFVec3f(v.x,v.y,v.z);};x3dom.fields.SFVec3f.MIN=function(){return new x3dom.fields.SFVec3f(Number.MIN_VALUE,Number.MIN_VALUE,Number.MIN_VALUE);};x3dom.fields.SFVec3f.MAX=function(){return new x3dom.fields.SFVec3f(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE);};x3dom.fields.SFVec3f.parse=function(str){try{var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);return new x3dom.fields.SFVec3f(+m[1],+m[2],+m[3]);} +catch(e){var c=x3dom.fields.SFColor.colorParse(str);return new x3dom.fields.SFVec3f(c.r,c.g,c.b);}};x3dom.fields.SFVec3f.prototype.copy=function(){return x3dom.fields.SFVec3f.copy(this);};x3dom.fields.SFVec3f.prototype.setValues=function(that){this.x=that.x;this.y=that.y;this.z=that.z;};x3dom.fields.SFVec3f.prototype.at=function(i){switch(i){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:return this.x;}};x3dom.fields.SFVec3f.prototype.add=function(that){return new x3dom.fields.SFVec3f(this.x+that.x,this.y+that.y,this.z+that.z);};x3dom.fields.SFVec3f.prototype.addScaled=function(that,s){return new x3dom.fields.SFVec3f(this.x+s*that.x,this.y+s*that.y,this.z+s*that.z);};x3dom.fields.SFVec3f.prototype.subtract=function(that){return new x3dom.fields.SFVec3f(this.x-that.x,this.y-that.y,this.z-that.z);};x3dom.fields.SFVec3f.prototype.negate=function(){return new x3dom.fields.SFVec3f(-this.x,-this.y,-this.z);};x3dom.fields.SFVec3f.prototype.dot=function(that){return(this.x*that.x+this.y*that.y+this.z*that.z);};x3dom.fields.SFVec3f.prototype.cross=function(that){return new x3dom.fields.SFVec3f(this.y*that.z-this.z*that.y,this.z*that.x-this.x*that.z,this.x*that.y-this.y*that.x);};x3dom.fields.SFVec3f.prototype.reflect=function(n){var d2=this.dot(n)*2;return new x3dom.fields.SFVec3f(this.x-d2*n.x,this.y-d2*n.y,this.z-d2*n.z);};x3dom.fields.SFVec3f.prototype.length=function(){return Math.sqrt((this.x*this.x)+(this.y*this.y)+(this.z*this.z));};x3dom.fields.SFVec3f.prototype.normalize=function(){var n=this.length();if(n){n=1.0/n;} +return new x3dom.fields.SFVec3f(this.x*n,this.y*n,this.z*n);};x3dom.fields.SFVec3f.prototype.multComponents=function(that){return new x3dom.fields.SFVec3f(this.x*that.x,this.y*that.y,this.z*that.z);};x3dom.fields.SFVec3f.prototype.multiply=function(n){return new x3dom.fields.SFVec3f(this.x*n,this.y*n,this.z*n);};x3dom.fields.SFVec3f.prototype.divide=function(n){var denom=n?(1.0/n):1.0;return new x3dom.fields.SFVec3f(this.x*denom,this.y*denom,this.z*denom);};x3dom.fields.SFVec3f.prototype.equals=function(that,eps){return Math.abs(this.x-that.x)<eps&&Math.abs(this.y-that.y)<eps&&Math.abs(this.z-that.z)<eps;};x3dom.fields.SFVec3f.prototype.toGL=function(){return[this.x,this.y,this.z];};x3dom.fields.SFVec3f.prototype.toString=function(){return this.x+" "+this.y+" "+this.z;};x3dom.fields.SFVec3f.prototype.setValueByStr=function(str){try{var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);this.x=+m[1];this.y=+m[2];this.z=+m[3];} +catch(e){var c=x3dom.fields.SFColor.colorParse(str);this.x=c.r;this.y=c.g;this.z=c.b;} +return this;};x3dom.fields.SFVec4f=function(x,y,z,w){if(arguments.length===0){this.x=0;this.y=0;this.z=0;this.w=0;} +else{this.x=x;this.y=y;this.z=z;this.w=w;}};x3dom.fields.SFVec4f.copy=function(v){return new x3dom.fields.SFVec4f(v.x,v.y,v.z,v.w);};x3dom.fields.SFVec4f.prototype.copy=function(){return x3dom.fields.SFVec4f(this);};x3dom.fields.SFVec4f.parse=function(str){var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);return new x3dom.fields.SFVec4f(+m[1],+m[2],+m[3],+m[4]);};x3dom.fields.SFVec4f.prototype.setValueByStr=function(str){var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);this.x=+m[1];this.y=+m[2];this.z=+m[3];this.w=+m[4];return this;};x3dom.fields.SFVec4f.prototype.toGL=function(){return[this.x,this.y,this.z,this.w];};x3dom.fields.SFVec4f.prototype.toString=function(){return this.x+" "+this.y+" "+this.z+" "+this.w;};x3dom.fields.Quaternion=function(x,y,z,w){if(arguments.length===0){this.x=0;this.y=0;this.z=1;this.w=0;} +else{this.x=x;this.y=y;this.z=z;this.w=w;}};x3dom.fields.Quaternion.copy=function(v){return new x3dom.fields.Quaternion(v.x,v.y,v.z,v.w);};x3dom.fields.Quaternion.prototype.multiply=function(that){return new x3dom.fields.Quaternion(this.w*that.x+this.x*that.w+this.y*that.z-this.z*that.y,this.w*that.y+this.y*that.w+this.z*that.x-this.x*that.z,this.w*that.z+this.z*that.w+this.x*that.y-this.y*that.x,this.w*that.w-this.x*that.x-this.y*that.y-this.z*that.z);};x3dom.fields.Quaternion.parseAxisAngle=function(str){var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);return x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(+m[1],+m[2],+m[3]),+m[4]);};x3dom.fields.Quaternion.axisAngle=function(axis,a){var t=axis.length();if(t>x3dom.fields.Eps) +{var s=Math.sin(a/2)/t;var c=Math.cos(a/2);return new x3dom.fields.Quaternion(axis.x*s,axis.y*s,axis.z*s,c);} +else +{return new x3dom.fields.Quaternion(0,0,0,1);}};x3dom.fields.Quaternion.prototype.copy=function(){return x3dom.fields.Quaternion(this);};x3dom.fields.Quaternion.prototype.toMatrix=function(){var xx=this.x*this.x;var xy=this.x*this.y;var xz=this.x*this.z;var yy=this.y*this.y;var yz=this.y*this.z;var zz=this.z*this.z;var wx=this.w*this.x;var wy=this.w*this.y;var wz=this.w*this.z;return new x3dom.fields.SFMatrix4f(1-2*(yy+zz),2*(xy-wz),2*(xz+wy),0,2*(xy+wz),1-2*(xx+zz),2*(yz-wx),0,2*(xz-wy),2*(yz+wx),1-2*(xx+yy),0,0,0,0,1);};x3dom.fields.Quaternion.prototype.toAxisAngle=function() +{var x=0,y=0,z=0;var s=0,a=0;var that=this;if(this.w>1) +{that=x3dom.fields.Quaternion.normalize(this);} +a=2*Math.acos(that.w);s=Math.sqrt(1-that.w*that.w);if(s==0) +{x=that.x;y=that.y;z=that.z;} +else +{x=that.x/s;y=that.y/s;z=that.z/s;} +return[new x3dom.fields.SFVec3f(x,y,z),a];};x3dom.fields.Quaternion.prototype.angle=function() +{return 2*Math.acos(this.w);};x3dom.fields.Quaternion.prototype.setValue=function(matrix) +{var tr,s=1;var qt=[0,0,0];var i=0,j=0,k=0;var nxt=[1,2,0];tr=matrix._00+matrix._11+matrix._22;if(tr>0.0) +{s=Math.sqrt(tr+1.0);this.w=s*0.5;s=0.5/s;this.x=(matrix._21-matrix._12)*s;this.y=(matrix._02-matrix._20)*s;this.z=(matrix._10-matrix._01)*s;} +else +{if(matrix._11>matrix._00){i=1;} +else{i=0;} +if(matrix._22>matrix.at(i,i)){i=2;} +j=nxt[i];k=nxt[j];s=Math.sqrt(matrix.at(i,i)-(matrix.at(j,j)+matrix.at(k,k))+1.0);qt[i]=s*0.5;s=0.5/s;this.w=(matrix.at(k,j)-matrix.at(j,k))*s;qt[j]=(matrix.at(j,i)+matrix.at(i,j))*s;qt[k]=(matrix.at(k,i)+matrix.at(i,k))*s;this.x=qt[0];this.y=qt[1];this.z=qt[2];} +if(this.w>1.0||this.w<-1.0) +{var errThreshold=1+(x3dom.fields.Eps*100);if(this.w>errThreshold||this.w<-errThreshold) +{x3dom.debug.logInfo("MatToQuat: BUG: |quat[4]| ("+this.w+") >> 1.0 !");} +if(this.w>1.0){this.w=1.0;} +else{this.w=-1.0;}}};x3dom.fields.Quaternion.prototype.setFromEuler=function(alpha,beta,gamma){var sx=Math.sin(alpha*0.5);var cx=Math.cos(alpha*0.5);var sy=Math.sin(beta*0.5);var cy=Math.cos(beta*0.5);var sz=Math.sin(gamma*0.5);var cz=Math.cos(gamma*0.5);this.x=(sx*cy*cz)-(cx*sy*sz);this.y=(cx*sy*cz)+(sx*cy*sz);this.z=(cx*cy*sz)-(sx*sy*cz);this.w=(cx*cy*cz)+(sx*sy*sz);};x3dom.fields.Quaternion.prototype.dot=function(that){return this.x*that.x+this.y*that.y+this.z*that.z+this.w*that.w;};x3dom.fields.Quaternion.prototype.add=function(that){return new x3dom.fields.Quaternion(this.x+that.x,this.y+that.y,this.z+that.z,this.w+that.w);};x3dom.fields.Quaternion.prototype.subtract=function(that){return new x3dom.fields.Quaternion(this.x-that.x,this.y-that.y,this.z-that.z,this.w-that.w);};x3dom.fields.Quaternion.prototype.setValues=function(that){this.x=that.x;this.y=that.y;this.z=that.z;this.w=that.w;};x3dom.fields.Quaternion.prototype.equals=function(that,eps){return(this.dot(that)>=1.0-eps);};x3dom.fields.Quaternion.prototype.multScalar=function(s){return new x3dom.fields.Quaternion(this.x*s,this.y*s,this.z*s,this.w*s);};x3dom.fields.Quaternion.prototype.normalize=function(that){var d2=this.dot(that);var id=1.0;if(d2){id=1.0/Math.sqrt(d2);} +return new x3dom.fields.Quaternion(this.x*id,this.y*id,this.z*id,this.w*id);};x3dom.fields.Quaternion.prototype.negate=function(){return new x3dom.fields.Quaternion(-this.x,-this.y,-this.z,-this.w);};x3dom.fields.Quaternion.prototype.inverse=function(){return new x3dom.fields.Quaternion(-this.x,-this.y,-this.z,this.w);};x3dom.fields.Quaternion.prototype.slerp=function(that,t){var cosom=this.dot(that);var rot1;if(cosom<0.0) +{cosom=-cosom;rot1=that.negate();} +else +{rot1=new x3dom.fields.Quaternion(that.x,that.y,that.z,that.w);} +var scalerot0,scalerot1;if((1.0-cosom)>0.00001) +{var omega=Math.acos(cosom);var sinom=Math.sin(omega);scalerot0=Math.sin((1.0-t)*omega)/sinom;scalerot1=Math.sin(t*omega)/sinom;} +else +{scalerot0=1.0-t;scalerot1=t;} +return this.multScalar(scalerot0).add(rot1.multScalar(scalerot1));};x3dom.fields.Quaternion.rotateFromTo=function(fromVec,toVec){var from=fromVec.normalize();var to=toVec.normalize();var cost=from.dot(to);if(cost>0.99999) +{return new x3dom.fields.Quaternion(0,0,0,1);} +else if(cost<-0.99999) +{var cAxis=new x3dom.fields.SFVec3f(1,0,0);var tmp=from.cross(cAxis);if(tmp.length()<0.00001) +{cAxis.x=0;cAxis.y=1;cAxis.z=0;tmp=from.cross(cAxis);} +tmp=tmp.normalize();return x3dom.fields.Quaternion.axisAngle(tmp,Math.PI);} +var axis=fromVec.cross(toVec);axis=axis.normalize();var s=Math.sqrt(0.5*(1.0-cost));axis=axis.multiply(s);s=Math.sqrt(0.5*(1.0+cost));return new x3dom.fields.Quaternion(axis.x,axis.y,axis.z,s);};x3dom.fields.Quaternion.prototype.toGL=function(){var val=this.toAxisAngle();return[val[0].x,val[0].y,val[0].z,val[1]];};x3dom.fields.Quaternion.prototype.toString=function(){return this.x+" "+this.y+" "+this.z+", "+this.w;};x3dom.fields.Quaternion.prototype.setValueByStr=function(str){var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);var quat=x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(+m[1],+m[2],+m[3]),+m[4]);this.x=quat.x;this.y=quat.y;this.z=quat.z;this.w=quat.w;return this;};x3dom.fields.SFColor=function(r,g,b){if(arguments.length===0){this.r=0;this.g=0;this.b=0;} +else{this.r=r;this.g=g;this.b=b;}};x3dom.fields.SFColor.parse=function(str){try{var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);return new x3dom.fields.SFColor(+m[1],+m[2],+m[3]);} +catch(e){return x3dom.fields.SFColor.colorParse(str);}};x3dom.fields.SFColor.copy=function(that){return new x3dom.fields.SFColor(that.r,that.g,that.b);};x3dom.fields.SFColor.prototype.copy=function(){return x3dom.fields.SFColor.copy(this);};x3dom.fields.SFColor.prototype.setHSV=function(h,s,v){x3dom.debug.logWarning("SFColor.setHSV() NYI");};x3dom.fields.SFColor.prototype.getHSV=function(){var h=0,s=0,v=0;x3dom.debug.logWarning("SFColor.getHSV() NYI");return[h,s,v];};x3dom.fields.SFColor.prototype.setValues=function(color){this.r=color.r;this.g=color.g;this.b=color.b;};x3dom.fields.SFColor.prototype.equals=function(that,eps){return Math.abs(this.r-that.r)<eps&&Math.abs(this.g-that.g)<eps&&Math.abs(this.b-that.b)<eps;};x3dom.fields.SFColor.prototype.add=function(that){return new x3dom.fields.SFColor(this.r+that.r,this.g+that.g,this.b+that.b);};x3dom.fields.SFColor.prototype.subtract=function(that){return new x3dom.fields.SFColor(this.r-that.r,this.g-that.g,this.b-that.b);};x3dom.fields.SFColor.prototype.multiply=function(n){return new x3dom.fields.SFColor(this.r*n,this.g*n,this.b*n);};x3dom.fields.SFColor.prototype.toGL=function(){return[this.r,this.g,this.b];};x3dom.fields.SFColor.prototype.toString=function(){return this.r+" "+this.g+" "+this.b;};x3dom.fields.SFColor.prototype.setValueByStr=function(str){try{var m=/^\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*$/.exec(str);this.r=+m[1];this.g=+m[2];this.b=+m[3];} +catch(e){var c=x3dom.fields.SFColor.colorParse(str);this.r=c.r;this.g=c.g;this.b=c.b;} +return this;};x3dom.fields.SFColor.colorParse=function(color){var red=0,green=0,blue=0;var color_names={aliceblue:'f0f8ff',antiquewhite:'faebd7',aqua:'00ffff',aquamarine:'7fffd4',azure:'f0ffff',beige:'f5f5dc',bisque:'ffe4c4',black:'000000',blanchedalmond:'ffebcd',blue:'0000ff',blueviolet:'8a2be2',brown:'a52a2a',burlywood:'deb887',cadetblue:'5f9ea0',chartreuse:'7fff00',chocolate:'d2691e',coral:'ff7f50',cornflowerblue:'6495ed',cornsilk:'fff8dc',crimson:'dc143c',cyan:'00ffff',darkblue:'00008b',darkcyan:'008b8b',darkgoldenrod:'b8860b',darkgray:'a9a9a9',darkgreen:'006400',darkkhaki:'bdb76b',darkmagenta:'8b008b',darkolivegreen:'556b2f',darkorange:'ff8c00',darkorchid:'9932cc',darkred:'8b0000',darksalmon:'e9967a',darkseagreen:'8fbc8f',darkslateblue:'483d8b',darkslategray:'2f4f4f',darkturquoise:'00ced1',darkviolet:'9400d3',deeppink:'ff1493',deepskyblue:'00bfff',dimgray:'696969',dodgerblue:'1e90ff',feldspar:'d19275',firebrick:'b22222',floralwhite:'fffaf0',forestgreen:'228b22',fuchsia:'ff00ff',gainsboro:'dcdcdc',ghostwhite:'f8f8ff',gold:'ffd700',goldenrod:'daa520',gray:'808080',green:'008000',greenyellow:'adff2f',honeydew:'f0fff0',hotpink:'ff69b4',indianred:'cd5c5c',indigo:'4b0082',ivory:'fffff0',khaki:'f0e68c',lavender:'e6e6fa',lavenderblush:'fff0f5',lawngreen:'7cfc00',lemonchiffon:'fffacd',lightblue:'add8e6',lightcoral:'f08080',lightcyan:'e0ffff',lightgoldenrodyellow:'fafad2',lightgrey:'d3d3d3',lightgreen:'90ee90',lightpink:'ffb6c1',lightsalmon:'ffa07a',lightseagreen:'20b2aa',lightskyblue:'87cefa',lightslateblue:'8470ff',lightslategray:'778899',lightsteelblue:'b0c4de',lightyellow:'ffffe0',lime:'00ff00',limegreen:'32cd32',linen:'faf0e6',magenta:'ff00ff',maroon:'800000',mediumaquamarine:'66cdaa',mediumblue:'0000cd',mediumorchid:'ba55d3',mediumpurple:'9370d8',mediumseagreen:'3cb371',mediumslateblue:'7b68ee',mediumspringgreen:'00fa9a',mediumturquoise:'48d1cc',mediumvioletred:'c71585',midnightblue:'191970',mintcream:'f5fffa',mistyrose:'ffe4e1',moccasin:'ffe4b5',navajowhite:'ffdead',navy:'000080',oldlace:'fdf5e6',olive:'808000',olivedrab:'6b8e23',orange:'ffa500',orangered:'ff4500',orchid:'da70d6',palegoldenrod:'eee8aa',palegreen:'98fb98',paleturquoise:'afeeee',palevioletred:'d87093',papayawhip:'ffefd5',peachpuff:'ffdab9',peru:'cd853f',pink:'ffc0cb',plum:'dda0dd',powderblue:'b0e0e6',purple:'800080',red:'ff0000',rosybrown:'bc8f8f',royalblue:'4169e1',saddlebrown:'8b4513',salmon:'fa8072',sandybrown:'f4a460',seagreen:'2e8b57',seashell:'fff5ee',sienna:'a0522d',silver:'c0c0c0',skyblue:'87ceeb',slateblue:'6a5acd',slategray:'708090',snow:'fffafa',springgreen:'00ff7f',steelblue:'4682b4',tan:'d2b48c',teal:'008080',thistle:'d8bfd8',tomato:'ff6347',turquoise:'40e0d0',violet:'ee82ee',violetred:'d02090',wheat:'f5deb3',white:'ffffff',whitesmoke:'f5f5f5',yellow:'ffff00',yellowgreen:'9acd32'};if(color_names[color]){color="#"+color_names[color];} +if(color.substr&&color.substr(0,1)==="#"){color=color.substr(1);var len=color.length;if(len===6){red=parseInt("0x"+color.substr(0,2),16)/255.0;green=parseInt("0x"+color.substr(2,2),16)/255.0;blue=parseInt("0x"+color.substr(4,2),16)/255.0;} +else if(len===3){red=parseInt("0x"+color.substr(0,1),16)/15.0;green=parseInt("0x"+color.substr(1,1),16)/15.0;blue=parseInt("0x"+color.substr(2,1),16)/15.0;}} +return new x3dom.fields.SFColor(red,green,blue);};x3dom.fields.SFColorRGBA=function(r,g,b,a){if(arguments.length===0){this.r=0;this.g=0;this.b=0;this.a=1;} +else{this.r=r;this.g=g;this.b=b;this.a=a;}};x3dom.fields.SFColorRGBA.parse=function(str){try{var m=/^([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)$/.exec(str);return new x3dom.fields.SFColorRGBA(+m[1],+m[2],+m[3],+m[4]);} +catch(e){return x3dom.fields.SFColorRGBA.colorParse(str);}};x3dom.fields.SFColorRGBA.copy=function(that){return new x3dom.fields.SFColorRGBA(that.r,that.g,that.b,that.a);};x3dom.fields.SFColorRGBA.prototype.copy=function(){return x3dom.fields.SFColorRGBA.copy(this);};x3dom.fields.SFColorRGBA.prototype.setValues=function(color){this.r=color.r;this.g=color.g;this.b=color.b;this.a=color.a;};x3dom.fields.SFColorRGBA.prototype.equals=function(that,eps){return Math.abs(this.r-that.r)<eps&&Math.abs(this.g-that.g)<eps&&Math.abs(this.b-that.b)<eps&&Math.abs(this.a-that.a)<eps;};x3dom.fields.SFColorRGBA.prototype.toGL=function(){return[this.r,this.g,this.b,this.a];};x3dom.fields.SFColorRGBA.prototype.toString=function(){return this.r+" "+this.g+" "+this.b+" "+this.a;};x3dom.fields.SFColorRGBA.prototype.setValueByStr=function(str){try{var m=/^([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)\s*,?\s*([+\-]?\d*\.*\d*[eE]?[+\-]?\d*?)$/.exec(str);this.r=+m[1];this.g=+m[2];this.b=+m[3];this.a=+m[4];} +catch(e){var c=x3dom.fields.SFColorRGBA.colorParse(str);this.r=c.r;this.g=c.g;this.b=c.b;this.a=c.a;} +return this;};x3dom.fields.SFColorRGBA.prototype.toUint=function(){return((Math.round(this.r*255)<<24)|(Math.round(this.g*255)<<16)|(Math.round(this.b*255)<<8)|Math.round(this.a*255))>>>0;};x3dom.fields.SFColorRGBA.colorParse=function(color){var red=0,green=0,blue=0,alpha=0;var color_names={aliceblue:'f0f8ff',antiquewhite:'faebd7',aqua:'00ffff',aquamarine:'7fffd4',azure:'f0ffff',beige:'f5f5dc',bisque:'ffe4c4',black:'000000',blanchedalmond:'ffebcd',blue:'0000ff',blueviolet:'8a2be2',brown:'a52a2a',burlywood:'deb887',cadetblue:'5f9ea0',chartreuse:'7fff00',chocolate:'d2691e',coral:'ff7f50',cornflowerblue:'6495ed',cornsilk:'fff8dc',crimson:'dc143c',cyan:'00ffff',darkblue:'00008b',darkcyan:'008b8b',darkgoldenrod:'b8860b',darkgray:'a9a9a9',darkgreen:'006400',darkkhaki:'bdb76b',darkmagenta:'8b008b',darkolivegreen:'556b2f',darkorange:'ff8c00',darkorchid:'9932cc',darkred:'8b0000',darksalmon:'e9967a',darkseagreen:'8fbc8f',darkslateblue:'483d8b',darkslategray:'2f4f4f',darkturquoise:'00ced1',darkviolet:'9400d3',deeppink:'ff1493',deepskyblue:'00bfff',dimgray:'696969',dodgerblue:'1e90ff',feldspar:'d19275',firebrick:'b22222',floralwhite:'fffaf0',forestgreen:'228b22',fuchsia:'ff00ff',gainsboro:'dcdcdc',ghostwhite:'f8f8ff',gold:'ffd700',goldenrod:'daa520',gray:'808080',green:'008000',greenyellow:'adff2f',honeydew:'f0fff0',hotpink:'ff69b4',indianred:'cd5c5c',indigo:'4b0082',ivory:'fffff0',khaki:'f0e68c',lavender:'e6e6fa',lavenderblush:'fff0f5',lawngreen:'7cfc00',lemonchiffon:'fffacd',lightblue:'add8e6',lightcoral:'f08080',lightcyan:'e0ffff',lightgoldenrodyellow:'fafad2',lightgrey:'d3d3d3',lightgreen:'90ee90',lightpink:'ffb6c1',lightsalmon:'ffa07a',lightseagreen:'20b2aa',lightskyblue:'87cefa',lightslateblue:'8470ff',lightslategray:'778899',lightsteelblue:'b0c4de',lightyellow:'ffffe0',lime:'00ff00',limegreen:'32cd32',linen:'faf0e6',magenta:'ff00ff',maroon:'800000',mediumaquamarine:'66cdaa',mediumblue:'0000cd',mediumorchid:'ba55d3',mediumpurple:'9370d8',mediumseagreen:'3cb371',mediumslateblue:'7b68ee',mediumspringgreen:'00fa9a',mediumturquoise:'48d1cc',mediumvioletred:'c71585',midnightblue:'191970',mintcream:'f5fffa',mistyrose:'ffe4e1',moccasin:'ffe4b5',navajowhite:'ffdead',navy:'000080',oldlace:'fdf5e6',olive:'808000',olivedrab:'6b8e23',orange:'ffa500',orangered:'ff4500',orchid:'da70d6',palegoldenrod:'eee8aa',palegreen:'98fb98',paleturquoise:'afeeee',palevioletred:'d87093',papayawhip:'ffefd5',peachpuff:'ffdab9',peru:'cd853f',pink:'ffc0cb',plum:'dda0dd',powderblue:'b0e0e6',purple:'800080',red:'ff0000',rosybrown:'bc8f8f',royalblue:'4169e1',saddlebrown:'8b4513',salmon:'fa8072',sandybrown:'f4a460',seagreen:'2e8b57',seashell:'fff5ee',sienna:'a0522d',silver:'c0c0c0',skyblue:'87ceeb',slateblue:'6a5acd',slategray:'708090',snow:'fffafa',springgreen:'00ff7f',steelblue:'4682b4',tan:'d2b48c',teal:'008080',thistle:'d8bfd8',tomato:'ff6347',turquoise:'40e0d0',violet:'ee82ee',violetred:'d02090',wheat:'f5deb3',white:'ffffff',whitesmoke:'f5f5f5',yellow:'ffff00',yellowgreen:'9acd32'};if(color_names[color]){color="#"+color_names[color]+"ff";} +if(color.substr&&color.substr(0,1)==="#"){color=color.substr(1);var len=color.length;if(len===8){red=parseInt("0x"+color.substr(0,2),16)/255.0;green=parseInt("0x"+color.substr(2,2),16)/255.0;blue=parseInt("0x"+color.substr(4,2),16)/255.0;alpha=parseInt("0x"+color.substr(6,2),16)/255.0;} +else if(len===6){red=parseInt("0x"+color.substr(0,2),16)/255.0;green=parseInt("0x"+color.substr(2,2),16)/255.0;blue=parseInt("0x"+color.substr(4,2),16)/255.0;alpha=1.0;} +else if(len===4){red=parseInt("0x"+color.substr(0,1),16)/15.0;green=parseInt("0x"+color.substr(1,1),16)/15.0;blue=parseInt("0x"+color.substr(2,1),16)/15.0;alpha=parseInt("0x"+color.substr(3,1),16)/15.0;} +else if(len===3){red=parseInt("0x"+color.substr(0,1),16)/15.0;green=parseInt("0x"+color.substr(1,1),16)/15.0;blue=parseInt("0x"+color.substr(2,1),16)/15.0;alpha=1.0;}} +return new x3dom.fields.SFColorRGBA(red,green,blue,alpha);};x3dom.fields.SFImage=function(w,h,c,arr){if(arguments.length===0||!(arr&&arr.map)){this.width=0;this.height=0;this.comp=0;this.array=[];} +else{this.width=w;this.height=h;this.comp=c;var that=this.array;arr.map(function(v){that.push(v);},this.array);}};x3dom.fields.SFImage.parse=function(str){var img=new x3dom.fields.SFImage();img.setValueByStr(str);return img;};x3dom.fields.SFImage.copy=function(that){var destination=new x3dom.fields.SFImage();destination.width=that.width;destination.height=that.height;destination.comp=that.comp;destination.setPixels(that.array);return destination;};x3dom.fields.SFImage.prototype.copy=function(){return x3dom.fields.SFImage.copy(this);};x3dom.fields.SFImage.prototype.setValueByStr=function(str){var mc=str.match(/(\w+)/g);var n=mc.length;var c2=0;var hex="0123456789ABCDEF";this.array=[];if(n>2){this.width=+mc[0];this.height=+mc[1];this.comp=+mc[2];c2=2*this.comp;}else{this.width=0;this.height=0;this.comp=0;return;} +var len,i;for(i=3;i<n;i++){var r,g,b,a;if(!mc[i].substr){continue;} +if(mc[i].substr(1,1).toLowerCase()!=="x"){var inp=parseInt(mc[i],10);if(this.comp===1){r=inp;this.array.push(r);} +else if(this.comp===2){r=inp>>8&255;g=inp&255;this.array.push(r,g);} +else if(this.comp===3){r=inp>>16&255;g=inp>>8&255;b=inp&255;this.array.push(r,g,b);} +else if(this.comp===4){r=inp>>24&255;g=inp>>16&255;b=inp>>8&255;a=inp&255;this.array.push(r,g,b,a);}} +else if(mc[i].substr(1,1).toLowerCase()==="x"){mc[i]=mc[i].substr(2);len=mc[i].length;if(len===c2){if(this.comp===1){r=parseInt("0x"+mc[i].substr(0,2),16);this.array.push(r);} +else if(this.comp===2){r=parseInt("0x"+mc[i].substr(0,2),16);g=parseInt("0x"+mc[i].substr(2,2),16);this.array.push(r,g);} +else if(this.comp===3){r=parseInt("0x"+mc[i].substr(0,2),16);g=parseInt("0x"+mc[i].substr(2,2),16);b=parseInt("0x"+mc[i].substr(4,2),16);this.array.push(r,g,b);} +else if(this.comp===4){r=parseInt("0x"+mc[i].substr(0,2),16);g=parseInt("0x"+mc[i].substr(2,2),16);b=parseInt("0x"+mc[i].substr(4,2),16);a=parseInt("0x"+mc[i].substr(6,2),16);this.array.push(r,g,b,a);}}}}};x3dom.fields.SFImage.prototype.setPixel=function(x,y,color){var startIdx=(y*this.width+x)*this.comp;if(this.comp===1&&startIdx<this.array.length){this.array[startIdx]=color.r*255;} +else if(this.comp===2&&(startIdx+1)<this.array.length){this.array[startIdx]=color.r*255;this.array[startIdx+1]=color.g*255;} +else if(this.comp===3&&(startIdx+2)<this.array.length){this.array[startIdx]=color.r*255;this.array[startIdx+1]=color.g*255;this.array[startIdx+2]=color.b*255;} +else if(this.comp===4&&(startIdx+3)<this.array.length){this.array[startIdx]=color.r*255;this.array[startIdx+1]=color.g*255;this.array[startIdx+2]=color.b*255;this.array[startIdx+3]=color.a*255;}};x3dom.fields.SFImage.prototype.getPixel=function(x,y){var startIdx=(y*this.width+x)*this.comp;if(this.comp===1&&startIdx<this.array.length){return new x3dom.fields.SFColorRGBA(this.array[startIdx]/255,0,0,1);} +else if(this.comp===2&&(startIdx+1)<this.array.length){return new x3dom.fields.SFColorRGBA(this.array[startIdx]/255,this.array[startIdx+1]/255,0,1);} +else if(this.comp===3&&(startIdx+2)<this.array.length){return new x3dom.fields.SFColorRGBA(this.array[startIdx]/255,this.array[startIdx+1]/255,this.array[startIdx+2]/255,1);} +else if(this.comp===4&&(startIdx+3)<this.array.length){return new x3dom.fields.SFColorRGBA(this.array[startIdx]/255,this.array[startIdx+1]/255,this.array[startIdx+2]/255,this.array[startIdx+3]/255);}};x3dom.fields.SFImage.prototype.setPixels=function(pixels){var i,idx=0;if(this.comp===1){for(i=0;i<pixels.length;i++){this.array[idx++]=pixels[i].r*255;}} +else if(this.comp===2){for(i=0;i<pixels.length;i++){this.array[idx++]=pixels[i].r*255;this.array[idx++]=pixels[i].g*255;}} +else if(this.comp===3){for(i=0;i<pixels.length;i++){this.array[idx++]=pixels[i].r*255;this.array[idx++]=pixels[i].g*255;this.array[idx++]=pixels[i].b*255;}} +else if(this.comp===4){for(i=0;i<pixels.length;i++){this.array[idx++]=pixels[i].r*255;this.array[idx++]=pixels[i].g*255;this.array[idx++]=pixels[i].b*255;this.array[idx++]=pixels[i].a*255;}}};x3dom.fields.SFImage.prototype.getPixels=function(){var i;var pixels=[];if(this.comp===1){for(i=0;i<this.array.length;i+=this.comp){pixels.push(new x3dom.fields.SFColorRGBA(this.array[i]/255,0,0,1));}} +else if(this.comp===2){for(i=0;i<this.array.length;i+=this.comp){pixels.push(new x3dom.fields.SFColorRGBA(this.array[i]/255,this.array[i+1]/255,0,1));}} +else if(this.comp===3){for(i=0;i<this.array.length;i+=this.comp){pixels.push(new x3dom.fields.SFColorRGBA(this.array[i]/255,this.array[i+1]/255,this.array[i+2]/255,1));}} +else if(this.comp===4){for(i=0;i<this.array.length;i+=this.comp){pixels.push(new x3dom.fields.SFColorRGBA(this.array[i]/255,this.array[i+1]/255,this.array[i+2]/255,this.array[i+3]/255));}} +return pixels;};x3dom.fields.SFImage.prototype.toGL=function(){var a=[];Array.map(this.array,function(c){a.push(c);});return a;};x3dom.fields.MFColor=function(colorArray){if(colorArray){var that=this;colorArray.map(function(c){that.push(c);},this);}};x3dom.fields.MFColor.copy=function(colorArray){var destination=new x3dom.fields.MFColor();colorArray.map(function(v){destination.push(v.copy());},this);return destination;};x3dom.fields.MFColor.prototype=x3dom.extend([]);x3dom.fields.MFColor.parse=function(str){var mc=str.match(/([+\-0-9eE\.]+)/g);var colors=[];for(var i=0,n=mc?mc.length:0;i<n;i+=3){colors.push(new x3dom.fields.SFColor(+mc[i+0],+mc[i+1],+mc[i+2]));} +return new x3dom.fields.MFColor(colors);};x3dom.fields.MFColor.prototype.copy=function(){return x3dom.fields.MFColor.copy(this);};x3dom.fields.MFColor.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/([+\-0-9eE\.]+)/g);for(var i=0,n=mc?mc.length:0;i<n;i+=3){this.push(new x3dom.fields.SFColor(+mc[i+0],+mc[i+1],+mc[i+2]));}};x3dom.fields.MFColor.prototype.toGL=function(){var a=[];Array.map(this,function(c){a.push(c.r);a.push(c.g);a.push(c.b);});return a;};x3dom.fields.MFColorRGBA=function(colorArray){if(colorArray){var that=this;colorArray.map(function(c){that.push(c);},this);}};x3dom.fields.MFColorRGBA.copy=function(colorArray){var destination=new x3dom.fields.MFColorRGBA();colorArray.map(function(v){destination.push(v.copy());},this);return destination;};x3dom.fields.MFColorRGBA.prototype=x3dom.extend([]);x3dom.fields.MFColorRGBA.parse=function(str){var mc=str.match(/([+\-0-9eE\.]+)/g);var colors=[];for(var i=0,n=mc?mc.length:0;i<n;i+=4){colors.push(new x3dom.fields.SFColorRGBA(+mc[i+0],+mc[i+1],+mc[i+2],+mc[i+3]));} +return new x3dom.fields.MFColorRGBA(colors);};x3dom.fields.MFColorRGBA.prototype.copy=function(){return x3dom.fields.MFColorRGBA.copy(this);};x3dom.fields.MFColorRGBA.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/([+\-0-9eE\.]+)/g);for(var i=0,n=mc?mc.length:0;i<n;i+=4){this.push(new x3dom.fields.SFColorRGBA(+mc[i+0],+mc[i+1],+mc[i+2],+mc[i+3]));}};x3dom.fields.MFColorRGBA.prototype.toGL=function(){var a=[];Array.map(this,function(c){a.push(c.r);a.push(c.g);a.push(c.b);a.push(c.a);});return a;};x3dom.fields.MFRotation=function(rotArray){if(rotArray){var that=this;rotArray.map(function(v){that.push(v);},this);}};x3dom.fields.MFRotation.prototype=x3dom.extend([]);x3dom.fields.MFRotation.copy=function(rotationArray){var destination=new x3dom.fields.MFRotation();rotationArray.map(function(v){destination.push(v.copy());},this);return destination;};x3dom.fields.MFRotation.prototype.copy=function(){return x3dom.fields.MFRotation.copy(this);};x3dom.fields.MFRotation.parse=function(str){var mc=str.match(/([+\-0-9eE\.]+)/g);var vecs=[];for(var i=0,n=mc?mc.length:0;i<n;i+=4){vecs.push(x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(+mc[i+0],+mc[i+1],+mc[i+2]),+mc[i+3]));} +return new x3dom.fields.MFRotation(vecs);};x3dom.fields.MFRotation.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/([+\-0-9eE\.]+)/g);for(var i=0,n=mc?mc.length:0;i<n;i+=4){this.push(x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(+mc[i+0],+mc[i+1],+mc[i+2]),+mc[i+3]));}};x3dom.fields.MFRotation.prototype.toGL=function(){var a=[];Array.map(this,function(c){var val=c.toAxisAngle();a.push(val[0].x);a.push(val[0].y);a.push(val[0].z);a.push(val[1]);});return a;};x3dom.fields.MFVec3f=function(vec3Array){if(vec3Array){var that=this;vec3Array.map(function(v){that.push(v);},this);}};x3dom.fields.MFVec3f.prototype=x3dom.extend([]);x3dom.fields.MFVec3f.copy=function(vec3Array){var destination=new x3dom.fields.MFVec3f();vec3Array.map(function(v){destination.push(v.copy());},this);return destination;};x3dom.fields.MFVec3f.parse=function(str){var mc=str.match(/([+\-0-9eE\.]+)/g);var vecs=[];for(var i=0,n=mc?mc.length:0;i<n;i+=3){vecs.push(new x3dom.fields.SFVec3f(+mc[i+0],+mc[i+1],+mc[i+2]));} +return new x3dom.fields.MFVec3f(vecs);};x3dom.fields.MFVec3f.prototype.copy=function() +{x3dom.fields.MFVec3f.copy(this);};x3dom.fields.MFVec3f.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/([+\-0-9eE\.]+)/g);for(var i=0,n=mc?mc.length:0;i<n;i+=3){this.push(new x3dom.fields.SFVec3f(+mc[i+0],+mc[i+1],+mc[i+2]));}};x3dom.fields.MFVec3f.prototype.toGL=function(){var a=[];Array.map(this,function(c){a.push(c.x);a.push(c.y);a.push(c.z);});return a;};x3dom.fields.MFVec2f=function(vec2Array){if(vec2Array){var that=this;vec2Array.map(function(v){that.push(v);},this);}};x3dom.fields.MFVec2f.prototype=x3dom.extend([]);x3dom.fields.MFVec2f.copy=function(vec2Array){var destination=new x3dom.fields.MFVec2f();vec2Array.map(function(v){destination.push(v.copy());},this);return destination;};x3dom.fields.MFVec2f.parse=function(str){var mc=str.match(/([+\-0-9eE\.]+)/g);var vecs=[];for(var i=0,n=mc?mc.length:0;i<n;i+=2){vecs.push(new x3dom.fields.SFVec2f(+mc[i+0],+mc[i+1]));} +return new x3dom.fields.MFVec2f(vecs);};x3dom.fields.MFVec2f.prototype.copy=function(){return x3dom.fields.MFVec2f.copy(this);};x3dom.fields.MFVec2f.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/([+\-0-9eE\.]+)/g);for(var i=0,n=mc?mc.length:0;i<n;i+=2){this.push(new x3dom.fields.SFVec2f(+mc[i+0],+mc[i+1]));}};x3dom.fields.MFVec2f.prototype.toGL=function(){var a=[];Array.map(this,function(v){a.push(v.x);a.push(v.y);});return a;};x3dom.fields.MFInt32=function(array){if(array){var that=this;array.map(function(v){that.push(v);},this);}};x3dom.fields.MFInt32.prototype=x3dom.extend([]);x3dom.fields.MFInt32.copy=function(intArray){var destination=new x3dom.fields.MFInt32();intArray.map(function(v){destination.push(v);},this);return destination;};x3dom.fields.MFInt32.parse=function(str){var mc=str.match(/([+\-]?\d+\s*){1},?\s*/g);var vals=[];for(var i=0,n=mc?mc.length:0;i<n;++i){vals.push(parseInt(mc[i],10));} +return new x3dom.fields.MFInt32(vals);};x3dom.fields.MFInt32.prototype.copy=function(){return x3dom.fields.MFInt32.copy(this);};x3dom.fields.MFInt32.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/([+\-]?\d+\s*){1},?\s*/g);for(var i=0,n=mc?mc.length:0;i<n;++i){this.push(parseInt(mc[i],10));}};x3dom.fields.MFInt32.prototype.toGL=function(){var a=[];Array.map(this,function(v){a.push(v);});return a;};x3dom.fields.MFFloat=function(array){if(array){var that=this;array.map(function(v){that.push(v);},this);}};x3dom.fields.MFFloat.prototype=x3dom.extend([]);x3dom.fields.MFFloat.copy=function(floatArray){var destination=new x3dom.fields.MFFloat();floatArray.map(function(v){destination.push(v);},this);return destination;};x3dom.fields.MFFloat.parse=function(str){var mc=str.match(/([+\-0-9eE\.]+)/g);var vals=[];for(var i=0,n=mc?mc.length:0;i<n;i++){vals.push(+mc[i]);} +return new x3dom.fields.MFFloat(vals);};x3dom.fields.MFFloat.prototype.copy=function(){return x3dom.fields.MFFloat.copy(this);};x3dom.fields.MFFloat.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/([+\-0-9eE\.]+)/g);for(var i=0,n=mc?mc.length:0;i<n;i++){this.push(+mc[i]);}};x3dom.fields.MFFloat.prototype.toGL=function(){var a=[];Array.map(this,function(v){a.push(v);});return a;};x3dom.fields.MFBoolean=function(array){if(array){var that=this;array.map(function(v){that.push(v);},this);}};x3dom.fields.MFBoolean.prototype=x3dom.extend([]);x3dom.fields.MFBoolean.copy=function(boolArray){var destination=new x3dom.fields.MFBoolean();boolArray.map(function(v){destination.push(v);},this);return destination;};x3dom.fields.MFBoolean.parse=function(str){var mc=str.match(/(true|false|1|0)/ig);var vals=[];for(var i=0,n=mc?mc.length:0;i<n;i++){vals.push((mc[i]=='1'||mc[i].toLowerCase()=='true'));} +return new x3dom.fields.MFBoolean(vals);};x3dom.fields.MFBoolean.prototype.copy=function(){return x3dom.fields.MFBoolean.copy(this);};x3dom.fields.MFBoolean.prototype.setValueByStr=function(str){this.length=0;var mc=str.match(/(true|false|1|0)/ig);for(var i=0,n=mc?mc.length:0;i<n;i++){this.push((mc[i]=='1'||mc[i].toLowerCase()=='true'));}};x3dom.fields.MFBoolean.prototype.toGL=function(){var a=[];Array.map(this,function(v){a.push(v?1:0);});return a;};x3dom.fields.MFString=function(strArray){if(strArray&&strArray.map){var that=this;strArray.map(function(v){that.push(v);},this);}};x3dom.fields.MFString.prototype=x3dom.extend([]);x3dom.fields.MFString.copy=function(stringArray){var destination=new x3dom.fields.MFString();stringArray.map(function(v){destination.push(v);},this);return destination;};x3dom.fields.MFString.parse=function(str){var arr=[];if(str.length&&str[0]=='"'){var m,re=/"((?:[^\\"]|\\\\|\\")*)"/g;while((m=re.exec(str))){var s=m[1].replace(/\\([\\"])/,"$1");if(s!==undefined){arr.push(s);}}} +else{arr.push(str);} +return new x3dom.fields.MFString(arr);};x3dom.fields.MFString.prototype.copy=function(){return x3dom.fields.MFString.copy(this);};x3dom.fields.MFString.prototype.setValueByStr=function(str){this.length=0;if(str.length&&str[0]=='"'){var m,re=/"((?:[^\\"]|\\\\|\\")*)"/g;while((m=re.exec(str))){var s=m[1].replace(/\\([\\"])/,"$1");if(s!==undefined){this.push(s);}}} +else{this.push(str);} +return this;};x3dom.fields.MFString.prototype.toString=function(){var str="";for(var i=0,n=this.length;i<n;i++){str=str+this[i]+" ";} +return str;};x3dom.fields.SFNode=function(type){this.type=type;this.node=null;};x3dom.fields.SFNode.prototype.hasLink=function(node){return(node?(this.node===node):this.node);};x3dom.fields.SFNode.prototype.addLink=function(node){this.node=node;return true;};x3dom.fields.SFNode.prototype.rmLink=function(node){if(this.node===node){this.node=null;return true;} +else{return false;}};x3dom.fields.MFNode=function(type){this.type=type;this.nodes=[];};x3dom.fields.MFNode.prototype.hasLink=function(node){if(node){for(var i=0,n=this.nodes.length;i<n;i++){if(this.nodes[i]===node){return true;}}} +else{return(this.length>0);} +return false;};x3dom.fields.MFNode.prototype.addLink=function(node){this.nodes.push(node);return true;};x3dom.fields.MFNode.prototype.rmLink=function(node){for(var i=0,n=this.nodes.length;i<n;i++){if(this.nodes[i]===node){this.nodes.splice(i,1);return true;}} +return false;};x3dom.fields.MFNode.prototype.length=function(){return this.nodes.length;};x3dom.fields.Line=function(pos,dir) +{if(arguments.length===0) +{this.pos=new x3dom.fields.SFVec3f(0,0,0);this.dir=new x3dom.fields.SFVec3f(0,0,1);} +this.pos=x3dom.fields.SFVec3f.copy(pos);this.dir=x3dom.fields.SFVec3f.copy(dir);};x3dom.fields.Line.prototype.closestPoint=function(p) +{var distVec=p.subtract(this.pos);var projDist=distVec.dot(this.dir);return this.pos.add(this.dir.multiply(projDist));};x3dom.fields.Line.prototype.shortestDistance=function(p) +{var distVec=p.subtract(this.pos);var projDist=distVec.dot(this.dir);return distVec.subtract(this.dir.multiply(projDist)).length();};x3dom.fields.Ray=function(pos,dir) +{if(arguments.length===0) +{this.pos=new x3dom.fields.SFVec3f(0,0,0);this.dir=new x3dom.fields.SFVec3f(0,0,1);} +else +{this.pos=new x3dom.fields.SFVec3f(pos.x,pos.y,pos.z);var n=dir.length();if(n){n=1.0/n;} +this.dir=new x3dom.fields.SFVec3f(dir.x*n,dir.y*n,dir.z*n);} +this.enter=0;this.exit=0;this.hitObject=null;this.hitPoint={};this.dist=Number.MAX_VALUE;};x3dom.fields.Ray.prototype.toString=function(){return'Ray: ['+this.pos.toString()+'; '+this.dir.toString()+']';};x3dom.fields.Ray.prototype.intersectPlane=function(p,n) +{var result=null;var alpha;var nDotDir=n.dot(this.dir);if(nDotDir<0.0) +{alpha=(p.dot(n)-this.pos.dot(n))/nDotDir;result=this.pos.addScaled(this.dir,alpha);} +return result;};x3dom.fields.Ray.prototype.intersect=function(low,high) +{var isect=0.0;var out=Number.MAX_VALUE;var r,te,tl;if(this.dir.x>x3dom.fields.Eps) +{r=1.0/this.dir.x;te=(low.x-this.pos.x)*r;tl=(high.x-this.pos.x)*r;if(tl<out){out=tl;} +if(te>isect){isect=te;}} +else if(this.dir.x<-x3dom.fields.Eps) +{r=1.0/this.dir.x;te=(high.x-this.pos.x)*r;tl=(low.x-this.pos.x)*r;if(tl<out){out=tl;} +if(te>isect){isect=te;}} +else if(this.pos.x<low.x||this.pos.x>high.x) +{return false;} +if(this.dir.y>x3dom.fields.Eps) +{r=1.0/this.dir.y;te=(low.y-this.pos.y)*r;tl=(high.y-this.pos.y)*r;if(tl<out){out=tl;} +if(te>isect){isect=te;} +if(isect-out>=x3dom.fields.Eps){return false;}} +else if(this.dir.y<-x3dom.fields.Eps) +{r=1.0/this.dir.y;te=(high.y-this.pos.y)*r;tl=(low.y-this.pos.y)*r;if(tl<out){out=tl;} +if(te>isect){isect=te;} +if(isect-out>=x3dom.fields.Eps){return false;}} +else if(this.pos.y<low.y||this.pos.y>high.y) +{return false;} +if(this.dir.z>x3dom.fields.Eps) +{r=1.0/this.dir.z;te=(low.z-this.pos.z)*r;tl=(high.z-this.pos.z)*r;if(tl<out){out=tl;} +if(te>isect){isect=te;}} +else if(this.dir.z<-x3dom.fields.Eps) +{r=1.0/this.dir.z;te=(high.z-this.pos.z)*r;tl=(low.z-this.pos.z)*r;if(tl<out){out=tl;} +if(te>isect){isect=te;}} +else if(this.pos.z<low.z||this.pos.z>high.z) +{return false;} +this.enter=isect;this.exit=out;return(isect-out<x3dom.fields.Eps);};x3dom.fields.BoxVolume=function(min,max) +{if(arguments.length<2){this.min=new x3dom.fields.SFVec3f(0,0,0);this.max=new x3dom.fields.SFVec3f(0,0,0);this.valid=false;} +else{this.min=x3dom.fields.SFVec3f.copy(min);this.max=x3dom.fields.SFVec3f.copy(max);this.valid=true;} +this.updateInternals();};x3dom.fields.BoxVolume.prototype.getScalarValue=function() +{var extent=this.max.subtract(this.min);return(extent.x*extent.y*extent.z);};x3dom.fields.BoxVolume.copy=function(other) +{return new x3dom.fields.BoxVolume(other.min,other.max);};x3dom.fields.BoxVolume.prototype.updateInternals=function() +{this.radialVec=this.max.subtract(this.min).multiply(0.5);this.center=this.min.add(this.radialVec);this.diameter=2*this.radialVec.length();};x3dom.fields.BoxVolume.prototype.setBounds=function(min,max) +{this.min.setValues(min);this.max.setValues(max);this.updateInternals();this.valid=true;};x3dom.fields.BoxVolume.prototype.setBoundsByCenterSize=function(center,size) +{var halfSize=size.multiply(0.5);this.min=center.subtract(halfSize);this.max=center.add(halfSize);this.updateInternals();this.valid=true;};x3dom.fields.BoxVolume.prototype.extendBounds=function(min,max) +{if(this.valid) +{if(this.min.x>min.x){this.min.x=min.x;} +if(this.min.y>min.y){this.min.y=min.y;} +if(this.min.z>min.z){this.min.z=min.z;} +if(this.max.x<max.x){this.max.x=max.x;} +if(this.max.y<max.y){this.max.y=max.y;} +if(this.max.z<max.z){this.max.z=max.z;} +this.updateInternals();} +else +{this.setBounds(min,max);}};x3dom.fields.BoxVolume.prototype.getBounds=function(min,max) +{min.setValues(this.min);max.setValues(this.max);};x3dom.fields.BoxVolume.prototype.getRadialVec=function() +{return this.radialVec;};x3dom.fields.BoxVolume.prototype.invalidate=function() +{this.valid=false;};x3dom.fields.BoxVolume.prototype.isValid=function() +{return this.valid;};x3dom.fields.BoxVolume.prototype.getCenter=function() +{return this.center;};x3dom.fields.BoxVolume.prototype.getDiameter=function() +{return this.diameter;};x3dom.fields.BoxVolume.prototype.transform=function(m) +{var xmin,ymin,zmin;var xmax,ymax,zmax;xmin=xmax=m._03;ymin=ymax=m._13;zmin=zmax=m._23;var a=this.max.x*m._00;var b=this.min.x*m._00;if(a>=b){xmax+=a;xmin+=b;} +else{xmax+=b;xmin+=a;} +a=this.max.y*m._01;b=this.min.y*m._01;if(a>=b){xmax+=a;xmin+=b;} +else{xmax+=b;xmin+=a;} +a=this.max.z*m._02;b=this.min.z*m._02;if(a>=b){xmax+=a;xmin+=b;} +else{xmax+=b;xmin+=a;} +a=this.max.x*m._10;b=this.min.x*m._10;if(a>=b){ymax+=a;ymin+=b;} +else{ymax+=b;ymin+=a;} +a=this.max.y*m._11;b=this.min.y*m._11;if(a>=b){ymax+=a;ymin+=b;} +else{ymax+=b;ymin+=a;} +a=this.max.z*m._12;b=this.min.z*m._12;if(a>=b){ymax+=a;ymin+=b;} +else{ymax+=b;ymin+=a;} +a=this.max.x*m._20;b=this.min.x*m._20;if(a>=b){zmax+=a;zmin+=b;} +else{zmax+=b;zmin+=a;} +a=this.max.y*m._21;b=this.min.y*m._21;if(a>=b){zmax+=a;zmin+=b;} +else{zmax+=b;zmin+=a;} +a=this.max.z*m._22;b=this.min.z*m._22;if(a>=b){zmax+=a;zmin+=b;} +else{zmax+=b;zmin+=a;} +this.min.x=xmin;this.min.y=ymin;this.min.z=zmin;this.max.x=xmax;this.max.y=ymax;this.max.z=zmax;this.updateInternals();};x3dom.fields.BoxVolume.prototype.transformFrom=function(m,other) +{var xmin,ymin,zmin;var xmax,ymax,zmax;xmin=xmax=m._03;ymin=ymax=m._13;zmin=zmax=m._23;var a=other.max.x*m._00;var b=other.min.x*m._00;if(a>=b){xmax+=a;xmin+=b;} +else{xmax+=b;xmin+=a;} +a=other.max.y*m._01;b=other.min.y*m._01;if(a>=b){xmax+=a;xmin+=b;} +else{xmax+=b;xmin+=a;} +a=other.max.z*m._02;b=other.min.z*m._02;if(a>=b){xmax+=a;xmin+=b;} +else{xmax+=b;xmin+=a;} +a=other.max.x*m._10;b=other.min.x*m._10;if(a>=b){ymax+=a;ymin+=b;} +else{ymax+=b;ymin+=a;} +a=other.max.y*m._11;b=other.min.y*m._11;if(a>=b){ymax+=a;ymin+=b;} +else{ymax+=b;ymin+=a;} +a=other.max.z*m._12;b=other.min.z*m._12;if(a>=b){ymax+=a;ymin+=b;} +else{ymax+=b;ymin+=a;} +a=other.max.x*m._20;b=other.min.x*m._20;if(a>=b){zmax+=a;zmin+=b;} +else{zmax+=b;zmin+=a;} +a=other.max.y*m._21;b=other.min.y*m._21;if(a>=b){zmax+=a;zmin+=b;} +else{zmax+=b;zmin+=a;} +a=other.max.z*m._22;b=other.min.z*m._22;if(a>=b){zmax+=a;zmin+=b;} +else{zmax+=b;zmin+=a;} +this.min.x=xmin;this.min.y=ymin;this.min.z=zmin;this.max.x=xmax;this.max.y=ymax;this.max.z=zmax;this.updateInternals();this.valid=true;};x3dom.fields.FrustumVolume=function(clipMat) +{this.planeNormals=[];this.planeDistances=[];this.directionIndex=[];if(arguments.length===0){return;} +var planeEquation=[];for(var i=0;i<6;i++){this.planeNormals[i]=new x3dom.fields.SFVec3f(0,0,0);this.planeDistances[i]=0;this.directionIndex[i]=0;planeEquation[i]=new x3dom.fields.SFVec4f(0,0,0,0);} +planeEquation[0].x=clipMat._30-clipMat._00;planeEquation[0].y=clipMat._31-clipMat._01;planeEquation[0].z=clipMat._32-clipMat._02;planeEquation[0].w=clipMat._33-clipMat._03;planeEquation[1].x=clipMat._30+clipMat._00;planeEquation[1].y=clipMat._31+clipMat._01;planeEquation[1].z=clipMat._32+clipMat._02;planeEquation[1].w=clipMat._33+clipMat._03;planeEquation[2].x=clipMat._30+clipMat._10;planeEquation[2].y=clipMat._31+clipMat._11;planeEquation[2].z=clipMat._32+clipMat._12;planeEquation[2].w=clipMat._33+clipMat._13;planeEquation[3].x=clipMat._30-clipMat._10;planeEquation[3].y=clipMat._31-clipMat._11;planeEquation[3].z=clipMat._32-clipMat._12;planeEquation[3].w=clipMat._33-clipMat._13;planeEquation[4].x=clipMat._30+clipMat._20;planeEquation[4].y=clipMat._31+clipMat._21;planeEquation[4].z=clipMat._32+clipMat._22;planeEquation[4].w=clipMat._33+clipMat._23;planeEquation[5].x=clipMat._30-clipMat._20;planeEquation[5].y=clipMat._31-clipMat._21;planeEquation[5].z=clipMat._32-clipMat._22;planeEquation[5].w=clipMat._33-clipMat._23;for(i=0;i<6;i++){var vectorLength=Math.sqrt(planeEquation[i].x*planeEquation[i].x+ +planeEquation[i].y*planeEquation[i].y+ +planeEquation[i].z*planeEquation[i].z);planeEquation[i].x/=vectorLength;planeEquation[i].y/=vectorLength;planeEquation[i].z/=vectorLength;planeEquation[i].w/=-vectorLength;} +var updateDirectionIndex=function(normalVec){var ind=0;if(normalVec.x>0)ind|=1;if(normalVec.y>0)ind|=2;if(normalVec.z>0)ind|=4;return ind;};this.planeNormals[3].setValues(planeEquation[0]);this.planeDistances[3]=planeEquation[0].w;this.directionIndex[3]=updateDirectionIndex(this.planeNormals[3]);this.planeNormals[2].setValues(planeEquation[1]);this.planeDistances[2]=planeEquation[1].w;this.directionIndex[2]=updateDirectionIndex(this.planeNormals[2]);this.planeNormals[5].setValues(planeEquation[2]);this.planeDistances[5]=planeEquation[2].w;this.directionIndex[5]=updateDirectionIndex(this.planeNormals[5]);this.planeNormals[4].setValues(planeEquation[3]);this.planeDistances[4]=planeEquation[3].w;this.directionIndex[4]=updateDirectionIndex(this.planeNormals[4]);this.planeNormals[0].setValues(planeEquation[4]);this.planeDistances[0]=planeEquation[4].w;this.directionIndex[0]=updateDirectionIndex(this.planeNormals[0]);this.planeNormals[1].setValues(planeEquation[5]);this.planeDistances[1]=planeEquation[5].w;this.directionIndex[1]=updateDirectionIndex(this.planeNormals[1]);};x3dom.fields.FrustumVolume.prototype.intersect=function(vol,planeMask) +{if(this.planeNormals.length<6){x3dom.debug.logWarning("FrustumVolume not initialized!");return false;} +var that=this;var min=vol.min,max=vol.max;var setDirectionIndexPoint=function(index){var pnt=new x3dom.fields.SFVec3f(0,0,0);if(index&1){pnt.x=min.x;} +else{pnt.x=max.x;} +if(index&2){pnt.y=min.y;} +else{pnt.y=max.y;} +if(index&4){pnt.z=min.z;} +else{pnt.z=max.z;} +return pnt;};var pntIsInHalfSpace=function(i,pnt){var s=that.planeNormals[i].dot(pnt)-that.planeDistances[i];return(s>=0);};var isInHalfSpace=function(i){var p=setDirectionIndexPoint(that.directionIndex[i]);return pntIsInHalfSpace(i,p);};var isOutHalfSpace=function(i){var p=setDirectionIndexPoint(that.directionIndex[i]^7);return!pntIsInHalfSpace(i,p);};var mask=1;if(planeMask<0)planeMask=0;for(var i=0;i<6;i++,mask<<=1){if((planeMask&mask)!=0) +continue;if(isOutHalfSpace(i)) +return-1;if(isInHalfSpace(i)) +planeMask|=mask;} +return planeMask;};x3dom.docs={};x3dom.docs.specURLMap={CADGeometry:"CADGeometry.html",Core:"core.html",DIS:"dis.html",CubeMapTexturing:"env_texture.html",EnvironmentalEffects:"enveffects.html",EnvironmentalSensor:"envsensor.html",Followers:"followers.html",Geospatial:"geodata.html",Geometry2D:"geometry2D.html",Geometry3D:"geometry3D.html",Grouping:"group.html","H-Anim":"hanim.html",Interpolation:"interp.html",KeyDeviceSensor:"keyboard.html",Layering:"layering.html",Layout:"layout.html",Lighting:"lighting.html",Navigation:"navigation.html",Networking:"networking.html",NURBS:"nurbs.html",ParticleSystems:"particle_systems.html",Picking:"picking.html",PointingDeviceSensor:"pointingsensor.html",Rendering:"rendering.html",RigidBodyPhysics:"rigid_physics.html",Scripting:"scripting.html",Shaders:"shaders.html",Shape:"shape.html",Sound:"sound.html",Text:"text.html",Texturing3D:"texture3D.html",Texturing:"texturing.html",Time:"time.html",EventUtilities:"utils.html",VolumeRendering:"volume.html"};x3dom.docs.specBaseURL="http://www.web3d.org/x3d/specifications/ISO-IEC-19775-1.2-X3D-AbstractSpecification/Part01/components/";x3dom.docs.getNodeTreeInfo=function(){var tn,t;var types="";var objInArray=function(array,obj){for(var i=0;i<array.length;i++){if(array[i]===obj){return true;}} +return false;};var dump=function(t,indent){for(var i=0;i<indent;i++){types+=" ";} +types+="<a href='"+ +x3dom.docs.specBaseURL+x3dom.docs.specURLMap[x3dom.nodeTypes[t]._compName]+"#"+t+"' style='color:black; text-decoration:none; font-weight:bold;'>"+ +t+"</a> <a href='"+ +x3dom.docs.specBaseURL+x3dom.docs.specURLMap[x3dom.nodeTypes[t]._compName]+"' style='color:black; text-decoration:none; font-style:italic;'>"+ +x3dom.nodeTypes[t]._compName+"</a><br/>";for(var i in x3dom.nodeTypes[t].childTypes[t]){dump(x3dom.nodeTypes[t].childTypes[t][i],indent+1);}};for(tn in x3dom.nodeTypes){var t=x3dom.nodeTypes[tn];if(t.childTypes===undefined){t.childTypes={};} +while(t.superClass){if(t.superClass.childTypes[t.superClass._typeName]===undefined){t.superClass.childTypes[t.superClass._typeName]=[];} +if(!objInArray(t.superClass.childTypes[t.superClass._typeName],t._typeName)){t.superClass.childTypes[t.superClass._typeName].push(t._typeName);} +t=t.superClass;}} +dump("X3DNode",0);return"<div class='x3dom-doc-nodes-tree'>"+types+"</div>";};x3dom.docs.getComponentInfo=function(){var components=[];var component;var result="";var c,cn;for(c in x3dom.components){components.push(c);} +components.sort();for(cn in components){c=components[cn];component=x3dom.components[c];result+="<h2><a href='"+ +x3dom.docs.specBaseURL+x3dom.docs.specURLMap[c]+"' style='color:black; text-decoration:none; font-style:italic;'>"+ +c+"</a></h2>";result+="<ul style='list-style-type:circle;'>";for(var t in component){result+="<li><a href='"+ +x3dom.docs.specBaseURL+x3dom.docs.specURLMap[c]+"#"+t+"' style='color:black; text-decoration:none; font-weight:bold;'>"+ +t+"</a></li>";} +result+="</ul>";} +return result;};x3dom.shader={};x3dom.shader.PICKING="picking";x3dom.shader.PICKING_24="picking24";x3dom.shader.PICKING_ID="pickingId";x3dom.shader.PICKING_COLOR="pickingColor";x3dom.shader.PICKING_TEXCOORD="pickingTexCoord";x3dom.shader.FRONTGROUND_TEXTURE="frontgroundTexture";x3dom.shader.BACKGROUND_TEXTURE="backgroundTexture";x3dom.shader.BACKGROUND_SKYTEXTURE="backgroundSkyTexture";x3dom.shader.BACKGROUND_CUBETEXTURE="backgroundCubeTexture";x3dom.shader.SHADOW="shadow";x3dom.shader.BLUR="blur";x3dom.shader.DEPTH="depth";x3dom.shader.NORMAL="normal";x3dom.shader.TEXTURE_REFINEMENT="textureRefinement";x3dom.shader.material=function(){var shaderPart="uniform vec3 diffuseColor;\n"+"uniform vec3 specularColor;\n"+"uniform vec3 emissiveColor;\n"+"uniform float shininess;\n"+"uniform float transparency;\n"+"uniform float ambientIntensity;\n";return shaderPart;};x3dom.shader.fog=function(){var shaderPart="uniform vec3 fogColor;\n"+"uniform float fogType;\n"+"uniform float fogRange;\n"+"varying vec3 fragEyePosition;\n"+"float calcFog(in vec3 eye) {\n"+" float f0 = 0.0;\n"+" if(fogType == 0.0) {\n"+" if(length(eye) < fogRange){\n"+" f0 = (fogRange-length(eye)) / fogRange;\n"+" }\n"+" }else{\n"+" if(length(eye) < fogRange){\n"+" f0 = exp(-length(eye) / (fogRange-length(eye) ) );\n"+" }\n"+" }\n"+" f0 = clamp(f0, 0.0, 1.0);\n"+" return f0;\n"+"}\n";return shaderPart;};x3dom.shader.gammaCorrectionDecl=function(properties){var shaderPart="";if(properties.GAMMACORRECTION==="none"){}else if(properties.GAMMACORRECTION==="fastlinear"){shaderPart+="vec4 gammaEncode(vec4 color){\n"+" vec4 tmp = sqrt(color);\n"+" return vec4(tmp.rgb, color.a);\n"+"}\n";shaderPart+="vec4 gammaDecode(vec4 color){\n"+" vec4 tmp = color * color;\n"+" return vec4(tmp.rgb, color.a);\n"+"}\n";shaderPart+="vec3 gammaEncode(vec3 color){\n"+" return sqrt(color);\n"+"}\n";shaderPart+="vec3 gammaDecode(vec3 color){\n"+" return (color * color);\n"+"}\n";}else{shaderPart+="const vec4 gammaEncode4Vector = vec4(0.4545454545454545, 0.4545454545454545, 0.4545454545454545, 1.0);\n";shaderPart+="const vec4 gammaDecode4Vector = vec4(2.2, 2.2, 2.2, 1.0);\n";shaderPart+="vec4 gammaEncode(vec4 color){\n"+" return pow(color, gammaEncode4Vector);\n"+"}\n";shaderPart+="vec4 gammaDecode(vec4 color){\n"+" return pow(color, gammaDecode4Vector);\n"+"}\n";shaderPart+="const vec3 gammaEncode3Vector = vec3(0.4545454545454545, 0.4545454545454545, 0.4545454545454545);\n";shaderPart+="const vec3 gammaDecode3Vector = vec3(2.2, 2.2, 2.2);\n";shaderPart+="vec3 gammaEncode(vec3 color){\n"+" return pow(color, gammaEncode3Vector);\n"+"}\n";shaderPart+="vec3 gammaDecode(vec3 color){\n"+" return pow(color, gammaDecode3Vector);\n"+"}\n";} +return shaderPart;};x3dom.shader.encodeGamma=function(properties,expr){if(properties.GAMMACORRECTION==="none"){return expr;}else{return"gammaEncode ("+expr+")";}};x3dom.shader.decodeGamma=function(properties,expr){if(properties.GAMMACORRECTION==="none"){return expr;}else{return"gammaDecode ("+expr+")";}};x3dom.shader.rgbaPacking=function(){var shaderPart="";shaderPart+="vec4 packDepth(float depth){\n"+" depth = (depth + 1.0)*0.5;\n"+" vec4 outVal = vec4(1.0, 255.0, 65025.0, 160581375.0) * depth;\n"+" outVal = fract(outVal);\n"+" outVal -= outVal.yzww * vec4(1.0/255.0, 1.0/255.0, 1.0/255.0, 0.0);\n"+" return outVal;\n"+"}\n";shaderPart+="float unpackDepth(vec4 color){\n"+" float depth = dot(color, vec4(1.0, 1.0/255.0, 1.0/65025.0, 1.0/160581375.0));\n"+" return (2.0*depth - 1.0);\n"+"}\n";return shaderPart;};x3dom.shader.shadowRendering=function(){var shaderPart="";shaderPart+="float getLightInfluence(float lType, float lShadowIntensity, float lOn, vec3 lLocation, vec3 lDirection, "+"float lCutOffAngle, float lBeamWidth, vec3 lAttenuation, float lRadius, vec3 eyeCoords) {\n"+" if (lOn == 0.0 || lShadowIntensity == 0.0){ return 0.0;\n"+" } else if (lType == 0.0) {\n"+" return 1.0;\n"+" } else {\n"+" float attenuation = 0.0;\n"+" vec3 lightVec = (lLocation - (eyeCoords));\n"+" float distance = length(lightVec);\n"+" lightVec = normalize(lightVec);\n"+" eyeCoords = normalize(-eyeCoords);\n"+" if(lRadius == 0.0 || distance <= lRadius) {\n"+" attenuation = 1.0 / max(lAttenuation.x + lAttenuation.y * distance + lAttenuation.z * (distance * distance), 1.0);\n"+" }\n"+" if (lType == 1.0) return attenuation;\n"+" float spotAngle = acos(max(0.0, dot(-lightVec, normalize(lDirection))));\n"+" if(spotAngle >= lCutOffAngle) return 0.0;\n"+" else if(spotAngle <= lBeamWidth) return attenuation;\n"+" else return attenuation * (spotAngle - lCutOffAngle) / (lBeamWidth - lCutOffAngle);\n"+" }\n"+"}\n";shaderPart+="void getShadowValues(inout vec4 shadowMapValues, inout float viewSampleDepth, in mat4 lightMatrix, in vec4 worldCoords, in sampler2D shadowMap){\n"+" vec4 lightSpaceCoords = lightMatrix*worldCoords;\n"+" vec3 lightSpaceCoordsCart = lightSpaceCoords.xyz / lightSpaceCoords.w;\n"+" vec2 textureCoords = (lightSpaceCoordsCart.xy + 1.0)*0.5;\n"+" viewSampleDepth = lightSpaceCoordsCart.z;\n"+" shadowMapValues = texture2D(shadowMap, textureCoords);\n";if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE) +shaderPart+=" shadowMapValues = vec4(1.0,1.0,unpackDepth(shadowMapValues),1.0);\n";shaderPart+="}\n";shaderPart+="void getShadowValuesPointLight(inout vec4 shadowMapValues, inout float viewSampleDepth, in vec3 lLocation, in vec4 worldCoords, in mat4 lightViewMatrix,"+"in mat4 lMatrix_0, in mat4 lMatrix_1, in mat4 lMatrix_2, in mat4 lMatrix_3, in mat4 lMatrix_4, in mat4 lMatrix_5,"+"in sampler2D shadowMap_0, in sampler2D shadowMap_1, in sampler2D shadowMap_2, in sampler2D shadowMap_3,"+"in sampler2D shadowMap_4, in sampler2D shadowMap_5){\n"+" vec4 transformed = lightViewMatrix * worldCoords;\n"+" vec3 lightVec = normalize(transformed.xyz/transformed.w);\n"+" vec3 lightVecAbs = abs(lightVec);\n"+" float maximum = max(max(lightVecAbs.x, lightVecAbs.y),lightVecAbs.z);\n"+" if (lightVecAbs.x == maximum) {\n"+" if (lightVec.x < 0.0) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_3,worldCoords,shadowMap_3);\n"+" else getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_1,worldCoords,shadowMap_1);\n"+" }\n"+" else if (lightVecAbs.y == maximum) {\n"+" if (lightVec.y < 0.0) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_4,worldCoords,shadowMap_4);\n"+" else getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_5,worldCoords,shadowMap_5);\n"+" }\n"+" else if (lightVec.z < 0.0) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_0,worldCoords,shadowMap_0);\n"+" else getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_2,worldCoords,shadowMap_2);\n"+"}\n";shaderPart+="void getShadowValuesCascaded(inout vec4 shadowMapValues, inout float viewSampleDepth, in vec4 worldCoords, in float eyeDepth, in mat4 lMatrix_0, in mat4 lMatrix_1, in mat4 lMatrix_2,"+"in mat4 lMatrix_3, in mat4 lMatrix_4, in mat4 lMatrix_5, in sampler2D shadowMap_0, in sampler2D shadowMap_1, in sampler2D shadowMap_2,"+"in sampler2D shadowMap_3, in sampler2D shadowMap_4, in sampler2D shadowMap_5, in float split_0, in float split_1, in float split_2, in float split_3, in float split_4){\n"+" if (eyeDepth < split_0) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_0, worldCoords, shadowMap_0);\n"+" else if (eyeDepth < split_1) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_1, worldCoords, shadowMap_1);\n"+" else if (eyeDepth < split_2) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_2, worldCoords, shadowMap_2);\n"+" else if (eyeDepth < split_3) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_3, worldCoords, shadowMap_3);\n"+" else if (eyeDepth < split_4) getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_4, worldCoords, shadowMap_4);\n"+" else getShadowValues(shadowMapValues, viewSampleDepth, lMatrix_5, worldCoords, shadowMap_5);\n"+"}\n";shaderPart+="float ESM(float shadowMapDepth, float viewSampleDepth, float offset){\n";if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE) +shaderPart+=" return exp(-80.0*(1.0-offset)*(viewSampleDepth - shadowMapDepth));\n";else shaderPart+=" return shadowMapDepth * exp(-80.0*(1.0-offset)*viewSampleDepth);\n";shaderPart+="}\n";shaderPart+="float VSM(vec2 moments, float viewSampleDepth, float offset){\n"+" viewSampleDepth = (viewSampleDepth + 1.0) * 0.5;\n"+" if (viewSampleDepth <= moments.x) return 1.0;\n"+" float variance = moments.y - moments.x * moments.x;\n"+" variance = max(variance, 0.00002 + offset*0.01);\n"+" float d = viewSampleDepth - moments.x;\n"+" return variance/(variance + d*d);\n"+"}\n";return shaderPart;};x3dom.shader.light=function(numLights){var shaderPart="";for(var l=0;l<numLights;l++){shaderPart+="uniform float light"+l+"_On;\n"+"uniform float light"+l+"_Type;\n"+"uniform vec3 light"+l+"_Location;\n"+"uniform vec3 light"+l+"_Direction;\n"+"uniform vec3 light"+l+"_Color;\n"+"uniform vec3 light"+l+"_Attenuation;\n"+"uniform float light"+l+"_Radius;\n"+"uniform float light"+l+"_Intensity;\n"+"uniform float light"+l+"_AmbientIntensity;\n"+"uniform float light"+l+"_BeamWidth;\n"+"uniform float light"+l+"_CutOffAngle;\n"+"uniform float light"+l+"_ShadowIntensity;\n";} +shaderPart+="vec3 lighting(in float lType, in vec3 lLocation, in vec3 lDirection, in vec3 lColor, in vec3 lAttenuation, "+"in float lRadius, in float lIntensity, in float lAmbientIntensity, in float lBeamWidth, "+"in float lCutOffAngle, in vec3 N, in vec3 V, float shin)\n"+"{\n"+" vec3 L;\n"+" float spot = 1.0, attentuation = 0.0;\n"+" if(lType == 0.0) {\n"+" L = -normalize(lDirection);\n"+" V = normalize(V);\n"+" attentuation = 1.0;\n"+" } else{\n"+" L = (lLocation - (-V));\n"+" float d = length(L);\n"+" L = normalize(L);\n"+" V = normalize(V);\n"+" if(lRadius == 0.0 || d <= lRadius) {\n"+" attentuation = 1.0 / max(lAttenuation.x + lAttenuation.y * d + lAttenuation.z * (d * d), 1.0);\n"+" }\n"+" if(lType == 2.0) {\n"+" float spotAngle = acos(max(0.0, dot(-L, normalize(lDirection))));\n"+" if(spotAngle >= lCutOffAngle) spot = 0.0;\n"+" else if(spotAngle <= lBeamWidth) spot = 1.0;\n"+" else spot = (spotAngle - lCutOffAngle ) / (lBeamWidth - lCutOffAngle);\n"+" }\n"+" }\n"+" vec3 H = normalize( L + V );\n"+" float NdotL = clamp(dot(L, N), 0.0, 1.0);\n"+" float NdotH = clamp(dot(H, N), 0.0, 1.0);\n"+" float ambientFactor = lAmbientIntensity * ambientIntensity;\n"+" float diffuseFactor = lIntensity * NdotL;\n"+" float specularFactor = lIntensity * pow(NdotH, shin*128.0);\n"+" return vec3(ambientFactor, diffuseFactor, specularFactor) * attentuation * spot;\n"+"}\n";return shaderPart;};x3dom.shader.TBNCalculation=function(){var shaderPart="";shaderPart+="mat3 cotangent_frame(vec3 N, vec3 p, vec2 uv)\n"+"{\n"+" // get edge vectors of the pixel triangle\n"+" vec3 dp1 = dFdx( p );\n"+" vec3 dp2 = dFdy( p );\n"+" vec2 duv1 = dFdx( uv );\n"+" vec2 duv2 = dFdy( uv );\n"+"\n"+" // solve the linear system\n"+" vec3 dp2perp = cross( dp2, N );\n"+" vec3 dp1perp = cross( N, dp1 );\n"+" vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;\n"+" vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;\n"+"\n"+" // construct a scale-invariant frame\n"+" float invmax = inversesqrt( max( dot(T,T), dot(B,B) ) );\n"+" return mat3( T * invmax, B * invmax, N );\n"+"}\n\n";shaderPart+="vec3 perturb_normal( vec3 N, vec3 V, vec2 texcoord )\n"+"{\n"+" // assume N, the interpolated vertex normal and\n"+" // V, the view vector (vertex to eye)\n"+" vec3 map = texture2D(normalMap, texcoord ).xyz;\n"+" map = map * 255./127. - 128./127.;\n"+" mat3 TBN = cotangent_frame(N, -V, texcoord);\n"+" return normalize(TBN * map);\n"+"}\n\n";return shaderPart;};x3dom.shader.DynamicShader=function(gl,properties) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl,properties);var fragmentShader=this.generateFragmentShader(gl,properties);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.DynamicShader.prototype.generateVertexShader=function(gl,properties) +{var shader="";shader+="uniform mat4 modelViewMatrix;\n";shader+="uniform mat4 modelViewProjectionMatrix;\n";if(properties.POSCOMPONENTS==3){shader+="attribute vec3 position;\n";}else if(properties.POSCOMPONENTS==4){shader+="attribute vec4 position;\n";} +if(properties.IMAGEGEOMETRY){shader+="uniform vec3 IG_bboxMin;\n";shader+="uniform vec3 IG_bboxMax;\n";shader+="uniform float IG_coordTextureWidth;\n";shader+="uniform float IG_coordTextureHeight;\n";shader+="uniform vec2 IG_implicitMeshSize;\n";for(var i=0;i<properties.IG_PRECISION;i++){shader+="uniform sampler2D IG_coords"+i+"\n;";} +if(properties.IG_INDEXED){shader+="uniform sampler2D IG_index;\n";shader+="uniform float IG_indexTextureWidth;\n";shader+="uniform float IG_indexTextureHeight;\n";}} +if(properties.POPGEOMETRY){shader+="uniform float PG_precisionLevel;\n";shader+="uniform float PG_powPrecision;\n";shader+="uniform vec3 PG_maxBBSize;\n";shader+="uniform vec3 PG_bbMin;\n";shader+="uniform vec3 PG_bbMaxModF;\n";shader+="uniform vec3 PG_bboxShiftVec;\n";shader+="uniform float PG_numAnchorVertices;\n";shader+="attribute float PG_vertexID;\n";} +if(properties.LIGHTS){shader+="varying vec3 fragNormal;\n";shader+="uniform mat4 normalMatrix;\n";if(properties.IMAGEGEOMETRY){shader+="uniform sampler2D IG_normals;\n";}else{if(properties.NORCOMPONENTS==2){if(properties.POSCOMPONENTS!=4){shader+="attribute vec2 normal;\n";}}else if(properties.NORCOMPONENTS==3){shader+="attribute vec3 normal;\n";}}} +if(properties.VERTEXCOLOR){if(properties.IMAGEGEOMETRY){shader+="uniform sampler2D IG_colors;\n";if(properties.COLCOMPONENTS==3){shader+="varying vec3 fragColor;\n";}else if(properties.COLCOMPONENTS==4){shader+="varying vec4 fragColor;\n";}}else{if(properties.COLCOMPONENTS==3){shader+="attribute vec3 color;\n";shader+="varying vec3 fragColor;\n";}else if(properties.COLCOMPONENTS==4){shader+="attribute vec4 color;\n";shader+="varying vec4 fragColor;\n";}}} +if(properties.TEXTURED||properties.CSSHADER){shader+="varying vec2 fragTexcoord;\n";if(!properties.SPHEREMAPPING){if(properties.IMAGEGEOMETRY){shader+="uniform sampler2D IG_texCoords;\n";}else{shader+="attribute vec2 texcoord;\n";}} +if(properties.TEXTRAFO){shader+="uniform mat4 texTrafoMatrix;\n";} +if(properties.NORMALMAP&&!x3dom.caps.STD_DERIVATIVES){x3dom.debug.logWarning("Your System doesn't support the 'OES_STANDARD_DERIVATIVES' Extension. "+"You must set tangents and binormals manually via the FloatVertexAttribute-Node "+"to use normal maps");shader+="attribute vec3 tangent;\n";shader+="attribute vec3 binormal;\n";shader+="varying vec3 fragTangent;\n";shader+="varying vec3 fragBinormal;\n";} +if(properties.CUBEMAP){shader+="varying vec3 fragViewDir;\n";shader+="uniform mat4 viewMatrix;\n";} +if(properties.DISPLACEMENTMAP){shader+="uniform sampler2D displacementMap;\n";shader+="uniform float displacementFactor;\n";shader+="uniform float displacementWidth;\n";shader+="uniform float displacementHeight;\n";shader+="uniform float displacementAxis;\n";} +if(properties.DIFFPLACEMENTMAP){shader+="uniform sampler2D diffuseDisplacementMap;\n";shader+="uniform float displacementFactor;\n";shader+="uniform float displacementWidth;\n";shader+="uniform float displacementHeight;\n";shader+="uniform float displacementAxis;\n";} +if(properties.MULTIDIFFALPMAP||properties.MULTIVISMAP){shader+="attribute float id;\n";shader+="varying float fragID;\n";}} +if(properties.LIGHTS||properties.FOG){shader+="uniform vec3 eyePosition;\n";shader+="varying vec3 fragPosition;\n";if(properties.FOG){shader+="varying vec3 fragEyePosition;\n";}} +if(properties.REQUIREBBOX){shader+="uniform vec3 bgCenter;\n";shader+="uniform vec3 bgSize;\n";shader+="uniform float bgPrecisionMax;\n";} +if(properties.REQUIREBBOXNOR){shader+="uniform float bgPrecisionNorMax;\n";} +if(properties.REQUIREBBOXCOL){shader+="uniform float bgPrecisionColMax;\n";} +if(properties.REQUIREBBOXTEX){shader+="uniform float bgPrecisionTexMax;\n";} +shader+="void main(void) {\n";shader+="gl_PointSize = 2.0;\n";if(properties.IMAGEGEOMETRY){if(properties.IG_INDEXED){shader+="vec2 halfPixel = vec2(0.5/IG_indexTextureWidth,0.5/IG_indexTextureHeight);\n";shader+="vec2 IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_indexTextureWidth), position.y*(IG_implicitMeshSize.y/IG_indexTextureHeight)) + halfPixel;\n";shader+="vec2 IG_indices = texture2D( IG_index, IG_texCoord ).rg;\n";shader+="halfPixel = vec2(0.5/IG_coordTextureWidth,0.5/IG_coordTextureHeight);\n";shader+="IG_texCoord = (IG_indices * 0.996108948) + halfPixel;\n";}else{shader+="vec2 halfPixel = vec2(0.5/IG_coordTextureWidth, 0.5/IG_coordTextureHeight);\n";shader+="vec2 IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_coordTextureWidth), position.y*(IG_implicitMeshSize.y/IG_coordTextureHeight)) + halfPixel;\n";} +shader+="vec3 temp = vec3(0.0, 0.0, 0.0);\n";shader+="vec3 vertPosition = vec3(0.0, 0.0, 0.0);\n";for(var i=0;i<properties.IG_PRECISION;i++){shader+="temp = 255.0 * texture2D( IG_coords"+i+", IG_texCoord ).rgb;\n";shader+="vertPosition *= 256.0;\n";shader+="vertPosition += temp;\n";} +shader+="vertPosition /= (pow(2.0, 8.0 * "+properties.IG_PRECISION+".0) - 1.0);\n";shader+="vertPosition = vertPosition * (IG_bboxMax - IG_bboxMin) + IG_bboxMin;\n";if(properties.LIGHTS){shader+="vec3 vertNormal = texture2D( IG_normals, IG_texCoord ).rgb;\n";shader+="vertNormal = vertNormal * 2.0 - 1.0;\n";} +if(properties.VERTEXCOLOR){if(properties.COLCOMPONENTS==3){shader+="fragColor = texture2D( IG_colors, IG_texCoord ).rgb;\n";}else if(properties.COLCOMPONENTS==4){shader+="fragColor = texture2D( IG_colors, IG_texCoord ).rgba;\n";}} +if(properties.TEXTURED||properties.CSSHADER){shader+="vec4 IG_doubleTexCoords = texture2D( IG_texCoords, IG_texCoord );\n";shader+="vec2 vertTexCoord;";shader+="vertTexCoord.r = (IG_doubleTexCoords.r * 0.996108948) + (IG_doubleTexCoords.b * 0.003891051);\n";shader+="vertTexCoord.g = (IG_doubleTexCoords.g * 0.996108948) + (IG_doubleTexCoords.a * 0.003891051);\n";}}else{shader+="vec3 vertPosition = position.xyz;\n";if(properties.POPGEOMETRY){shader+="vec3 offsetVec = step(vertPosition / bgPrecisionMax, PG_bbMaxModF) * PG_bboxShiftVec;\n";shader+="if ((PG_precisionLevel <= 2.0) || PG_vertexID >= PG_numAnchorVertices) {\n";shader+=" vertPosition = floor(vertPosition / PG_powPrecision) * PG_powPrecision;\n";shader+=" vertPosition /= (65536.0 - PG_powPrecision);\n";shader+="}\n";shader+="else {\n";shader+=" vertPosition /= bgPrecisionMax;\n";shader+="}\n";shader+="vertPosition = (vertPosition + offsetVec + PG_bbMin) * PG_maxBBSize;\n";} +else if(properties.REQUIREBBOX){shader+="vertPosition = bgCenter + bgSize * vertPosition / bgPrecisionMax;\n";} +if(properties.LIGHTS){if(properties.NORCOMPONENTS==2){if(properties.POSCOMPONENTS==4){shader+="vec3 vertNormal = vec3(position.w / 256.0); \n";shader+="vertNormal.x = floor(vertNormal.x) / 255.0; \n";shader+="vertNormal.y = fract(vertNormal.y) * 1.00392156862745; \n";} +else if(properties.REQUIREBBOXNOR){shader+="vec3 vertNormal = vec3(normal.xy, 0.0) / bgPrecisionNorMax;\n";} +shader+="vec2 thetaPhi = 3.14159265358979 * vec2(vertNormal.x, vertNormal.y*2.0-1.0); \n";shader+="vec4 sinCosThetaPhi = sin( vec4(thetaPhi, thetaPhi + 1.5707963267949) ); \n";shader+="vertNormal.x = sinCosThetaPhi.x * sinCosThetaPhi.w; \n";shader+="vertNormal.y = sinCosThetaPhi.x * sinCosThetaPhi.y; \n";shader+="vertNormal.z = sinCosThetaPhi.z; \n";}else{shader+="vec3 vertNormal = normal;\n";if(properties.REQUIREBBOXNOR){shader+="vertNormal = vertNormal / bgPrecisionNorMax;\n";} +if(properties.POPGEOMETRY){shader+="vertNormal = 2.0*vertNormal - 1.0;\n";}}} +if(properties.VERTEXCOLOR){shader+="fragColor = color;\n";if(properties.REQUIREBBOXCOL){shader+="fragColor = fragColor / bgPrecisionColMax;\n";}} +if((properties.TEXTURED||properties.CSSHADER)&&!properties.SPHEREMAPPING){shader+="vec2 vertTexCoord = texcoord;\n";if(properties.REQUIREBBOXTEX){shader+="vertTexCoord = vertTexCoord / bgPrecisionTexMax;\n";}}} +if(properties.LIGHTS){if(properties.DISPLACEMENTMAP||properties.DIFFPLACEMENTMAP&&!properties.NORMALMAP){shader+="float dx = 1.0 / displacementWidth;\n";shader+="float dy = 1.0 / displacementHeight;\n";if(properties.DISPLACEMENTMAP) +{shader+="float s1 = texture2D(displacementMap, vec2(vertTexCoord.x - dx, 1.0 - vertTexCoord.y)).r;\n";shader+="float s2 = texture2D(displacementMap, vec2(vertTexCoord.x, 1.0 - vertTexCoord.y - dy)).r;\n";shader+="float s3 = texture2D(displacementMap, vec2(vertTexCoord.x + dx, 1.0 - vertTexCoord.y)).r;\n";shader+="float s4 = texture2D(displacementMap, vec2(vertTexCoord.x, 1.0 - vertTexCoord.y + dy)).r;\n";} +else if(properties.DIFFPLACEMENTMAP) +{shader+="float s1 = texture2D(diffuseDisplacementMap, vec2(vertTexCoord.x - dx, 1.0 - vertTexCoord.y)).a;\n";shader+="float s2 = texture2D(diffuseDisplacementMap, vec2(vertTexCoord.x, 1.0 - vertTexCoord.y - dy)).a;\n";shader+="float s3 = texture2D(diffuseDisplacementMap, vec2(vertTexCoord.x + dx, 1.0 - vertTexCoord.y)).a;\n";shader+="float s4 = texture2D(diffuseDisplacementMap, vec2(vertTexCoord.x, 1.0 - vertTexCoord.y + dy)).a;\n";} +shader+="float coef = displacementFactor;\n";shader+="vec3 calcNormal;\n";shader+="if (displacementAxis == 0.0) {\n";shader+="calcNormal = vec3((s1 - s3) * coef, -5.0, (s2 - s4) * coef);\n";shader+="} else if(displacementAxis == 1.0) {\n";shader+="calcNormal = vec3((s1 - s3) * coef, -5.0, (s2 - s4) * coef);\n";shader+="} else {\n";shader+="calcNormal = vec3((s1 - s3) * coef, -(s2 - s4) * coef, 5.0);\n";shader+="}\n";shader+="calcNormal = normalize(calcNormal);\n";shader+="fragNormal = (normalMatrix * vec4(calcNormal, 0.0)).xyz;\n";} +else +{shader+="fragNormal = (normalMatrix * vec4(vertNormal, 0.0)).xyz;\n";}} +if(properties.TEXTURED||properties.CSSHADER){if(properties.CUBEMAP){shader+="fragViewDir = (viewMatrix[3].xyz);\n";}else if(properties.SPHEREMAPPING){shader+=" fragTexcoord = 0.5 + fragNormal.xy / 2.0;\n";}else if(properties.TEXTRAFO){shader+=" fragTexcoord = (texTrafoMatrix * vec4(vertTexCoord, 1.0, 1.0)).xy;\n";}else{shader+=" fragTexcoord = vertTexCoord;\n";if(properties.POPGEOMETRY&&x3dom.debug.usePrecisionLevelAsTexCoord===true) +shader+="fragTexcoord = vec2(0.03125 + 0.9375 * (PG_precisionLevel / 16.0), 1.0);";} +if(properties.NORMALMAP&&!x3dom.caps.STD_DERIVATIVES){shader+="fragTangent = (normalMatrix * vec4(tangent, 0.0)).xyz;\n";shader+="fragBinormal = (normalMatrix * vec4(binormal, 0.0)).xyz;\n";}} +if(properties.LIGHTS||properties.FOG){shader+="fragPosition = (modelViewMatrix * vec4(vertPosition, 1.0)).xyz;\n";if(properties.FOG){shader+="fragEyePosition = eyePosition - fragPosition;\n";}} +if(properties.MULTIDIFFALPMAP){shader+="fragID = id;\n";} +if(properties.DISPLACEMENTMAP){shader+="vertPosition += normalize(vertNormal) * texture2D(displacementMap, vec2(fragTexcoord.x, 1.0-fragTexcoord.y)).r * displacementFactor;\n";} +else if(properties.DIFFPLACEMENTMAP) +{shader+="vertPosition += normalize(vertNormal) * texture2D(diffuseDisplacementMap, vec2(fragTexcoord.x, 1.0-fragTexcoord.y)).a * displacementFactor;\n";} +shader+="gl_Position = modelViewProjectionMatrix * vec4(vertPosition, 1.0);\n";shader+="}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logInfo("VERTEX:\n"+shader);x3dom.debug.logError("VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.DynamicShader.prototype.generateFragmentShader=function(gl,properties) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+=" precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform mat4 modelMatrix;\n";shader+="uniform mat4 modelViewMatrix;\n";shader+=x3dom.shader.material();if(properties.VERTEXCOLOR){if(properties.COLCOMPONENTS==3){shader+="varying vec3 fragColor; \n";}else if(properties.COLCOMPONENTS==4){shader+="varying vec4 fragColor; \n";}} +if(properties.TEXTURED||properties.CSSHADER){shader+="varying vec2 fragTexcoord;\n";if((properties.TEXTURED||properties.DIFFUSEMAP)&&!properties.CUBEMAP){shader+="uniform sampler2D diffuseMap;\n";}else if(properties.CUBEMAP){shader+="uniform samplerCube cubeMap;\n";shader+="varying vec3 fragViewDir;\n";shader+="uniform mat4 modelViewMatrixInverse;\n";} +if(properties.SPECMAP){shader+="uniform sampler2D specularMap;\n";} +if(properties.SHINMAP){shader+="uniform sampler2D shininessMap;\n";} +if(properties.DISPLACEMENTMAP){shader+="uniform sampler2D displacementMap;\n";shader+="uniform float displacementWidth;\n";shader+="uniform float displacementHeight;\n";} +if(properties.DIFFPLACEMENTMAP){shader+="uniform sampler2D diffuseDisplacementMap;\n";shader+="uniform float displacementWidth;\n";shader+="uniform float displacementHeight;\n";} +if(properties.MULTIDIFFALPMAP||properties.MULTIVISMAP){shader+="varying float fragID;\n";} +if(properties.MULTIDIFFALPMAP){shader+="uniform sampler2D multiDiffuseAlphaMap;\n";shader+="uniform float multiDiffuseAlphaWidth;\n";shader+="uniform float multiDiffuseAlphaHeight;\n";} +if(properties.MULTIVISMAP){shader+="uniform sampler2D multiVisibilityMap;\n";shader+="uniform float multiVisibilityWidth;\n";shader+="uniform float multiVisibilityHeight;\n";} +if(properties.NORMALMAP){shader+="uniform sampler2D normalMap;\n";if(x3dom.caps.STD_DERIVATIVES){shader+="#extension GL_OES_standard_derivatives:enable\n";shader+=x3dom.shader.TBNCalculation();}else{shader+="varying vec3 fragTangent;\n";shader+="varying vec3 fragBinormal;\n";}}} +if(properties.FOG){shader+=x3dom.shader.fog();} +if(properties.LIGHTS){shader+="varying vec3 fragNormal;\n";shader+="varying vec3 fragPosition;\n";shader+=x3dom.shader.light(properties.LIGHTS);} +shader+=x3dom.shader.gammaCorrectionDecl(properties);shader+="void main(void) {\n";shader+="vec4 color;\n";shader+="color.rgb = "+x3dom.shader.decodeGamma(properties,"diffuseColor")+";\n";shader+="color.a = 1.0 - transparency;\n";if(properties.MULTIVISMAP||properties.MULTIDIFFALPMAP){shader+="vec2 idCoord;\n";shader+="float roundedID = floor(fragID+0.5);\n";} +if(properties.MULTIVISMAP){shader+="idCoord.x = (mod(roundedID, multiVisibilityWidth)) * (1.0 / multiVisibilityWidth) + (0.5 / multiVisibilityWidth);\n";shader+="idCoord.y = (floor(roundedID / multiVisibilityHeight)) * (1.0 / multiVisibilityHeight) + (0.5 / multiVisibilityHeight);\n";shader+="vec4 visibility = texture2D( multiVisibilityMap, idCoord );\n";shader+="if (visibility.r < 1.0) discard; \n";} +if(properties.MULTIDIFFALPMAP){shader+="idCoord.x = (mod(roundedID, multiDiffuseAlphaWidth)) * (1.0 / multiDiffuseAlphaWidth) + (0.5 / multiDiffuseAlphaWidth);\n";shader+="idCoord.y = (floor(roundedID / multiDiffuseAlphaHeight)) * (1.0 / multiDiffuseAlphaHeight) + (0.5 / multiDiffuseAlphaHeight);\n";shader+="vec4 diffAlpha = texture2D( multiDiffuseAlphaMap, idCoord );\n";shader+="color.rgb = "+x3dom.shader.decodeGamma(properties,"diffAlpha.rgb")+";\n";shader+="color.a = diffAlpha.a;\n";} +if(properties.VERTEXCOLOR){if(properties.COLCOMPONENTS===3){shader+="color.rgb = "+x3dom.shader.decodeGamma(properties,"fragColor")+";\n";}else if(properties.COLCOMPONENTS===4){shader+="color = "+x3dom.shader.decodeGamma(properties,"fragColor")+";\n";}} +if(properties.LIGHTS){shader+="vec3 ambient = vec3(0.0, 0.0, 0.0);\n";shader+="vec3 diffuse = vec3(0.0, 0.0, 0.0);\n";shader+="vec3 specular = vec3(0.0, 0.0, 0.0);\n";shader+="vec3 normal = normalize(fragNormal);\n";shader+="vec3 eye = -fragPosition;\n";shader+="float shin = shininess;\n";if(properties.NORMALMAP){shader+="vec3 n = normalize( fragNormal );\n";if(x3dom.caps.STD_DERIVATIVES){shader+="normal = perturb_normal( n, fragPosition, vec2(fragTexcoord.x, 1.0-fragTexcoord.y) );\n";}else{shader+="vec3 t = normalize( fragTangent );\n";shader+="vec3 b = normalize( fragBinormal );\n";shader+="mat3 tangentToWorld = mat3(t, b, n);\n";shader+="normal = texture2D( normalMap, vec2(fragTexcoord.x, 1.0-fragTexcoord.y) ).rgb;\n";shader+="normal = 2.0 * normal - 1.0;\n";shader+="normal = normalize( normal * tangentToWorld );\n";shader+="normal.y = -normal.y;\n";shader+="normal.x = -normal.x;\n";}} +if(properties.SHINMAP){shader+="shin = texture2D( shininessMap, vec2(fragTexcoord.x, 1.0-fragTexcoord.y) ).r;\n";} +if(!properties.SOLID){shader+="if (dot(normal, eye) < 0.0) {\n";shader+=" normal *= -1.0;\n";shader+="}\n";} +if(properties.LIGHTS){shader+="vec3 ads;\n";for(var l=0;l<properties.LIGHTS;l++){var lightCol="light"+l+"_Color";shader+="ads = lighting(light"+l+"_Type, "+"light"+l+"_Location, "+"light"+l+"_Direction, "+ +lightCol+", "+"light"+l+"_Attenuation, "+"light"+l+"_Radius, "+"light"+l+"_Intensity, "+"light"+l+"_AmbientIntensity, "+"light"+l+"_BeamWidth, "+"light"+l+"_CutOffAngle, "+"normal, eye, shin);\n";shader+=" ambient += "+lightCol+" * ads.r;\n"+" diffuse += "+lightCol+" * ads.g;\n"+" specular += "+lightCol+" * ads.b;\n";} +shader+="ambient = max(ambient, 0.0);\n";shader+="diffuse = max(diffuse, 0.0);\n";shader+="specular = max(specular, 0.0);\n";} +if(properties.SPECMAP){shader+="specular *= "+x3dom.shader.decodeGamma(properties,"texture2D(specularMap, vec2(fragTexcoord.x, 1.0-fragTexcoord.y)).rgb")+";\n";} +if(properties.TEXTURED||properties.DIFFUSEMAP||properties.DIFFPLACEMENTMAP){if(properties.CUBEMAP){shader+="vec3 viewDir = normalize(fragViewDir);\n";shader+="vec3 reflected = reflect(viewDir, normal);\n";shader+="reflected = (modelViewMatrixInverse * vec4(reflected,0.0)).xyz;\n";shader+="vec4 texColor = "+x3dom.shader.decodeGamma(properties,"textureCube(cubeMap, reflected)")+";\n";shader+="color.a *= texColor.a;\n";} +else if(properties.DIFFPLACEMENTMAP) +{shader+="vec2 texCoord = vec2(fragTexcoord.x, 1.0-fragTexcoord.y);\n";shader+="vec4 texColor = texture2D(diffuseDisplacementMap, texCoord);\n";} +else +{shader+="vec2 texCoord = vec2(fragTexcoord.x, 1.0-fragTexcoord.y);\n";shader+="vec4 texColor = "+x3dom.shader.decodeGamma(properties,"texture2D(diffuseMap, texCoord)")+";\n";shader+="color.a *= texColor.a;\n";} +if(properties.BLENDING){shader+="color.rgb = (emissiveColor + max(ambient + diffuse, 0.0) * color.rgb + specular*specularColor);\n";if(properties.CUBEMAP){shader+="color.rgb = mix(color.rgb, texColor.rgb, vec3(0.75));\n";}else{shader+="color.rgb *= texColor.rgb;\n";}}else{shader+="color.rgb = (emissiveColor + max(ambient + diffuse, 0.0) * texColor.rgb + specular*specularColor);\n";}}else{shader+="color.rgb = (emissiveColor + max(ambient + diffuse, 0.0) * color.rgb + specular*specularColor);\n";}}else{if(properties.APPMAT&&!properties.VERTEXCOLOR){shader+="color = vec4(0.0, 0.0, 0.0, 1.0 - transparency);\n";} +if(properties.TEXTURED||properties.DIFFUSEMAP){shader+="vec2 texCoord = vec2(fragTexcoord.x, 1.0-fragTexcoord.y);\n";shader+="vec4 texColor = "+x3dom.shader.decodeGamma(properties,"texture2D(diffuseMap, texCoord)")+";\n";shader+="color.a = texColor.a;\n";if(properties.BLENDING){shader+="color.rgb += emissiveColor.rgb;\n";shader+="color.rgb *= texColor.rgb;\n";}else{shader+="color = texColor;\n";}}else if(!properties.VERTEXCOLOR&&!properties.POINTLINE2D){shader+="color.rgb += emissiveColor;\n";}else if(!properties.VERTEXCOLOR&&properties.POINTLINE2D){shader+="color.rgb = emissiveColor;\n";}} +if(properties.FOG){shader+="float f0 = calcFog(fragEyePosition);\n";shader+="color.rgb = fogColor * (1.0-f0) + f0 * (color.rgb);\n";} +if(properties.TEXT){shader+="if (color.a <= 0.5) discard;\n";}else{shader+="if (color.a <= 0.1) discard;\n";} +shader+="color = clamp(color, 0.0, 1.0);\n";shader+="gl_FragColor = "+x3dom.shader.encodeGamma(properties,"color")+";\n";shader+="}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logInfo("FRAGMENT:\n"+shader);x3dom.debug.logError("FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.DynamicMobileShader=function(gl,properties) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl,properties);var fragmentShader=this.generateFragmentShader(gl,properties);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.DynamicMobileShader.prototype.generateVertexShader=function(gl,properties) +{var shader="";shader+=x3dom.shader.material();shader+="uniform mat4 normalMatrix;\n";shader+="uniform mat4 modelViewMatrix;\n";shader+="uniform mat4 modelViewProjectionMatrix;\n";if(properties.POSCOMPONENTS==3){shader+="attribute vec3 position;\n";}else if(properties.POSCOMPONENTS==4){shader+="attribute vec4 position;\n";} +if(properties.IMAGEGEOMETRY){shader+="uniform vec3 IG_bboxMin;\n";shader+="uniform vec3 IG_bboxMax;\n";shader+="uniform float IG_coordTextureWidth;\n";shader+="uniform float IG_coordTextureHeight;\n";shader+="uniform vec2 IG_implicitMeshSize;\n";for(var i=0;i<properties.IG_PRECISION;i++){shader+="uniform sampler2D IG_coords"+i+"\n;";} +if(properties.IG_INDEXED){shader+="uniform sampler2D IG_index;\n";shader+="uniform float IG_indexTextureWidth;\n";shader+="uniform float IG_indexTextureHeight;\n";}} +if(properties.POPGEOMETRY){shader+="uniform float PG_precisionLevel;\n";shader+="uniform float PG_powPrecision;\n";shader+="uniform vec3 PG_maxBBSize;\n";shader+="uniform vec3 PG_bbMin;\n";shader+="uniform vec3 PG_bbMaxModF;\n";shader+="uniform vec3 PG_bboxShiftVec;\n";shader+="uniform float PG_numAnchorVertices;\n";shader+="attribute float PG_vertexID;\n";} +if(!properties.POINTLINE2D){if(properties.IMAGEGEOMETRY){shader+="uniform sampler2D IG_normals;\n";}else{if(properties.NORCOMPONENTS==2){if(properties.POSCOMPONENTS!=4){shader+="attribute vec2 normal;\n";}}else if(properties.NORCOMPONENTS==3){shader+="attribute vec3 normal;\n";}}} +shader+="varying vec4 fragColor;\n";if(properties.VERTEXCOLOR){if(properties.IMAGEGEOMETRY){shader+="uniform sampler2D IG_colors;";}else{if(properties.COLCOMPONENTS==3){shader+="attribute vec3 color;";}else if(properties.COLCOMPONENTS==4){shader+="attribute vec4 color;";}}} +if(properties.TEXTURED){shader+="varying vec2 fragTexcoord;\n";if(properties.IMAGEGEOMETRY){shader+="uniform sampler2D IG_texCoords;";}else{shader+="attribute vec2 texcoord;\n";} +if(properties.TEXTRAFO){shader+="uniform mat4 texTrafoMatrix;\n";} +if(!properties.BLENDING){shader+="varying vec3 fragAmbient;\n";shader+="varying vec3 fragDiffuse;\n";} +if(properties.CUBEMAP){shader+="varying vec3 fragViewDir;\n";shader+="varying vec3 fragNormal;\n";shader+="uniform mat4 viewMatrix;\n";}} +if(properties.FOG){shader+=x3dom.shader.fog();} +if(properties.LIGHTS){shader+=x3dom.shader.light(properties.LIGHTS);} +if(properties.REQUIREBBOX){shader+="uniform vec3 bgCenter;\n";shader+="uniform vec3 bgSize;\n";shader+="uniform float bgPrecisionMax;\n";} +if(properties.REQUIREBBOXNOR){shader+="uniform float bgPrecisionNorMax;\n";} +if(properties.REQUIREBBOXCOL){shader+="uniform float bgPrecisionColMax;\n";} +if(properties.REQUIREBBOXTEX){shader+="uniform float bgPrecisionTexMax;\n";} +shader+="void main(void) {\n";shader+="gl_PointSize = 2.0;\n";if(properties.IMAGEGEOMETRY){if(properties.IG_INDEXED){shader+="vec2 halfPixel = vec2(0.5/IG_indexTextureWidth,0.5/IG_indexTextureHeight);\n";shader+="vec2 IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_indexTextureWidth), position.y*(IG_implicitMeshSize.y/IG_indexTextureHeight)) + halfPixel;\n";shader+="vec2 IG_indices = texture2D( IG_index, IG_texCoord ).rg;\n";shader+="halfPixel = vec2(0.5/IG_coordTextureWidth,0.5/IG_coordTextureHeight);\n";shader+="IG_texCoord = (IG_indices * 0.996108948) + halfPixel;\n";}else{shader+="vec2 halfPixel = vec2(0.5/IG_coordTextureWidth, 0.5/IG_coordTextureHeight);\n";shader+="vec2 IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_coordTextureWidth), position.y*(IG_implicitMeshSize.y/IG_coordTextureHeight)) + halfPixel;\n";} +shader+="vec3 temp = vec3(0.0, 0.0, 0.0);\n";shader+="vec3 vertPosition = vec3(0.0, 0.0, 0.0);\n";for(var i=0;i<properties.IG_PRECISION;i++){shader+="temp = 255.0 * texture2D( IG_coords"+i+", IG_texCoord ).rgb;\n";shader+="vertPosition *= 256.0;\n";shader+="vertPosition += temp;\n";} +shader+="vertPosition /= (pow(2.0, 8.0 * "+properties.IG_PRECISION+".0) - 1.0);\n";shader+="vertPosition = vertPosition * (IG_bboxMax - IG_bboxMin) + IG_bboxMin;\n";if(!properties.POINTLINE2D){shader+="vec3 vertNormal = texture2D( IG_normals, IG_texCoord ).rgb;\n";shader+="vertNormal = vertNormal * 2.0 - 1.0;\n";} +if(properties.VERTEXCOLOR){if(properties.COLCOMPONENTS==3){shader+="vec3 vertColor = texture2D( IG_colors, IG_texCoord ).rgb;";}else if(properties.COLCOMPONENTS==4){shader+="vec4 vertColor = texture2D( IG_colors, IG_texCoord ).rgba;";}} +if(properties.TEXTURED){shader+="vec4 IG_doubleTexCoords = texture2D( IG_texCoords, IG_texCoord );\n";shader+="vec2 vertTexCoord;";shader+="vertTexCoord.r = (IG_doubleTexCoords.r * 0.996108948) + (IG_doubleTexCoords.b * 0.003891051);\n";shader+="vertTexCoord.g = (IG_doubleTexCoords.g * 0.996108948) + (IG_doubleTexCoords.a * 0.003891051);\n";}}else{shader+="vec3 vertPosition = position.xyz;\n";if(properties.POPGEOMETRY){shader+="vec3 offsetVec = step(vertPosition / bgPrecisionMax, PG_bbMaxModF) * PG_bboxShiftVec;\n";shader+="if ((PG_precisionLevel <= 2.0) || PG_vertexID >= PG_numAnchorVertices) {\n";shader+=" vertPosition = floor(vertPosition / PG_powPrecision) * PG_powPrecision;\n";shader+=" vertPosition /= (65536.0 - PG_powPrecision);\n";shader+="}\n";shader+="else {\n";shader+=" vertPosition /= bgPrecisionMax;\n";shader+="}\n";shader+="vertPosition = (vertPosition + offsetVec + PG_bbMin) * PG_maxBBSize;\n";} +else if(properties.REQUIREBBOX){shader+="vertPosition = bgCenter + bgSize * vertPosition / bgPrecisionMax;\n";} +if(!properties.POINTLINE2D){if(properties.NORCOMPONENTS==2){if(properties.POSCOMPONENTS==4){shader+="vec3 vertNormal = vec3(position.w / 256.0); \n";shader+="vertNormal.x = floor(vertNormal.x) / 255.0; \n";shader+="vertNormal.y = fract(vertNormal.y) * 1.00392156862745; \n";}else if(properties.REQUIREBBOXNOR){shader+="vec3 vertNormal = vec3(normal.xy, 0.0) / bgPrecisionNorMax;\n";}else{shader+="vec3 vertNormal = vec3(normal.xy, 0.0);\n";} +shader+="vec2 thetaPhi = 3.14159265358979 * vec2(vertNormal.x, vertNormal.y*2.0-1.0); \n";shader+="vec4 sinCosThetaPhi = vec4(thetaPhi, thetaPhi + 1.5707963267949); \n";shader+="vec4 thetaPhiPow2 = sinCosThetaPhi * sinCosThetaPhi; \n";shader+="vec4 thetaPhiPow3 = thetaPhiPow2 * sinCosThetaPhi; \n";shader+="vec4 thetaPhiPow5 = thetaPhiPow3 * thetaPhiPow2; \n";shader+="vec4 thetaPhiPow7 = thetaPhiPow5 * thetaPhiPow2; \n";shader+="vec4 thetaPhiPow9 = thetaPhiPow7 * thetaPhiPow2; \n";shader+="sinCosThetaPhi += -0.16666666667 * thetaPhiPow3; \n";shader+="sinCosThetaPhi += 0.00833333333 * thetaPhiPow5; \n";shader+="sinCosThetaPhi += -0.000198412698 * thetaPhiPow7; \n";shader+="sinCosThetaPhi += 0.0000027557319 * thetaPhiPow9; \n";shader+="vertNormal.x = sinCosThetaPhi.x * sinCosThetaPhi.w; \n";shader+="vertNormal.y = sinCosThetaPhi.x * sinCosThetaPhi.y; \n";shader+="vertNormal.z = sinCosThetaPhi.z; \n";}else{shader+="vec3 vertNormal = normal;\n";if(properties.REQUIREBBOXNOR){shader+="vertNormal = vertNormal / bgPrecisionNorMax;\n";} +if(properties.POPGEOMETRY){shader+="vertNormal = 2.0*vertNormal - 1.0;\n";}}} +if(properties.VERTEXCOLOR){if(properties.COLCOMPONENTS==3){shader+="vec3 vertColor = color;";}else if(properties.COLCOMPONENTS==4){shader+="vec4 vertColor = color;";} +if(properties.REQUIREBBOXNOR){shader+="vertColor = vertColor / bgPrecisionColMax;\n";}} +if(properties.TEXTURED){shader+="vec2 vertTexCoord = texcoord;\n";if(properties.REQUIREBBOXTEX){shader+="vertTexCoord = vertTexCoord / bgPrecisionTexMax;\n";}}} +shader+="vec3 positionMV = (modelViewMatrix * vec4(vertPosition, 1.0)).xyz;\n";if(!properties.POINTLINE2D){shader+="vec3 normalMV = normalize( (normalMatrix * vec4(vertNormal, 0.0)).xyz );\n";} +shader+="vec3 eye = -positionMV;\n";if(properties.VERTEXCOLOR){shader+="vec3 rgb = vertColor.rgb;\n";if(properties.COLCOMPONENTS==4){shader+="float alpha = vertColor.a;\n";}else if(properties.COLCOMPONENTS==3){shader+="float alpha = 1.0 - transparency;\n";}}else{shader+="vec3 rgb = diffuseColor;\n";shader+="float alpha = 1.0 - transparency;\n";} +if(properties.TEXTURED){if(properties.CUBEMAP){shader+="fragViewDir = viewMatrix[3].xyz;\n";shader+="fragNormal = normalMV;\n";}else if(properties.SPHEREMAPPING){shader+=" fragTexcoord = 0.5 + normalMV.xy / 2.0;\n";}else if(properties.TEXTRAFO){shader+=" fragTexcoord = (texTrafoMatrix * vec4(vertTexCoord, 1.0, 1.0)).xy;\n";}else{shader+=" fragTexcoord = vertTexCoord;\n";if(properties.POPGEOMETRY&&x3dom.debug.usePrecisionLevelAsTexCoord===true) +shader+="fragTexcoord = vec2(0.03125 + 0.9375 * (PG_precisionLevel / 16.0), 1.0);";}} +if(properties.LIGHTS){shader+="vec3 ambient = vec3(0.0, 0.0, 0.0);\n";shader+="vec3 diffuse = vec3(0.0, 0.0, 0.0);\n";shader+="vec3 specular = vec3(0.0, 0.0, 0.0);\n";if(!properties.SOLID){shader+="if (dot(normalMV, eye) < 0.0) {\n";shader+=" normalMV *= -1.0;\n";shader+="}\n";} +if(properties.LIGHTS){shader+="vec3 ads;\n";for(var l=0;l<properties.LIGHTS;l++){var lightCol="light"+l+"_Color";shader+="ads = lighting(light"+l+"_Type, "+"light"+l+"_Location, "+"light"+l+"_Direction, "+ +lightCol+", "+"light"+l+"_Attenuation, "+"light"+l+"_Radius, "+"light"+l+"_Intensity, "+"light"+l+"_AmbientIntensity, "+"light"+l+"_BeamWidth, "+"light"+l+"_CutOffAngle, "+"normalMV, eye, shininess);\n";shader+=" ambient += "+lightCol+" * ads.r;\n"+" diffuse += "+lightCol+" * ads.g;\n"+" specular += "+lightCol+" * ads.b;\n";} +shader+="ambient = max(ambient, 0.0);\n";shader+="diffuse = max(diffuse, 0.0);\n";shader+="specular = max(specular, 0.0);\n";} +if(properties.TEXTURED&&!properties.BLENDING){shader+="fragAmbient = ambient;\n";shader+="fragDiffuse = diffuse;\n";shader+="fragColor.rgb = (emissiveColor + specular*specularColor);\n";shader+="fragColor.a = alpha;\n";}else{shader+="fragColor.rgb = (emissiveColor + max(ambient + diffuse, 0.0) * rgb + specular*specularColor);\n";shader+="fragColor.a = alpha;\n";}}else{if(properties.APPMAT&&!properties.VERTEXCOLOR){shader+="rgb = vec3(0.0, 0.0, 0.0);\n";} +if(properties.TEXTURED&&!properties.BLENDING){shader+="fragAmbient = vec3(0.0);\n";shader+="fragDiffuse = vec3(1.0);\n";shader+="fragColor.rgb = vec3(0.0);\n";shader+="fragColor.a = alpha;\n";}else if(!properties.VERTEXCOLOR&&properties.POINTLINE2D){shader+="fragColor.rgb = emissiveColor;\n";shader+="fragColor.a = alpha;\n";}else{shader+="fragColor.rgb = rgb + emissiveColor;\n";shader+="fragColor.a = alpha;\n";}} +if(properties.FOG){shader+="float f0 = calcFog(-positionMV);\n";shader+="fragColor.rgb = fogColor * (1.0-f0) + f0 * (fragColor.rgb);\n";} +shader+="gl_Position = modelViewProjectionMatrix * vec4(vertPosition, 1.0);\n";shader+="}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[DynamicMobileShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.DynamicMobileShader.prototype.generateFragmentShader=function(gl,properties) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="varying vec4 fragColor;\n";if(properties.TEXTURED){if(properties.CUBEMAP){shader+="uniform samplerCube cubeMap;\n";shader+="varying vec3 fragViewDir;\n";shader+="varying vec3 fragNormal;\n";shader+="uniform mat4 modelViewMatrixInverse;\n";}else{shader+="uniform sampler2D diffuseMap; \n";shader+="varying vec2 fragTexcoord; \n";} +if(!properties.BLENDING){shader+="varying vec3 fragAmbient;\n";shader+="varying vec3 fragDiffuse;\n";}} +shader+="void main(void) {\n";shader+="vec4 color = fragColor;\n";if(properties.TEXTURED){if(properties.CUBEMAP){shader+="vec3 normal = normalize(fragNormal);\n";shader+="vec3 viewDir = normalize(fragViewDir);\n";shader+="vec3 reflected = reflect(viewDir, normal);\n";shader+="reflected = (modelViewMatrixInverse * vec4(reflected,0.0)).xyz;\n";shader+="vec4 texColor = textureCube(cubeMap, reflected);\n";}else{shader+="vec4 texColor = texture2D(diffuseMap, vec2(fragTexcoord.s, 1.0-fragTexcoord.t));\n";} +if(properties.BLENDING){if(properties.CUBEMAP){shader+="color.rgb = mix(color.rgb, texColor.rgb, vec3(0.75));\n";shader+="color.a = texColor.a;\n";}else{shader+="color.rgb *= texColor.rgb;\n";shader+="color.a *= texColor.a;\n";}}else{shader+="color.rgb += max(fragAmbient + fragDiffuse, 0.0) * texColor.rgb;\n";shader+="color.a *= texColor.a;\n";}} +if(properties.TEXT){shader+="if (color.a <= 0.5) discard;\n";}else{shader+="if (color.a <= 0.1) discard;\n";} +shader+="gl_FragColor = clamp(color, 0.0, 1.0);\n";shader+="}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[DynamicMobileShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.ComposedShader=function(gl,shape) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl,shape);var fragmentShader=this.generateFragmentShader(gl,shape);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.ComposedShader.prototype.generateVertexShader=function(gl,shape) +{var shader=shape._cf.appearance.node._shader._vertex._vf.url[0];var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[ComposedShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.ComposedShader.prototype.generateFragmentShader=function(gl,shape) +{var shader=shape._cf.appearance.node._shader._fragment._vf.url[0];var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[ComposedShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.NormalShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.NormalShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"attribute vec3 normal;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform float bgPrecisionNorMax;\n"+"uniform mat4 normalMatrix;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"varying vec3 fragNormal;\n"+"void main(void) {\n"+" vec3 pos = bgCenter + bgSize * position / bgPrecisionMax;\n"+" fragNormal = (normalMatrix * vec4(normal / bgPrecisionNorMax, 0.0)).xyz;\n"+" gl_Position = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[NormalShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.NormalShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="varying vec3 fragNormal;\n"+"void main(void) {\n"+" gl_FragColor = vec4(normalize(fragNormal) / 2.0 + 0.5, 1.0);\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[NormalShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.PickingShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.PickingShader.prototype.generateVertexShader=function(gl) +{var shader="";var popUniforms="";var popDecoder="";{popUniforms+="uniform float popGeometry;\n"+"uniform float PG_precisionLevel;\n"+"uniform float PG_powPrecision;\n"+"uniform vec3 PG_maxBBSize;\n"+"uniform vec3 PG_bbMin;\n"+"uniform vec3 PG_bbMaxModF;\n"+"uniform vec3 PG_bboxShiftVec;\n";popDecoder+=" else if (popGeometry != 0.0) {\n"+" vec3 offsetVec = step(pos / bgPrecisionMax, PG_bbMaxModF) * PG_bboxShiftVec;\n"+" if (PG_precisionLevel <= 2.0) {\n"+" pos = floor(pos / PG_powPrecision) * PG_powPrecision;\n"+" pos /= (65536.0 - PG_powPrecision);\n"+" }\n"+" else {\n"+" pos /= bgPrecisionMax;\n"+" }\n"+" pos = (pos + offsetVec + PG_bbMin) * PG_maxBBSize;\n"+" }\n"+" else\n";} +if(!x3dom.caps.MOBILE){shader="attribute vec3 position;\n"+"attribute float id;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform mat4 modelMatrix;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"uniform vec3 from;\n"+"varying vec3 worldCoord;\n"+"varying vec2 idCoord;\n"+"varying float fragID;\n"+"uniform float writeShadowIDs;\n"+"uniform float imageGeometry;\n"+"uniform vec3 IG_bboxMin;\n"+"uniform vec3 IG_bboxMax;\n"+"uniform float IG_coordTextureWidth;\n"+"uniform float IG_coordTextureHeight;\n"+"uniform float IG_indexTextureWidth;\n"+"uniform float IG_indexTextureHeight;\n"+"uniform sampler2D IG_indexTexture;\n"+"uniform sampler2D IG_coordinateTexture;\n"+"uniform vec2 IG_implicitMeshSize;\n"+ +popUniforms+"void main(void) {\n"+" gl_PointSize = 2.0;\n"+" vec3 pos = position;\n"+" if (writeShadowIDs > 0.0) {\n"+" idCoord = vec2((id + writeShadowIDs) / 256.0);\n"+" idCoord.x = floor(idCoord.x) / 255.0;\n"+" idCoord.y = fract(idCoord.y) * 1.00392156862745;\n"+" fragID = id;\n"+" }\n"+" if (imageGeometry != 0.0) {\n"+" vec2 IG_texCoord;\n"+" if(imageGeometry == 1.0) {\n"+" vec2 halfPixel = vec2(0.5/IG_indexTextureWidth,0.5/IG_indexTextureHeight);\n"+" IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_indexTextureWidth), position.y*(IG_implicitMeshSize.y/IG_indexTextureHeight)) + halfPixel;\n"+" vec2 IG_index = texture2D( IG_indexTexture, IG_texCoord ).rg;\n"+" IG_texCoord = IG_index * 0.996108948;\n"+" } else {\n"+" vec2 halfPixel = vec2(0.5/IG_coordTextureWidth, 0.5/IG_coordTextureHeight);\n"+" IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_coordTextureWidth), position.y*(IG_implicitMeshSize.y/IG_coordTextureHeight)) + halfPixel;\n"+" }\n"+" pos = texture2D( IG_coordinateTexture, IG_texCoord ).rgb;\n"+" pos = pos * (IG_bboxMax - IG_bboxMin) + IG_bboxMin;\n"+" } \n"+ +popDecoder+" {\n"+" pos = bgCenter + bgSize * pos / bgPrecisionMax;\n"+" }\n"+" worldCoord = (modelMatrix * vec4(pos, 1.0)).xyz - from;\n"+" gl_Position = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+"}\n";} +else{shader="attribute vec3 position;\n"+"attribute float id;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform float writeShadowIDs;\n"+"uniform mat4 modelMatrix;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"uniform vec3 from;\n"+"varying vec3 worldCoord;\n"+"varying vec2 idCoord;\n"+"varying float fragID;\n"+ +popUniforms+"void main(void) {\n"+" gl_PointSize = 2.0;\n"+" vec3 pos = position;\n"+" if (writeShadowIDs > 0.0) {\n"+" idCoord = vec2((id + writeShadowIDs) / 256.0);\n"+" idCoord.x = floor(idCoord.x) / 255.0;\n"+" idCoord.y = fract(idCoord.y) * 1.00392156862745;\n"+" fragID = id;\n"+" }\n"+ +popDecoder+" {\n"+" pos = bgCenter + bgSize * pos / bgPrecisionMax;\n"+" }\n"+" worldCoord = (modelMatrix * vec4(pos, 1.0)).xyz - from;\n"+" gl_Position = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+"}\n";} +var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.PickingShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+=" precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform float writeShadowIDs;\n"+"uniform float highBit;\n"+"uniform float lowBit;\n"+"uniform float sceneSize;\n"+"uniform float visibilityMap;\n"+"uniform float multiVisibilityWidth;\n"+"uniform float multiVisibilityHeight;\n"+"varying vec3 worldCoord;\n"+"varying vec2 idCoord;\n"+"varying float fragID;\n"+"uniform sampler2D multiVisibilityMap;\n"+"void main(void) {\n"+" vec4 col = vec4(0.0, 0.0, highBit, lowBit);\n"+" if (writeShadowIDs > 0.0) {\n"+" col.ba = idCoord;\n"+" if (visibilityMap > 0.1) {\n"+" vec2 idTexCoord;\n"+" float roundedID = floor(fragID+0.5);\n"+" idTexCoord.x = (mod(roundedID, multiVisibilityWidth)) * (1.0 / multiVisibilityWidth) + (0.5 / multiVisibilityWidth);\n"+" idTexCoord.y = (floor(roundedID / multiVisibilityHeight)) * (1.0 / multiVisibilityHeight) + (0.5 / multiVisibilityHeight);\n"+" vec4 visibility = texture2D( multiVisibilityMap, idTexCoord );\n"+" if (visibility.r < 1.0) discard; \n"+" }\n"+" }\n"+" float d = length(worldCoord) / sceneSize;\n"+" vec2 comp = fract(d * vec2(256.0, 1.0));\n"+" col.rg = comp - (comp.rr * vec2(0.0, 1.0/256.0));\n"+" gl_FragColor = col;\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.Picking24Shader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.Picking24Shader.prototype.generateVertexShader=function(gl) +{var shader="";if(!x3dom.caps.MOBILE){shader="attribute vec3 position;\n"+"attribute float id;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform mat4 modelMatrix;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"uniform vec3 from;\n"+"varying vec3 worldCoord;\n"+"varying vec3 idCoord;\n"+"varying float fragID;\n"+"uniform float writeShadowIDs;\n"+"uniform float imageGeometry;\n"+"uniform vec3 IG_bboxMin;\n"+"uniform vec3 IG_bboxMax;\n"+"uniform float IG_coordTextureWidth;\n"+"uniform float IG_coordTextureHeight;\n"+"uniform float IG_indexTextureWidth;\n"+"uniform float IG_indexTextureHeight;\n"+"uniform sampler2D IG_indexTexture;\n"+"uniform sampler2D IG_coordinateTexture;\n"+"uniform vec2 IG_implicitMeshSize;\n"+"void main(void) {\n"+" gl_PointSize = 2.0;\n"+" if (writeShadowIDs > 0.0) {\n"+" float ID = id + writeShadowIDs;\n"+" float h = floor(ID / 256.0);\n"+" idCoord.x = ID - (h * 256.0);\n"+" idCoord.z = floor(h / 256.0);\n"+" idCoord.y = h - (idCoord.z * 256.0);\n"+" idCoord = idCoord.zyx / 255.0;\n"+" fragID = id;\n"+" }\n"+" if (imageGeometry != 0.0) {\n"+" vec2 IG_texCoord;\n"+" if(imageGeometry == 1.0) {\n"+" vec2 halfPixel = vec2(0.5/IG_indexTextureWidth,0.5/IG_indexTextureHeight);\n"+" IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_indexTextureWidth), position.y*(IG_implicitMeshSize.y/IG_indexTextureHeight)) + halfPixel;\n"+" vec2 IG_index = texture2D( IG_indexTexture, IG_texCoord ).rg;\n"+" IG_texCoord = IG_index * 0.996108948;\n"+" } else {\n"+" vec2 halfPixel = vec2(0.5/IG_coordTextureWidth, 0.5/IG_coordTextureHeight);\n"+" IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_coordTextureWidth), position.y*(IG_implicitMeshSize.y/IG_coordTextureHeight)) + halfPixel;\n"+" }\n"+" vec3 pos = texture2D( IG_coordinateTexture, IG_texCoord ).rgb;\n"+" pos = pos * (IG_bboxMax - IG_bboxMin) + IG_bboxMin;\n"+" worldCoord = (modelMatrix * vec4(pos, 1.0)).xyz - from;\n"+" gl_Position = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+" } else {\n"+" vec3 pos = bgCenter + bgSize * position / bgPrecisionMax;\n"+" worldCoord = (modelMatrix * vec4(pos, 1.0)).xyz - from;\n"+" gl_Position = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+" }\n"+"}\n";} +else{shader="attribute vec3 position;\n"+"attribute float id;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform float writeShadowIDs;\n"+"varying float fragID;\n"+"uniform mat4 modelMatrix;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"uniform vec3 from;\n"+"varying vec3 worldCoord;\n"+"varying vec3 idCoord;\n"+"void main(void) {\n"+" gl_PointSize = 2.0;\n"+" if (writeShadowIDs > 0.0) {\n"+" float ID = id + writeShadowIDs;\n"+" float h = floor(ID / 256.0);\n"+" idCoord.x = ID - (h * 256.0);\n"+" idCoord.z = floor(h / 256.0);\n"+" idCoord.y = h - (idCoord.z * 256.0);\n"+" idCoord = idCoord.zyx / 255.0;\n"+" fragID = id;\n"+" }\n"+" vec3 pos = bgCenter + bgSize * position / bgPrecisionMax;\n"+" worldCoord = (modelMatrix * vec4(pos, 1.0)).xyz - from;\n"+" gl_Position = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+"}\n";} +var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[Picking24Shader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.Picking24Shader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform float writeShadowIDs;\n"+"uniform float highBit;\n"+"uniform float lowBit;\n"+"uniform float sceneSize;\n"+"uniform float visibilityMap;\n"+"uniform float multiVisibilityWidth;\n"+"uniform float multiVisibilityHeight;\n"+"varying vec3 worldCoord;\n"+"varying vec3 idCoord;\n"+"varying float fragID;\n"+"uniform sampler2D multiVisibilityMap;\n"+"void main(void) {\n"+" vec4 col = vec4(0.0, 0.0, highBit, lowBit);\n"+" if (writeShadowIDs > 0.0) {\n"+" col.gba = idCoord;\n"+" if (visibilityMap > 0.0) {\n"+" vec2 idTexCoord;\n"+" float roundedID = floor(fragID+0.5);\n"+" idTexCoord.x = (mod(roundedID, multiVisibilityWidth)) * (1.0 / multiVisibilityWidth) + (0.5 / multiVisibilityWidth);\n"+" idTexCoord.y = (floor(roundedID / multiVisibilityHeight)) * (1.0 / multiVisibilityHeight) + (0.5 / multiVisibilityHeight);\n"+" vec4 visibility = texture2D( multiVisibilityMap, idTexCoord );\n"+" if (visibility.a < 1.0) discard; \n"+" }\n"+" }\n"+" col.r = length(worldCoord) / sceneSize;\n"+" gl_FragColor = col;\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[Picking24Shader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.PickingIdShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.PickingIdShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"attribute float id;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform float writeShadowIDs;\n"+"uniform mat4 modelMatrix;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"varying vec2 idCoord;\n"+"void main(void) {\n"+" if (writeShadowIDs > 0.0) {\n"+" idCoord = vec2((id + writeShadowIDs) / 256.0);\n"+" idCoord.x = floor(idCoord.x) / 255.0;\n"+" idCoord.y = fract(idCoord.y) * 1.00392156862745;\n"+" }\n"+" vec3 pos = bgCenter + bgSize * position / bgPrecisionMax;\n"+" gl_Position = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingIdShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.PickingIdShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+=" precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform float writeShadowIDs;\n"+"uniform float highBit;\n"+"uniform float lowBit;\n"+"varying vec2 idCoord;\n"+"void main(void) {\n"+" vec4 col = vec4(highBit, lowBit, 0.0, 0.0);\n"+" if (writeShadowIDs > 0.0) {\n"+" col.ba = idCoord;\n"+" }\n"+" gl_FragColor = col;\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingIdShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.PickingColorShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.PickingColorShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"attribute vec3 color;\n"+"varying vec3 fragColor;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"\n"+"void main(void) {\n"+" gl_Position = modelViewProjectionMatrix * vec4(position, 1.0);\n"+" gl_PointSize = 2.0;\n"+" fragColor = color;\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingColorShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.PickingColorShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform float lowBit;\n"+"varying vec3 fragColor;\n"+"\n"+"void main(void) {\n"+" gl_FragColor = vec4(fragColor, lowBit);\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingColorShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.PickingTexcoordShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.PickingTexcoordShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"attribute vec2 texcoord;\n"+"varying vec3 fragColor;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+""+"void main(void) {\n"+" gl_Position = modelViewProjectionMatrix * vec4(position, 1.0);\n"+" fragColor = vec3(abs(texcoord.x), abs(texcoord.y), 0.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingTexcoordShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.PickingTexcoordShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform float lowBit;\n"+"varying vec3 fragColor;\n"+"\n"+"void main(void) {\n"+" gl_FragColor = vec4(fragColor, lowBit);\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[PickingTexcoordShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.FrontgroundTextureShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.FrontgroundTextureShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void main(void) {\n"+" vec2 texCoord = (position.xy + 1.0) * 0.5;\n"+" fragTexCoord = texCoord;\n"+" gl_Position = vec4(position.xy, 0.0, 1.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[FrontgroundTextureShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.FrontgroundTextureShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform sampler2D tex;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void main(void) {\n"+" vec4 col = texture2D(tex, fragTexCoord);\n"+" gl_FragColor = vec4(col.rgb, 1.0);\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[FrontgroundTextureShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.BackgroundTextureShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.BackgroundTextureShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void main(void) {\n"+" vec2 texCoord = (position.xy + 1.0) * 0.5;\n"+" fragTexCoord = texCoord;\n"+" gl_Position = vec4(position.xy, 0.0, 1.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BackgroundTextureShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.BackgroundTextureShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform sampler2D tex;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void main(void) {\n"+" gl_FragColor = texture2D(tex, fragTexCoord);\n"+"}";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BackgroundTextureShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.BackgroundSkyTextureShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.BackgroundSkyTextureShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"attribute vec2 texcoord;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void main(void) {\n"+" fragTexCoord = texcoord;\n"+" gl_Position = modelViewProjectionMatrix * vec4(position, 1.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BackgroundSkyTextureShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.BackgroundSkyTextureShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform sampler2D tex;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void main(void) {\n"+" gl_FragColor = texture2D(tex, fragTexCoord);\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BackgroundSkyTextureShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.BackgroundCubeTextureShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.BackgroundCubeTextureShader.prototype.generateVertexShader=function(gl) +{var shader="attribute vec3 position;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"varying vec3 fragNormal;\n"+"\n"+"void main(void) {\n"+" fragNormal = normalize(position);\n"+" gl_Position = modelViewProjectionMatrix * vec4(position, 1.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BackgroundCubeTextureShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.BackgroundCubeTextureShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform samplerCube tex;\n"+"varying vec3 fragNormal;\n"+"\n"+"float magn(float val) {\n"+" return ((val >= 0.0) ? val : -1.0 * val);\n"+"}"+"\n"+"void main(void) {\n"+" vec3 normal = -reflect(normalize(fragNormal), vec3(0.0,0.0,1.0));\n"+" if (magn(normal.y) >= magn(normal.x) && magn(normal.y) >= magn(normal.z))\n"+" normal.xz = -normal.xz;\n"+" gl_FragColor = textureCube(tex, normal);\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BackgroundCubeTextureShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.ShadowShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.ShadowShader.prototype.generateVertexShader=function(gl) +{var shader="";if(!x3dom.caps.MOBILE){shader+="attribute vec3 position;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"varying vec4 projCoords;\n"+"uniform float imageGeometry;\n"+"uniform vec3 IG_bboxMin;\n"+"uniform vec3 IG_bboxMax;\n"+"uniform float IG_coordTextureWidth;\n"+"uniform float IG_coordTextureHeight;\n"+"uniform float IG_indexTextureWidth;\n"+"uniform float IG_indexTextureHeight;\n"+"uniform sampler2D IG_indexTexture;\n"+"uniform sampler2D IG_coordinateTexture;\n"+"uniform vec2 IG_implicitMeshSize;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform float popGeometry;\n"+"uniform float PG_precisionLevel;\n"+"uniform float PG_powPrecision;\n"+"uniform vec3 PG_maxBBSize;\n"+"uniform vec3 PG_bbMin;\n"+"uniform vec3 PG_bbMaxModF;\n"+"uniform vec3 PG_bboxShiftVec;\n"+"void main(void) {\n"+" vec3 pos;\n"+" if (imageGeometry != 0.0) {\n"+" vec2 IG_texCoord;\n"+" if(imageGeometry == 1.0) {\n"+" vec2 halfPixel = vec2(0.5/IG_indexTextureWidth,0.5/IG_indexTextureHeight);\n"+" IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_indexTextureWidth), position.y*(IG_implicitMeshSize.y/IG_indexTextureHeight)) + halfPixel;\n"+" vec2 IG_index = texture2D( IG_indexTexture, IG_texCoord ).rg;\n"+" IG_texCoord = IG_index * 0.996108948;\n"+" } else {\n"+" vec2 halfPixel = vec2(0.5/IG_coordTextureWidth, 0.5/IG_coordTextureHeight);\n"+" IG_texCoord = vec2(position.x*(IG_implicitMeshSize.x/IG_coordTextureWidth), position.y*(IG_implicitMeshSize.y/IG_coordTextureHeight)) + halfPixel;\n"+" }\n"+" pos = texture2D( IG_coordinateTexture, IG_texCoord ).rgb;\n"+" pos = pos * (IG_bboxMax - IG_bboxMin) + IG_bboxMin;\n"+" } else if (popGeometry != 0.0){\n"+" pos = position;\n"+" vec3 offsetVec = step(pos / bgPrecisionMax, PG_bbMaxModF) * PG_bboxShiftVec;\n"+" if (PG_precisionLevel <= 2.0) {\n"+" pos = floor(pos / PG_powPrecision) * PG_powPrecision;\n"+" pos /= (65536.0 - PG_powPrecision);\n"+" }\n"+" else {\n"+" pos /= bgPrecisionMax;\n"+" }\n"+" pos = (pos + offsetVec + PG_bbMin) * PG_maxBBSize;\n"+" } else {\n"+" pos = bgCenter + bgSize * position / bgPrecisionMax;\n"+" }\n"+" projCoords = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+" gl_Position = projCoords;\n"+"}\n";}else{shader="attribute vec3 position;\n"+"uniform vec3 bgCenter;\n"+"uniform vec3 bgSize;\n"+"uniform float bgPrecisionMax;\n"+"uniform mat4 modelViewProjectionMatrix;\n"+"varying vec4 projCoords;\n"+"void main(void) {\n"+" vec3 pos = bgCenter + bgSize * position / bgPrecisionMax;\n"+" projCoords = modelViewProjectionMatrix * vec4(pos, 1.0);\n"+" gl_Position = projCoords;\n"+"}\n";} +var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[ShadowShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.ShadowShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="varying vec4 projCoords;\n"+"uniform float offset;\n"+"uniform bool cameraView;\n";if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE) +shader+=x3dom.shader.rgbaPacking();shader+="void main(void) {\n"+" vec3 proj = (projCoords.xyz / projCoords.w);\n";if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE){shader+="gl_FragColor = packDepth(proj.z);\n";}else{shader+=" if (!cameraView){\n"+" proj.z = (proj.z + 1.0)*0.5;\n"+" proj.y = proj.z * proj.z;\n"+" }\n";shader+=" gl_FragColor = vec4(proj, 1.0);\n";} +shader+="}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[ShadowShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.ShadowRenderingShader=function(gl,shadowedLights) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl,shadowedLights);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.ShadowRenderingShader.prototype.generateVertexShader=function(gl) +{var shader="";shader+="attribute vec2 position;\n";shader+="varying vec2 vPosition;\n";shader+="void main(void) {\n";shader+=" vPosition = position;\n";shader+=" gl_Position = vec4(position, -1.0, 1.0);\n";shader+="}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[ShadowRendering] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.ShadowRenderingShader.prototype.generateFragmentShader=function(gl,shadowedLights) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="uniform mat4 inverseViewProj;\n";shader+="uniform mat4 inverseProj;\n";shader+="varying vec2 vPosition;\n";shader+="uniform sampler2D sceneMap;\n";for(var i=0;i<5;i++) +shader+="uniform float cascade"+i+"_Depth;\n";for(var l=0;l<shadowedLights.length;l++){shader+="uniform float light"+l+"_On;\n"+"uniform float light"+l+"_Type;\n"+"uniform vec3 light"+l+"_Location;\n"+"uniform vec3 light"+l+"_Direction;\n"+"uniform vec3 light"+l+"_Attenuation;\n"+"uniform float light"+l+"_Radius;\n"+"uniform float light"+l+"_BeamWidth;\n"+"uniform float light"+l+"_CutOffAngle;\n"+"uniform float light"+l+"_ShadowIntensity;\n"+"uniform float light"+l+"_ShadowOffset;\n"+"uniform mat4 light"+l+"_ViewMatrix;\n";for(var j=0;j<6;j++){shader+="uniform mat4 light"+l+"_"+j+"_Matrix;\n";shader+="uniform sampler2D light"+l+"_"+j+"_ShadowMap;\n";} +for(var j=0;j<5;j++) +shader+="uniform float light"+l+"_"+j+"_Split;\n";} +if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE) +shader+=x3dom.shader.rgbaPacking();shader+=x3dom.shader.shadowRendering();shader+=x3dom.shader.gammaCorrectionDecl({});shader+="void main(void) {\n"+" float shadowValue = 1.0;\n"+" vec2 texCoordsSceneMap = (vPosition + 1.0)*0.5;\n"+" vec4 projCoords = texture2D(sceneMap, texCoordsSceneMap);\n"+" if (projCoords != vec4(1.0,1.0,1.0,0.0)){\n";if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE){shader+=" projCoords.z = unpackDepth(projCoords);\n"+" projCoords.w = 1.0;\n";} +shader+=" projCoords = projCoords / projCoords.w;\n"+" projCoords.xy = vPosition;\n"+" vec4 eyeCoords = inverseProj*projCoords;\n"+" vec4 worldCoords = inverseViewProj*projCoords;\n"+" float lightInfluence = 0.0;\n";for(var l=0;l<shadowedLights.length;l++){shader+=" lightInfluence = getLightInfluence(light"+l+"_Type, light"+l+"_ShadowIntensity, light"+l+"_On, light"+l+"_Location, light"+l+"_Direction, "+"light"+l+"_CutOffAngle, light"+l+"_BeamWidth, light"+l+"_Attenuation, light"+l+"_Radius, eyeCoords.xyz/eyeCoords.w);\n"+" if (lightInfluence != 0.0){\n"+" vec4 shadowMapValues;\n"+" float viewSampleDepth;\n";if(!x3dom.isa(shadowedLights[l],x3dom.nodeTypes.PointLight)){shader+=" getShadowValuesCascaded(shadowMapValues, viewSampleDepth, worldCoords, -eyeCoords.z/eyeCoords.w,"+"light"+l+"_0_Matrix,light"+l+"_1_Matrix,light"+l+"_2_Matrix,light"+l+"_3_Matrix,light"+l+"_4_Matrix,light"+l+"_5_Matrix,"+"light"+l+"_0_ShadowMap,light"+l+"_1_ShadowMap,light"+l+"_2_ShadowMap,light"+l+"_3_ShadowMap,"+"light"+l+"_4_ShadowMap,light"+l+"_5_ShadowMap, light"+l+"_0_Split, light"+l+"_1_Split, light"+l+"_2_Split, light"+l+"_3_Split, \n"+"light"+l+"_4_Split);\n";}else{shader+=" getShadowValuesPointLight(shadowMapValues, viewSampleDepth, light"+l+"_Location, worldCoords, light"+l+"_ViewMatrix, "+"light"+l+"_0_Matrix,light"+l+"_1_Matrix,light"+l+"_2_Matrix,light"+l+"_3_Matrix,light"+l+"_4_Matrix,light"+l+"_5_Matrix,"+"light"+l+"_0_ShadowMap,light"+l+"_1_ShadowMap,light"+l+"_2_ShadowMap,light"+l+"_3_ShadowMap,"+"light"+l+"_4_ShadowMap,light"+l+"_5_ShadowMap);\n";} +if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE) +shader+=" shadowValue *= clamp(ESM(shadowMapValues.z, viewSampleDepth, light"+l+"_ShadowOffset), "+" 1.0 - light"+l+"_ShadowIntensity*lightInfluence, 1.0);\n";else +shader+=" shadowValue *= clamp(VSM(shadowMapValues.zy, viewSampleDepth, light"+l+"_ShadowOffset), "+" 1.0 - light"+l+"_ShadowIntensity*lightInfluence, 1.0);\n";shader+=" }\n";} +shader+="}\n"+" gl_FragColor = "+x3dom.shader.encodeGamma({},"vec4(shadowValue, shadowValue, shadowValue, 1.0)")+";\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[ShadowRendering] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.TextureRefinementShader=function(gl){this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.TextureRefinementShader.prototype.generateVertexShader=function(gl){var shader="attribute vec2 position;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void main(void) {\n"+" fragTexCoord = (position.xy + 1.0) / 2.0;\n"+" gl_Position = vec4(position, -1.0, 1.0);\n"+"}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[TextureRefinementShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.TextureRefinementShader.prototype.generateFragmentShader=function(gl){var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n"+" precision highp float;\n"+"#else\n"+" precision mediump float;\n"+"#endif\n\n";shader+="uniform sampler2D stamp;\n"+"uniform sampler2D lastTex;\n"+"uniform sampler2D curTex;\n"+"uniform int mode;\n"+"uniform vec2 repeat;\n"+"varying vec2 fragTexCoord;\n"+"\n"+"void init(void);\n"+"void refine(void);\n"+"\n"+"void main(void) {\n"+" if (mode == 0) { init(); }\n"+" else { refine(); }\n"+"}\n"+"\n"+"void init(void) {\n"+" gl_FragColor = texture2D(curTex, fragTexCoord);\n"+"}\n"+"\n"+"void refine(void) {\n"+" vec3 red = texture2D(stamp, repeat * fragTexCoord).rgb;\n"+" vec3 v1 = texture2D(lastTex, fragTexCoord).rgb;\n"+" vec3 v2 = texture2D(curTex, fragTexCoord).rgb;\n"+" if (red.r <= 0.5) {\n"+" gl_FragColor = vec4(v1, 1.0);\n"+" }\n"+" else {\n"+" gl_FragColor = vec4(v2, 1.0);\n"+" }\n"+"}\n";var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[TextureRefinementShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.shader.BlurShader=function(gl) +{this.program=gl.createProgram();var vertexShader=this.generateVertexShader(gl);var fragmentShader=this.generateFragmentShader(gl);gl.attachShader(this.program,vertexShader);gl.attachShader(this.program,fragmentShader);gl.bindAttribLocation(this.program,0,"position");gl.linkProgram(this.program);return this.program;};x3dom.shader.BlurShader.prototype.generateVertexShader=function(gl) +{var shader="";shader+="attribute vec2 position;\n";shader+="varying vec2 vPosition;\n";shader+="void main(void) {\n";shader+=" vPosition = position;\n";shader+=" gl_Position = vec4(position, -1.0, 1.0);\n";shader+="}\n";var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,shader);gl.compileShader(vertexShader);if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BlurShader] VertexShader "+gl.getShaderInfoLog(vertexShader));} +return vertexShader;};x3dom.shader.BlurShader.prototype.generateFragmentShader=function(gl) +{var shader="#ifdef GL_FRAGMENT_PRECISION_HIGH\n";shader+="precision highp float;\n";shader+="#else\n";shader+=" precision mediump float;\n";shader+="#endif\n\n";shader+="varying vec2 vPosition;\n"+"uniform sampler2D texture;\n"+"uniform bool horizontal;\n"+"uniform float pixelSizeHor;\n"+"uniform float pixelSizeVert;\n"+"uniform int filterSize;\n";if(!x3dom.caps.FP_TEXTURES||x3dom.caps.MOBILE){shader+=x3dom.shader.rgbaPacking()+"void main(void) {\n"+" vec2 texCoords = (vPosition + 1.0)*0.5;\n"+" vec2 offset;\n"+" if (horizontal) offset = vec2(pixelSizeHor, 0.0);\n"+" else offset = vec2(0.0, pixelSizeVert);\n"+" float depth = unpackDepth(texture2D(texture, texCoords));\n"+" if (filterSize == 3){\n"+" depth = depth * 0.3844;\n"+" depth += 0.3078*unpackDepth(texture2D(texture, texCoords-offset));\n"+" depth += 0.3078*unpackDepth(texture2D(texture, texCoords+offset));\n"+" } else if (filterSize == 5){\n"+" depth = depth * 0.2921;\n"+" depth += 0.2339*unpackDepth(texture2D(texture, texCoords-offset));\n"+" depth += 0.2339*unpackDepth(texture2D(texture, texCoords+offset));\n"+" depth += 0.1201*unpackDepth(texture2D(texture, texCoords-2.0*offset));\n"+" depth += 0.1201*unpackDepth(texture2D(texture, texCoords+2.0*offset));\n"+" } else if (filterSize == 7){\n"+" depth = depth * 0.2161;\n"+" depth += 0.1907*unpackDepth(texture2D(texture, texCoords-offset));\n"+" depth += 0.1907*unpackDepth(texture2D(texture, texCoords+offset));\n"+" depth += 0.1311*unpackDepth(texture2D(texture, texCoords-2.0*offset));\n"+" depth += 0.1311*unpackDepth(texture2D(texture, texCoords+2.0*offset));\n"+" depth += 0.0702*unpackDepth(texture2D(texture, texCoords-3.0*offset));\n"+" depth += 0.0702*unpackDepth(texture2D(texture, texCoords+3.0*offset));\n"+" }\n"+" gl_FragColor = packDepth(depth);\n"+"}\n";}else{shader+="void main(void) {\n"+" vec2 texCoords = (vPosition + 1.0)*0.5;\n"+" vec2 offset;\n"+" if (horizontal) offset = vec2(pixelSizeHor, 0.0);\n"+" else offset = vec2(0.0, pixelSizeVert);\n"+" vec4 color = texture2D(texture, texCoords);\n"+" if (filterSize == 3){\n"+" color = color * 0.3844;\n"+" color += 0.3078*texture2D(texture, texCoords-offset);\n"+" color += 0.3078*texture2D(texture, texCoords+offset);\n"+" } else if (filterSize == 5){\n"+" color = color * 0.2921;\n"+" color += 0.2339*texture2D(texture, texCoords-offset);\n"+" color += 0.2339*texture2D(texture, texCoords+offset);\n"+" color += 0.1201*texture2D(texture, texCoords-2.0*offset);\n"+" color += 0.1201*texture2D(texture, texCoords+2.0*offset);\n"+" } else if (filterSize == 7){\n"+" color = color * 0.2161;\n"+" color += 0.1907*texture2D(texture, texCoords-offset);\n"+" color += 0.1907*texture2D(texture, texCoords+offset);\n"+" color += 0.1311*texture2D(texture, texCoords-2.0*offset);\n"+" color += 0.1311*texture2D(texture, texCoords+2.0*offset);\n"+" color += 0.0702*texture2D(texture, texCoords-3.0*offset);\n"+" color += 0.0702*texture2D(texture, texCoords+3.0*offset);\n"+" }\n"+" gl_FragColor = color;\n"+"}\n";} +var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,shader);gl.compileShader(fragmentShader);if(!gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)){x3dom.debug.logError("[BlurShader] FragmentShader "+gl.getShaderInfoLog(fragmentShader));} +return fragmentShader;};x3dom.gfx_webgl=(function(){"use strict";function Context(ctx3d,canvas,name,x3dElem){this.ctx3d=ctx3d;this.canvas=canvas;this.name=name;this.x3dElem=x3dElem;this.IG_PositionBuffer=null;this.cache=new x3dom.Cache();this.stateManager=new x3dom.StateManager(ctx3d);} +Context.prototype.getName=function(){return this.name;};function setupContext(canvas,forbidMobileShaders,forceMobileShaders,tryWebGL2,x3dElem){var validContextNames=['webgl','experimental-webgl','moz-webgl','webkit-3d'];if(tryWebGL2){validContextNames=['experimental-webgl2'].concat(validContextNames);} +var ctx=null;var ctxAttribs={alpha:true,depth:true,stencil:true,antialias:true,premultipliedAlpha:false,preserveDrawingBuffer:true};for(var i=0;i<validContextNames.length;i++){try{ctx=canvas.getContext(validContextNames[i],ctxAttribs);if(ctx){var newCtx=new Context(ctx,canvas,'webgl',x3dElem);try{x3dom.caps.VENDOR=ctx.getParameter(ctx.VENDOR);x3dom.caps.VERSION=ctx.getParameter(ctx.VERSION);x3dom.caps.RENDERER=ctx.getParameter(ctx.RENDERER);x3dom.caps.SHADING_LANGUAGE_VERSION=ctx.getParameter(ctx.SHADING_LANGUAGE_VERSION);x3dom.caps.RED_BITS=ctx.getParameter(ctx.RED_BITS);x3dom.caps.GREEN_BITS=ctx.getParameter(ctx.GREEN_BITS);x3dom.caps.BLUE_BITS=ctx.getParameter(ctx.BLUE_BITS);x3dom.caps.ALPHA_BITS=ctx.getParameter(ctx.ALPHA_BITS);x3dom.caps.DEPTH_BITS=ctx.getParameter(ctx.DEPTH_BITS);x3dom.caps.MAX_VERTEX_ATTRIBS=ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);x3dom.caps.MAX_VERTEX_TEXTURE_IMAGE_UNITS=ctx.getParameter(ctx.MAX_VERTEX_TEXTURE_IMAGE_UNITS);x3dom.caps.MAX_VARYING_VECTORS=ctx.getParameter(ctx.MAX_VARYING_VECTORS);x3dom.caps.MAX_VERTEX_UNIFORM_VECTORS=ctx.getParameter(ctx.MAX_VERTEX_UNIFORM_VECTORS);x3dom.caps.MAX_COMBINED_TEXTURE_IMAGE_UNITS=ctx.getParameter(ctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS);x3dom.caps.MAX_TEXTURE_SIZE=ctx.getParameter(ctx.MAX_TEXTURE_SIZE);x3dom.caps.MAX_TEXTURE_IMAGE_UNITS=ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);x3dom.caps.MAX_CUBE_MAP_TEXTURE_SIZE=ctx.getParameter(ctx.MAX_CUBE_MAP_TEXTURE_SIZE);x3dom.caps.COMPRESSED_TEXTURE_FORMATS=ctx.getParameter(ctx.COMPRESSED_TEXTURE_FORMATS);x3dom.caps.MAX_RENDERBUFFER_SIZE=ctx.getParameter(ctx.MAX_RENDERBUFFER_SIZE);x3dom.caps.MAX_VIEWPORT_DIMS=ctx.getParameter(ctx.MAX_VIEWPORT_DIMS);x3dom.caps.ALIASED_LINE_WIDTH_RANGE=ctx.getParameter(ctx.ALIASED_LINE_WIDTH_RANGE);x3dom.caps.ALIASED_POINT_SIZE_RANGE=ctx.getParameter(ctx.ALIASED_POINT_SIZE_RANGE);x3dom.caps.SAMPLES=ctx.getParameter(ctx.SAMPLES);x3dom.caps.INDEX_UINT=ctx.getExtension("OES_element_index_uint");x3dom.caps.FP_TEXTURES=ctx.getExtension("OES_texture_float");x3dom.caps.FPL_TEXTURES=ctx.getExtension("OES_texture_float_linear");x3dom.caps.STD_DERIVATIVES=ctx.getExtension("OES_standard_derivatives");x3dom.caps.DRAW_BUFFERS=ctx.getExtension("WEBGL_draw_buffers");x3dom.caps.EXTENSIONS=ctx.getSupportedExtensions();var extString=x3dom.caps.EXTENSIONS.toString().replace(/,/g,", ");x3dom.debug.logInfo(validContextNames[i]+" context found\nVendor: "+x3dom.caps.VENDOR+", Renderer: "+x3dom.caps.RENDERER+", "+"Version: "+x3dom.caps.VERSION+", "+"ShadingLangV.: "+x3dom.caps.SHADING_LANGUAGE_VERSION ++", MSAA samples: "+x3dom.caps.SAMPLES+"\nExtensions: "+extString);if(x3dom.caps.INDEX_UINT){x3dom.Utils.maxIndexableCoords=4294967295;} +x3dom.caps.MOBILE=(function(a){return(/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))})(navigator.userAgent||navigator.vendor||window.opera);if(x3dom.caps.RENDERER.indexOf("PowerVR")>=0||navigator.appVersion.indexOf("Mobile")>-1||x3dom.caps.MAX_VARYING_VECTORS<=8||x3dom.caps.MAX_VERTEX_TEXTURE_IMAGE_UNITS<2){x3dom.caps.MOBILE=true;} +if(x3dom.caps.MOBILE){if(forbidMobileShaders){x3dom.caps.MOBILE=false;x3dom.debug.logWarning("Detected mobile graphics card! "+"But being forced to desktop shaders which might not work!");} +else{x3dom.debug.logWarning("Detected mobile graphics card! "+"Using low quality shaders without ImageGeometry support!");}} +else{if(forceMobileShaders){x3dom.caps.MOBILE=true;x3dom.debug.logWarning("Detected desktop graphics card! "+"But being forced to mobile shaders with lower quality!");}}} +catch(ex){x3dom.debug.logWarning("Your browser probably supports an older WebGL version. "+"Please try the old mobile runtime instead:\n"+"http://www.x3dom.org/x3dom/src_mobile/x3dom.js");newCtx=null;} +return newCtx;}} +catch(e){x3dom.debug.logWarning(e);}} +return null;} +Context.prototype.setupShape=function(gl,drawable,viewarea){var q=0,q6;var textures,t;var vertices,positionBuffer;var texCoordBuffer,normalBuffer,colorBuffer;var indicesBuffer,indexArray;var shape=drawable.shape;var geoNode=shape._cf.geometry.node;if(shape._webgl!==undefined){var needFullReInit=false;if(shape._dirty.colors===true&&shape._webgl.shader.color===undefined&&geoNode._mesh._colors[0].length){needFullReInit=true;} +if(needFullReInit&&shape._cleanupGLObjects){shape._cleanupGLObjects(true,false);} +if(shape._dirty.texture===true){if(shape._webgl.texture.length!=shape.getTextures().length){for(t=0;t<shape._webgl.texture.length;++t){shape._webgl.texture.pop();} +textures=shape.getTextures();for(t=0;t<textures.length;++t){shape._webgl.texture.push(new x3dom.Texture(gl,shape._nameSpace.doc,this.cache,textures[t]));} +shape._dirty.shader=true;if(shape._webgl.shader.texcoord===undefined) +shape._dirty.texcoords=true;} +else{textures=shape.getTextures();for(t=0;t<textures.length;++t){if(textures[t]===shape._webgl.texture[t].node){shape._webgl.texture[t].update();} +else{shape._webgl.texture[t].texture=null;shape._webgl.texture[t].node=textures[t];shape._webgl.texture[t].update();}}} +shape._dirty.texture=false;} +shape._webgl.shader=this.cache.getShaderByProperties(gl,shape,shape.getShaderProperties(viewarea));if(!needFullReInit&&shape._webgl.binaryGeometry==0) +{for(q=0;q<shape._webgl.positions.length;q++) +{q6=6*q;if(shape._dirty.positions==true||shape._dirty.indexes==true){if(shape._webgl.shader.position!==undefined){shape._webgl.indexes[q]=geoNode._mesh._indices[q];gl.deleteBuffer(shape._webgl.buffers[q6]);indicesBuffer=gl.createBuffer();shape._webgl.buffers[q6]=indicesBuffer;if(x3dom.caps.INDEX_UINT&&(geoNode._mesh._positions[0].length/3>65535)){indexArray=new Uint32Array(shape._webgl.indexes[q]);shape._webgl.indexType=gl.UNSIGNED_INT;} +else{indexArray=new Uint16Array(shape._webgl.indexes[q]);shape._webgl.indexType=gl.UNSIGNED_SHORT;} +gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indicesBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexArray,gl.STATIC_DRAW);indexArray=null;shape._webgl.positions[q]=geoNode._mesh._positions[q];gl.deleteBuffer(shape._webgl.buffers[q6+1]);positionBuffer=gl.createBuffer();shape._webgl.buffers[q6+1]=positionBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,shape._webgl.buffers[q6]);vertices=new Float32Array(shape._webgl.positions[q]);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.vertexAttribPointer(shape._webgl.shader.position,geoNode._mesh._numPosComponents,shape._webgl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);vertices=null;} +shape._dirty.positions=false;shape._dirty.indexes=false;} +if(shape._dirty.colors==true){if(shape._webgl.shader.color!==undefined){shape._webgl.colors[q]=geoNode._mesh._colors[q];gl.deleteBuffer(shape._webgl.buffers[q6+4]);colorBuffer=gl.createBuffer();shape._webgl.buffers[q6+4]=colorBuffer;colors=new Float32Array(shape._webgl.colors[q]);gl.bindBuffer(gl.ARRAY_BUFFER,colorBuffer);gl.bufferData(gl.ARRAY_BUFFER,colors,gl.STATIC_DRAW);gl.vertexAttribPointer(shape._webgl.shader.color,geoNode._mesh._numColComponents,shape._webgl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);colors=null;} +shape._dirty.colors=false;} +if(shape._dirty.normals==true){if(shape._webgl.shader.normal!==undefined){shape._webgl.normals[q]=geoNode._mesh._normals[q];gl.deleteBuffer(shape._webgl.buffers[q6+2]);normalBuffer=gl.createBuffer();shape._webgl.buffers[q6+2]=normalBuffer;normals=new Float32Array(shape._webgl.normals[q]);gl.bindBuffer(gl.ARRAY_BUFFER,normalBuffer);gl.bufferData(gl.ARRAY_BUFFER,normals,gl.STATIC_DRAW);gl.vertexAttribPointer(shape._webgl.shader.normal,geoNode._mesh._numNormComponents,shape._webgl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);normals=null;} +shape._dirty.normals=false;} +if(shape._dirty.texcoords==true){if(shape._webgl.shader.texcoord!==undefined){shape._webgl.texcoords[q]=geoNode._mesh._texCoords[q];gl.deleteBuffer(shape._webgl.buffers[q6+3]);texCoordBuffer=gl.createBuffer();shape._webgl.buffers[q6+3]=texCoordBuffer;texCoords=new Float32Array(shape._webgl.texcoords[q]);gl.bindBuffer(gl.ARRAY_BUFFER,texCoordBuffer);gl.bufferData(gl.ARRAY_BUFFER,texCoords,gl.STATIC_DRAW);gl.vertexAttribPointer(shape._webgl.shader.texCoord,geoNode._mesh._numTexComponents,shape._webgl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);texCoords=null;} +shape._dirty.texcoords=false;} +if(shape._dirty.ids==true){if(shape._webgl.shader.texcoord!==undefined){shape._webgl.texcoords[q]=geoNode._mesh._texCoords[q];gl.deleteBuffer(shape._webgl.buffers[q6+3]);texCoordBuffer=gl.createBuffer();shape._webgl.buffers[q6+3]=texCoordBuffer;texCoords=new Float32Array(shape._webgl.texcoords[q]);gl.bindBuffer(gl.ARRAY_BUFFER,texCoordBuffer);gl.bufferData(gl.ARRAY_BUFFER,texCoords,gl.STATIC_DRAW);gl.vertexAttribPointer(shape._webgl.shader.texCoord,geoNode._mesh._numTexComponents,shape._webgl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);texCoords=null;} +shape._dirty.texcoords=false;}}} +else +{} +if(shape._webgl.imageGeometry!=0){for(t=0;t<shape._webgl.texture.length;++t){shape._webgl.texture[t].updateTexture();} +geoNode.unsetGeoDirty();shape.unsetGeoDirty();} +if(!needFullReInit){return;}} +else if(!(x3dom.isa(geoNode,x3dom.nodeTypes.Text)||x3dom.isa(geoNode,x3dom.nodeTypes.BinaryGeometry)||x3dom.isa(geoNode,x3dom.nodeTypes.PopGeometry)||x3dom.isa(geoNode,x3dom.nodeTypes.ExternalGeometry))&&(!geoNode||geoNode._mesh._positions[0].length<1)) +{if(x3dom.caps.MAX_VERTEX_TEXTURE_IMAGE_UNITS<2&&x3dom.isa(geoNode,x3dom.nodeTypes.ImageGeometry)){x3dom.debug.logError("Can't render ImageGeometry nodes with only "+ +x3dom.caps.MAX_VERTEX_TEXTURE_IMAGE_UNITS+" vertex texture units. Please upgrade your GPU!");} +else{x3dom.debug.logError("NO VALID MESH OR NO VERTEX POSITIONS SET!");} +return;} +shape.unsetDirty();if(!shape._cleanupGLObjects) +{shape._cleanupGLObjects=function(force,delGL) +{if(this._webgl&&((arguments.length>0&&force)||this._parentNodes.length==0)) +{var sp=this._webgl.shader;for(var q=0;q<this._webgl.positions.length;q++){var q6=6*q;if(sp.position!==undefined){gl.deleteBuffer(this._webgl.buffers[q6+1]);gl.deleteBuffer(this._webgl.buffers[q6]);} +if(sp.normal!==undefined){gl.deleteBuffer(this._webgl.buffers[q6+2]);} +if(sp.texcoord!==undefined){gl.deleteBuffer(this._webgl.buffers[q6+3]);} +if(sp.color!==undefined){gl.deleteBuffer(this._webgl.buffers[q6+4]);} +if(sp.id!==undefined){gl.deleteBuffer(this._webgl.buffers[q6+5]);}} +for(var df=0;df<this._webgl.dynamicFields.length;df++){var attrib=this._webgl.dynamicFields[df];if(sp[attrib.name]!==undefined){gl.deleteBuffer(attrib.buf);}} +if(delGL===undefined) +delGL=true;if(delGL){delete this._webgl;x3dom.BinaryContainerLoader.outOfMemory=false;}}};} +shape._webgl={positions:geoNode._mesh._positions,normals:geoNode._mesh._normals,texcoords:geoNode._mesh._texCoords,colors:geoNode._mesh._colors,indexes:geoNode._mesh._indices,indexType:gl.UNSIGNED_SHORT,coordType:gl.FLOAT,normalType:gl.FLOAT,texCoordType:gl.FLOAT,colorType:gl.FLOAT,texture:[],dirtyLighting:x3dom.Utils.checkDirtyLighting(viewarea),imageGeometry:0,binaryGeometry:0,popGeometry:0,externalGeometry:0};textures=shape.getTextures();for(t=0;t<textures.length;++t){shape._webgl.texture.push(new x3dom.Texture(gl,shape._nameSpace.doc,this.cache,textures[t]));} +shape._webgl.shader=this.cache.getShaderByProperties(gl,shape,shape.getShaderProperties(viewarea));var sp=shape._webgl.shader;var currAttribs=0;shape._webgl.buffers=[];shape._webgl.dynamicFields=[];if(x3dom.isa(geoNode,x3dom.nodeTypes.X3DBinaryContainerGeometryNode)) +{shape._webgl.primType=[];for(var primCnt=0;primCnt<geoNode._vf.primType.length;++primCnt) +{shape._webgl.primType.push(x3dom.Utils.primTypeDic(gl,geoNode._vf.primType[primCnt]));}} +else +{shape._webgl.primType=x3dom.Utils.primTypeDic(gl,geoNode._mesh._primType);} +if(x3dom.isa(geoNode,x3dom.nodeTypes.ExternalGeometry)) +{geoNode.updateRenderData(shape,sp,gl,viewarea,this);} +else if(x3dom.isa(geoNode,x3dom.nodeTypes.BinaryGeometry)) +{x3dom.BinaryContainerLoader.setupBinGeo(shape,sp,gl,viewarea,this);} +else if(x3dom.isa(geoNode,x3dom.nodeTypes.PopGeometry)) +{x3dom.BinaryContainerLoader.setupPopGeo(shape,sp,gl,viewarea,this);} +else if(x3dom.isa(geoNode,x3dom.nodeTypes.ImageGeometry)) +{x3dom.BinaryContainerLoader.setupImgGeo(shape,sp,gl,viewarea,this);} +else +{for(q=0;q<shape._webgl.positions.length;q++) +{q6=6*q;if(sp.position!==undefined){indicesBuffer=gl.createBuffer();shape._webgl.buffers[q6]=indicesBuffer;if(x3dom.caps.INDEX_UINT&&(shape._webgl.positions[0].length/3>65535)){indexArray=new Uint32Array(shape._webgl.indexes[q]);shape._webgl.indexType=gl.UNSIGNED_INT;} +else{indexArray=new Uint16Array(shape._webgl.indexes[q]);shape._webgl.indexType=gl.UNSIGNED_SHORT;} +gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indicesBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexArray,gl.STATIC_DRAW);indexArray=null;positionBuffer=gl.createBuffer();shape._webgl.buffers[q6+1]=positionBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);vertices=new Float32Array(shape._webgl.positions[q]);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.vertexAttribPointer(sp.position,geoNode._mesh._numPosComponents,shape._webgl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);vertices=null;} +if(sp.normal!==undefined||shape._webgl.normals[q]){normalBuffer=gl.createBuffer();shape._webgl.buffers[q6+2]=normalBuffer;var normals=new Float32Array(shape._webgl.normals[q]);gl.bindBuffer(gl.ARRAY_BUFFER,normalBuffer);gl.bufferData(gl.ARRAY_BUFFER,normals,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.normal,geoNode._mesh._numNormComponents,shape._webgl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);gl.enableVertexAttribArray(sp.normal);normals=null;} +if(sp.texcoord!==undefined){var texcBuffer=gl.createBuffer();shape._webgl.buffers[q6+3]=texcBuffer;var texCoords=new Float32Array(shape._webgl.texcoords[q]);gl.bindBuffer(gl.ARRAY_BUFFER,texcBuffer);gl.bufferData(gl.ARRAY_BUFFER,texCoords,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.texcoord,geoNode._mesh._numTexComponents,shape._webgl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);gl.enableVertexAttribArray(sp.texcoord);texCoords=null;} +if(sp.color!==undefined){colorBuffer=gl.createBuffer();shape._webgl.buffers[q6+4]=colorBuffer;var colors=new Float32Array(shape._webgl.colors[q]);gl.bindBuffer(gl.ARRAY_BUFFER,colorBuffer);gl.bufferData(gl.ARRAY_BUFFER,colors,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.color,geoNode._mesh._numColComponents,shape._webgl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);gl.enableVertexAttribArray(sp.color);colors=null;}} +for(var df in geoNode._mesh._dynamicFields) +{if(!geoNode._mesh._dynamicFields.hasOwnProperty(df)) +continue;var attrib=geoNode._mesh._dynamicFields[df];shape._webgl.dynamicFields[currAttribs]={buf:{},name:df,numComponents:attrib.numComponents};if(sp[df]!==undefined){var attribBuffer=gl.createBuffer();shape._webgl.dynamicFields[currAttribs++].buf=attribBuffer;var attribs=new Float32Array(attrib.value);gl.bindBuffer(gl.ARRAY_BUFFER,attribBuffer);gl.bufferData(gl.ARRAY_BUFFER,attribs,gl.STATIC_DRAW);gl.vertexAttribPointer(sp[df],attrib.numComponents,gl.FLOAT,false,0,0);attribs=null;}}}};Context.prototype.setupScene=function(gl,bgnd){var sphere=null;var texture=null;var that=this;if(bgnd._webgl!==undefined){if(!bgnd._dirty){return;} +if(bgnd._webgl.texture!==undefined&&bgnd._webgl.texture){gl.deleteTexture(bgnd._webgl.texture);} +if(bgnd._cleanupGLObjects){bgnd._cleanupGLObjects();} +bgnd._webgl={};} +bgnd._dirty=false;var url=bgnd.getTexUrl();var i=0;var w=1,h=1;if(url.length>0&&url[0].length>0){if(url.length>=6&&url[1].length>0&&url[2].length>0&&url[3].length>0&&url[4].length>0&&url[5].length>0){sphere=new x3dom.nodeTypes.Sphere();bgnd._webgl={positions:sphere._mesh._positions[0],indexes:sphere._mesh._indices[0],buffers:[{},{}]};bgnd._webgl.primType=gl.TRIANGLES;bgnd._webgl.shader=this.cache.getShader(gl,x3dom.shader.BACKGROUND_CUBETEXTURE);bgnd._webgl.texture=x3dom.Utils.createTextureCube(gl,bgnd._nameSpace.doc,url,true,bgnd._vf.withCredentials,true,false);} +else{bgnd._webgl={positions:[-w,-h,0,-w,h,0,w,-h,0,w,h,0],indexes:[0,1,2,3],buffers:[{},{}]};url=bgnd._nameSpace.getURL(url[0]);bgnd._webgl.texture=x3dom.Utils.createTexture2D(gl,bgnd._nameSpace.doc,url,true,bgnd._vf.withCredentials,true,false);bgnd._webgl.primType=gl.TRIANGLE_STRIP;bgnd._webgl.shader=this.cache.getShader(gl,x3dom.shader.BACKGROUND_TEXTURE);}} +else{if(bgnd.getSkyColor().length>1||bgnd.getGroundColor().length){sphere=new x3dom.nodeTypes.Sphere();texture=gl.createTexture();bgnd._webgl={positions:sphere._mesh._positions[0],texcoords:sphere._mesh._texCoords[0],indexes:sphere._mesh._indices[0],buffers:[{},{},{}],texture:texture,primType:gl.TRIANGLES};var N=x3dom.Utils.nextHighestPowerOfTwo(bgnd.getSkyColor().length+bgnd.getGroundColor().length+2);N=(N<512)?512:N;var n=bgnd._vf.groundAngle.length;var tmp=[],arr=[];var colors=[],sky=[0];for(i=0;i<bgnd._vf.skyColor.length;i++){colors[i]=bgnd._vf.skyColor[i];} +for(i=0;i<bgnd._vf.skyAngle.length;i++){sky[i+1]=bgnd._vf.skyAngle[i];} +if(n>0||bgnd._vf.groundColor.length==1){if(sky[sky.length-1]<Math.PI/2){sky[sky.length]=Math.PI/2-x3dom.fields.Eps;colors[colors.length]=colors[colors.length-1];} +for(i=n-1;i>=0;i--){if((i==n-1)&&(Math.PI-bgnd._vf.groundAngle[i]<=Math.PI/2)){sky[sky.length]=Math.PI/2;colors[colors.length]=bgnd._vf.groundColor[bgnd._vf.groundColor.length-1];} +sky[sky.length]=Math.PI-bgnd._vf.groundAngle[i];colors[colors.length]=bgnd._vf.groundColor[i+1];} +if(n==0&&bgnd._vf.groundColor.length==1){sky[sky.length]=Math.PI/2;colors[colors.length]=bgnd._vf.groundColor[0];} +sky[sky.length]=Math.PI;colors[colors.length]=bgnd._vf.groundColor[0];} +else{if(sky[sky.length-1]<Math.PI){sky[sky.length]=Math.PI;colors[colors.length]=colors[colors.length-1];}} +for(i=0;i<sky.length;i++){sky[i]/=Math.PI;} +x3dom.debug.assert(sky.length==colors.length);var interp=new x3dom.nodeTypes.ColorInterpolator();interp._vf.key=new x3dom.fields.MFFloat(sky);interp._vf.keyValue=new x3dom.fields.MFColor(colors);for(i=0;i<N;i++){interp._vf.set_fraction=i/(N-1.0);interp.fieldChanged("set_fraction");tmp[i]=interp._vf.value_changed;} +tmp.reverse();var alpha=Math.floor((1.0-bgnd.getTransparency())*255);for(i=0;i<tmp.length;i++){arr.push(Math.floor(tmp[i].r*255),Math.floor(tmp[i].g*255),Math.floor(tmp[i].b*255),alpha);} +var pixels=new Uint8Array(arr);var format=gl.RGBA;N=pixels.length/4;gl.bindTexture(gl.TEXTURE_2D,texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.pixelStorei(gl.UNPACK_ALIGNMENT,1);gl.texImage2D(gl.TEXTURE_2D,0,format,1,N,0,format,gl.UNSIGNED_BYTE,pixels);gl.bindTexture(gl.TEXTURE_2D,null);bgnd._webgl.shader=this.cache.getShader(gl,x3dom.shader.BACKGROUND_SKYTEXTURE);} +else{bgnd._webgl={};}} +if(bgnd._webgl.shader){var sp=bgnd._webgl.shader;var positionBuffer=gl.createBuffer();bgnd._webgl.buffers[1]=positionBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);var vertices=new Float32Array(bgnd._webgl.positions);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.vertexAttribPointer(sp.position,3,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.position);var indicesBuffer=gl.createBuffer();bgnd._webgl.buffers[0]=indicesBuffer;var indexArray=new Uint16Array(bgnd._webgl.indexes);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indicesBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexArray,gl.STATIC_DRAW);vertices=null;indexArray=null;if(sp.texcoord!==undefined){var texcBuffer=gl.createBuffer();bgnd._webgl.buffers[2]=texcBuffer;var texcoords=new Float32Array(bgnd._webgl.texcoords);gl.bindBuffer(gl.ARRAY_BUFFER,texcBuffer);gl.bufferData(gl.ARRAY_BUFFER,texcoords,gl.STATIC_DRAW);gl.vertexAttribPointer(sp.texcoord,2,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.texcoord);texcoords=null;} +bgnd._cleanupGLObjects=function(){var sp=this._webgl.shader;if(sp.position!==undefined){gl.deleteBuffer(this._webgl.buffers[0]);gl.deleteBuffer(this._webgl.buffers[1]);} +if(sp.texcoord!==undefined){gl.deleteBuffer(this._webgl.buffers[2]);}};} +bgnd._webgl.render=function(gl,mat_view,mat_proj) +{var sp=bgnd._webgl.shader;var alpha=1.0-bgnd.getTransparency();var mat_scene=null;var projMatrix_22=mat_proj._22,projMatrix_23=mat_proj._23;var camPos=mat_view.e3();if((sp!==undefined&&sp!==null)&&(sp.texcoord!==undefined&&sp.texcoord!==null)&&(bgnd._webgl.texture!==undefined&&bgnd._webgl.texture!==null)){gl.clearColor(0,0,0,alpha);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT|gl.STENCIL_BUFFER_BIT);that.stateManager.frontFace(gl.CCW);that.stateManager.disable(gl.CULL_FACE);that.stateManager.disable(gl.DEPTH_TEST);that.stateManager.disable(gl.BLEND);that.stateManager.useProgram(sp);if(!sp.tex){sp.tex=0;} +mat_proj._22=100001/99999;mat_proj._23=200000/99999;mat_view._03=0;mat_view._13=0;mat_view._23=0;mat_scene=mat_proj.mult(mat_view);sp.modelViewProjectionMatrix=mat_scene.toGL();mat_view._03=camPos.x;mat_view._13=camPos.y;mat_view._23=camPos.z;mat_proj._22=projMatrix_22;mat_proj._23=projMatrix_23;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,bgnd._webgl.texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,bgnd._webgl.buffers[0]);gl.bindBuffer(gl.ARRAY_BUFFER,bgnd._webgl.buffers[1]);gl.vertexAttribPointer(sp.position,3,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.position);gl.bindBuffer(gl.ARRAY_BUFFER,bgnd._webgl.buffers[2]);gl.vertexAttribPointer(sp.texcoord,2,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.texcoord);gl.drawElements(bgnd._webgl.primType,bgnd._webgl.indexes.length,gl.UNSIGNED_SHORT,0);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,null);gl.disableVertexAttribArray(sp.position);gl.disableVertexAttribArray(sp.texcoord);gl.clear(gl.DEPTH_BUFFER_BIT);} +else if(!sp||!bgnd._webgl.texture||(bgnd._webgl.texture.textureCubeReady!==undefined&&bgnd._webgl.texture.textureCubeReady!==true)){var bgCol=bgnd.getSkyColor().toGL();gl.clearColor(bgCol[0],bgCol[1],bgCol[2],alpha);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT|gl.STENCIL_BUFFER_BIT);} +else{gl.clearColor(0,0,0,alpha);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT|gl.STENCIL_BUFFER_BIT);that.stateManager.frontFace(gl.CCW);that.stateManager.disable(gl.CULL_FACE);that.stateManager.disable(gl.DEPTH_TEST);that.stateManager.disable(gl.BLEND);that.stateManager.useProgram(sp);if(!sp.tex){sp.tex=0;} +if(bgnd._webgl.texture.textureCubeReady){mat_proj._22=100001/99999;mat_proj._23=200000/99999;mat_view._03=0;mat_view._13=0;mat_view._23=0;mat_scene=mat_proj.mult(mat_view);sp.modelViewProjectionMatrix=mat_scene.toGL();mat_view._03=camPos.x;mat_view._13=camPos.y;mat_view._23=camPos.z;mat_proj._22=projMatrix_22;mat_proj._23=projMatrix_23;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_CUBE_MAP,bgnd._webgl.texture);gl.texParameteri(gl.TEXTURE_CUBE_MAP,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_CUBE_MAP,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_CUBE_MAP,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_CUBE_MAP,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);} +else{gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,bgnd._webgl.texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);} +gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,bgnd._webgl.buffers[0]);gl.bindBuffer(gl.ARRAY_BUFFER,bgnd._webgl.buffers[1]);gl.vertexAttribPointer(sp.position,3,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.position);gl.drawElements(bgnd._webgl.primType,bgnd._webgl.indexes.length,gl.UNSIGNED_SHORT,0);gl.disableVertexAttribArray(sp.position);gl.activeTexture(gl.TEXTURE0);if(bgnd._webgl.texture.textureCubeReady){gl.bindTexture(gl.TEXTURE_CUBE_MAP,null);} +else{gl.bindTexture(gl.TEXTURE_2D,null);} +gl.clear(gl.DEPTH_BUFFER_BIT);}};};Context.prototype.setupFgnds=function(gl,scene){if(scene._fgnd!==undefined){return;} +var that=this;var w=1,h=1;scene._fgnd={};scene._fgnd._webgl={positions:[-w,-h,0,-w,h,0,w,-h,0,w,h,0],indexes:[0,1,2,3],buffers:[{},{}]};scene._fgnd._webgl.primType=gl.TRIANGLE_STRIP;scene._fgnd._webgl.shader=this.cache.getShader(gl,x3dom.shader.FRONTGROUND_TEXTURE);var sp=scene._fgnd._webgl.shader;var positionBuffer=gl.createBuffer();scene._fgnd._webgl.buffers[1]=positionBuffer;gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);var vertices=new Float32Array(scene._fgnd._webgl.positions);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);gl.vertexAttribPointer(sp.position,3,gl.FLOAT,false,0,0);var indicesBuffer=gl.createBuffer();scene._fgnd._webgl.buffers[0]=indicesBuffer;var indexArray=new Uint16Array(scene._fgnd._webgl.indexes);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indicesBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexArray,gl.STATIC_DRAW);vertices=null;indexArray=null;scene._fgnd._webgl.render=function(gl,tex){scene._fgnd._webgl.texture=tex;that.stateManager.frontFace(gl.CCW);that.stateManager.disable(gl.CULL_FACE);that.stateManager.disable(gl.DEPTH_TEST);that.stateManager.useProgram(sp);if(!sp.tex){sp.tex=0;} +gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,scene._fgnd._webgl.texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,scene._fgnd._webgl.buffers[0]);gl.bindBuffer(gl.ARRAY_BUFFER,scene._fgnd._webgl.buffers[1]);gl.vertexAttribPointer(sp.position,3,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.position);gl.drawElements(scene._fgnd._webgl.primType,scene._fgnd._webgl.indexes.length,gl.UNSIGNED_SHORT,0);gl.disableVertexAttribArray(sp.position);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,null);};};Context.prototype.renderShadowPass=function(gl,viewarea,mat_scene,mat_view,targetFbo,camOffset,isCameraView) +{var scene=viewarea._scene;var sp=scene._webgl.shadowShader;this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,targetFbo.fbo);this.stateManager.viewport(0,0,targetFbo.width,targetFbo.height);this.stateManager.useProgram(sp);sp.cameraView=isCameraView;sp.offset=camOffset;{sp.PG_precisionLevel=1.0;sp.PG_powPrecision=1.0;sp.PG_maxBBSize=[0,0,0];sp.PG_bbMin=[0,0,0];sp.PG_bbMaxModF=[0,0,0];sp.PG_bboxShiftVec=[0,0,0];} +gl.clearColor(1.0,1.0,1.0,0.0);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);this.stateManager.depthFunc(gl.LEQUAL);this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.enable(gl.CULL_FACE);this.stateManager.disable(gl.BLEND);var bgCenter=x3dom.fields.SFVec3f.NullVector.toGL();var bgSize=x3dom.fields.SFVec3f.OneVector.toGL();var env=scene.getEnvironment();var excludeTrans=env._vf.shadowExcludeTransparentObjects;var i,n=scene.drawableCollection.length;for(i=0;i<n;i++) +{var drawable=scene.drawableCollection.get(i);var trafo=drawable.transform;var shape=drawable.shape;var s_gl=shape._webgl;if(!s_gl||(excludeTrans&&drawable.sortType=='transparent')){continue;} +var s_geo=shape._cf.geometry.node;var s_msh=s_geo._mesh;sp.modelViewProjectionMatrix=mat_scene.mult(trafo).toGL();sp.imageGeometry=s_gl.imageGeometry;sp.popGeometry=s_gl.popGeometry;if(s_gl.coordType!=gl.FLOAT){if(!s_gl.popGeometry&&(x3dom.Utils.isUnsignedType(s_geo._vf.coordType))){sp.bgCenter=s_geo.getMin().toGL();} +else{sp.bgCenter=s_geo._vf.position.toGL();} +sp.bgSize=s_geo._vf.size.toGL();sp.bgPrecisionMax=s_geo.getPrecisionMax('coordType');} +else{sp.bgCenter=bgCenter;sp.bgSize=bgSize;sp.bgPrecisionMax=1;} +if(s_gl.colorType!=gl.FLOAT){sp.bgPrecisionColMax=s_geo.getPrecisionMax('colorType');} +if(s_gl.texCoordType!=gl.FLOAT){sp.bgPrecisionTexMax=s_geo.getPrecisionMax('texCoordType');} +if(s_gl.imageGeometry!=0&&!x3dom.caps.MOBILE) +{sp.IG_bboxMin=s_geo.getMin().toGL();sp.IG_bboxMax=s_geo.getMax().toGL();sp.IG_implicitMeshSize=s_geo._vf.implicitMeshSize.toGL();var coordTex=x3dom.Utils.findTextureByName(s_gl.texture,"IG_coords0");if(coordTex){sp.IG_coordTextureWidth=coordTex.texture.width;sp.IG_coordTextureHeight=coordTex.texture.height;} +if(s_gl.imageGeometry==1){var indexTex=x3dom.Utils.findTextureByName(s_gl.texture,"IG_index");if(indexTex){sp.IG_indexTextureWidth=indexTex.texture.width;sp.IG_indexTextureHeight=indexTex.texture.height;} +gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,indexTex.texture);gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,coordTex.texture);} +else{gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,coordTex.texture);} +gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);var texUnit=0;if(s_geo.getIndexTexture()){if(!sp.IG_indexTexture){sp.IG_indexTexture=texUnit++;}} +if(s_geo.getCoordinateTexture(0)){if(!sp.IG_coordinateTexture){sp.IG_coordinateTexture=texUnit++;}}} +if(shape.isSolid()){this.stateManager.enable(gl.CULL_FACE);if(shape.isCCW()){this.stateManager.frontFace(gl.CCW);} +else{this.stateManager.frontFace(gl.CW);}} +else{this.stateManager.disable(gl.CULL_FACE);} +if(s_gl.popGeometry){var model_view=mat_view.mult(trafo);this.updatePopState(drawable,s_geo,sp,s_gl,scene,model_view,viewarea,this.x3dElem.runtime.fps);} +var q_n;if(s_gl.externalGeometry!=0) +{q_n=s_gl.primType.length;} +else +{q_n=s_gl.positions.length;} +for(var q=0;q<q_n;q++){var q6=6*q;var v,v_n,offset;if(!(sp.position!==undefined&&s_gl.buffers[q6+1]&&(s_gl.indexes[q]||s_gl.externalGeometry!=0))) +continue;if(s_gl.buffers[q6]){gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,s_gl.buffers[q6]);} +gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+1]);gl.vertexAttribPointer(sp.position,s_msh._numPosComponents,s_gl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);if(s_gl.binaryGeometry>0||s_gl.popGeometry>0){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawElements(s_gl.primType[v],s_geo._vf.vertexCount[v],s_gl.indexType,x3dom.Utils.getByteAwareOffset(offset,s_gl.indexType,gl));offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.binaryGeometry<0||s_gl.popGeometry<0||s_gl.imageGeometry){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawArrays(s_gl.primType[v],offset,s_geo._vf.vertexCount[v]);offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.externalGeometry==1) +{gl.drawElements(s_gl.primType[q],s_gl.drawCount[q],s_gl.indexType,s_gl.indexOffset[q]);} +else if(s_gl.externalGeometry==-1) +{gl.drawArrays(s_gl.primType[q],0,s_gl.drawCount[q]);} +else if(s_geo.hasIndexOffset()){var indOff=shape.tessellationProperties();for(v=0,v_n=indOff.length;v<v_n;v++){gl.drawElements(s_gl.primType,indOff[v].count,s_gl.indexType,indOff[v].offset*x3dom.Utils.getOffsetMultiplier(s_gl.indexType,gl));}} +else if(s_gl.indexes[q].length==0){gl.drawArrays(s_gl.primType,0,s_gl.positions[q].length/3);} +else{gl.drawElements(s_gl.primType,s_gl.indexes[q].length,s_gl.indexType,0);} +gl.disableVertexAttribArray(sp.position);} +if(s_gl.imageGeometry!=0&&!x3dom.caps.MOBILE){gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,null);if(s_gl.imageGeometry==1){gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,null);}}} +gl.flush();this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,null);};Context.prototype.renderPickingPass=function(gl,scene,mat_view,mat_scene,from,sceneSize,pickMode,lastX,lastY,width,height) +{var ps=scene._webgl.pickScale;var bufHeight=scene._webgl.fboPick.height;var x=lastX*ps;var y=(bufHeight-1)-lastY*ps;var sp=null;switch(pickMode){case 0:sp=scene._webgl.pickShader;break;case 1:sp=scene._webgl.pickColorShader;break;case 2:sp=scene._webgl.pickTexCoordShader;break;case 3:sp=scene._webgl.pickShader24;break;case 4:sp=scene._webgl.pickShaderId;break;default:break;} +if(!sp){return;} +this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,scene._webgl.fboPick.fbo);this.stateManager.viewport(0,0,scene._webgl.fboPick.width,bufHeight);gl.clearColor(0.0,0.0,0.0,0.0);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);var viewarea=scene.drawableCollection.viewarea;var env=scene.getEnvironment();var n=scene.drawableCollection.length;if(env._vf.smallFeatureCulling&&env._lowPriorityThreshold<1&&viewarea.isMovingOrAnimating()){n=Math.floor(n*env._lowPriorityThreshold);if(!n&&scene.drawableCollection.length) +n=1;} +var bgCenter=x3dom.fields.SFVec3f.NullVector.toGL();var bgSize=x3dom.fields.SFVec3f.OneVector.toGL();this.stateManager.depthFunc(gl.LEQUAL);this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.enable(gl.CULL_FACE);this.stateManager.disable(gl.BLEND);this.stateManager.useProgram(sp);if(pickMode==0) +{sp.PG_precisionLevel=1.0;sp.PG_powPrecision=1.0;sp.PG_maxBBSize=[0,0,0];sp.PG_bbMin=[0,0,0];sp.PG_bbMaxModF=[0,0,0];sp.PG_bboxShiftVec=[0,0,0];} +if(x3dom.Utils.needLineWidth){this.stateManager.lineWidth(2);} +for(var i=0;i<n;i++) +{var drawable=scene.drawableCollection.get(i);var trafo=drawable.transform;var shape=drawable.shape;var s_gl=shape._webgl;if(!s_gl||shape._objectID<1||!shape._vf.isPickable){continue;} +var s_geo=shape._cf.geometry.node;var s_app=shape._cf.appearance.node;var s_msh=s_geo._mesh;sp.modelMatrix=trafo.toGL();sp.modelViewProjectionMatrix=mat_scene.mult(trafo).toGL();sp.lowBit=(shape._objectID&255)/255.0;sp.highBit=(shape._objectID>>>8)/255.0;sp.from=from.toGL();sp.sceneSize=sceneSize;sp.imageGeometry=s_gl.imageGeometry;sp.popGeometry=s_gl.popGeometry;sp.writeShadowIDs=(s_gl.binaryGeometry!=0&&s_geo._vf.idsPerVertex)?(x3dom.nodeTypes.Shape.objectID+2):0;sp.visibilityMap=0.0;if(s_gl.coordType!=gl.FLOAT){if(!s_gl.popGeometry&&(x3dom.Utils.isUnsignedType(s_geo._vf.coordType))){sp.bgCenter=s_geo.getMin().toGL();} +else{sp.bgCenter=s_geo._vf.position.toGL();} +sp.bgSize=s_geo._vf.size.toGL();sp.bgPrecisionMax=s_geo.getPrecisionMax('coordType');} +else{sp.bgCenter=bgCenter;sp.bgSize=bgSize;sp.bgPrecisionMax=1;} +if(s_gl.colorType!=gl.FLOAT){sp.bgPrecisionColMax=s_geo.getPrecisionMax('colorType');} +if(s_gl.texCoordType!=gl.FLOAT){sp.bgPrecisionTexMax=s_geo.getPrecisionMax('texCoordType');} +if(s_gl.imageGeometry!=0&&!x3dom.caps.MOBILE) +{sp.IG_bboxMin=s_geo.getMin().toGL();sp.IG_bboxMax=s_geo.getMax().toGL();sp.IG_implicitMeshSize=s_geo._vf.implicitMeshSize.toGL();var coordTex=x3dom.Utils.findTextureByName(s_gl.texture,"IG_coords0");if(coordTex){sp.IG_coordTextureWidth=coordTex.texture.width;sp.IG_coordTextureHeight=coordTex.texture.height;} +if(s_gl.imageGeometry==1){var indexTex=x3dom.Utils.findTextureByName(s_gl.texture,"IG_index");if(indexTex){sp.IG_indexTextureWidth=indexTex.texture.width;sp.IG_indexTextureHeight=indexTex.texture.height;} +gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,indexTex.texture);gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,coordTex.texture);} +else{gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,coordTex.texture);} +gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);var texUnit=0;if(s_geo.getIndexTexture()){if(!sp.IG_indexTexture){sp.IG_indexTexture=texUnit++;}} +if(s_geo.getCoordinateTexture(0)){if(!sp.IG_coordinateTexture){sp.IG_coordinateTexture=texUnit++;}}} +else if(s_gl.binaryGeometry!=0&&s_geo._vf.idsPerVertex){var shader=s_app._shader;if(shader&&x3dom.isa(s_app._shader,x3dom.nodeTypes.CommonSurfaceShader)){if(shader.getMultiVisibilityMap()){sp.visibilityMap=1.0;sp.multiVisibilityMap=0;var visTex=x3dom.Utils.findTextureByName(s_gl.texture,"multiVisibilityMap");sp.multiVisibilityWidth=visTex.texture.width;sp.multiVisibilityHeight=visTex.texture.height;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,visTex.texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);}}} +if(shape.isSolid()){this.stateManager.enable(gl.CULL_FACE);if(shape.isCCW()){this.stateManager.frontFace(gl.CCW);} +else{this.stateManager.frontFace(gl.CW);}} +else{this.stateManager.disable(gl.CULL_FACE);} +var depthMode=s_app?s_app._cf.depthMode.node:null;if(depthMode) +{if(depthMode._vf.enableDepthTest) +{this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.depthMask(!depthMode._vf.readOnly);this.stateManager.depthFunc(x3dom.Utils.depthFunc(gl,depthMode._vf.depthFunc));this.stateManager.depthRange(depthMode._vf.zNearRange,depthMode._vf.zFarRange);} +else +{this.stateManager.disable(gl.DEPTH_TEST);}} +else +{this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.depthMask(true);this.stateManager.depthFunc(gl.LEQUAL);} +if(s_gl.popGeometry){var model_view=mat_view.mult(trafo);this.updatePopState(drawable,s_geo,sp,s_gl,scene,model_view,viewarea,this.x3dElem.runtime.fps);} +var q_n;if(s_gl.externalGeometry!=0) +{q_n=s_gl.primType.length;} +else +{q_n=s_gl.positions.length;} +for(var q=0;q<q_n;q++){var q6=6*q;var v,v_n,offset;if(!(sp.position!==undefined&&s_gl.buffers[q6+1]&&(s_gl.indexes[q]||s_gl.externalGeometry!=0))) +continue;if(s_gl.buffers[q6]){gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,s_gl.buffers[q6]);} +gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+1]);gl.vertexAttribPointer(sp.position,s_msh._numPosComponents,s_gl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);if(sp.texcoord!==undefined&&s_gl.buffers[q6+3]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+3]);gl.vertexAttribPointer(sp.texcoord,s_msh._numTexComponents,s_gl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);gl.enableVertexAttribArray(sp.texcoord);} +if(sp.color!==undefined&&s_gl.buffers[q6+4]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+4]);gl.vertexAttribPointer(sp.color,s_msh._numColComponents,s_gl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);gl.enableVertexAttribArray(sp.color);} +if(sp.id!==undefined&&s_gl.buffers[q6+5]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+5]);if(s_gl.binaryGeometry!=0&&s_geo._vf["idsPerVertex"]==true) +{gl.vertexAttribPointer(sp.id,1,gl.FLOAT,false,4,0);gl.enableVertexAttribArray(sp.id);} +else +{}} +if(s_gl.binaryGeometry>0||s_gl.popGeometry>0){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawElements(s_gl.primType[v],s_geo._vf.vertexCount[v],s_gl.indexType,x3dom.Utils.getByteAwareOffset(offset,s_gl.indexType,gl));offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.binaryGeometry<0||s_gl.popGeometry<0||s_gl.imageGeometry){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawArrays(s_gl.primType[v],offset,s_geo._vf.vertexCount[v]);offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.externalGeometry==1) +{gl.drawElements(s_gl.primType[q],s_gl.drawCount[q],s_gl.indexType,s_gl.indexOffset[q]);} +else if(s_gl.externalGeometry==-1) +{gl.drawArrays(s_gl.primType[q],0,s_gl.drawCount[q]);} +else if(s_geo.hasIndexOffset()){var indOff=shape.tessellationProperties();for(v=0,v_n=indOff.length;v<v_n;v++){gl.drawElements(s_gl.primType,indOff[v].count,s_gl.indexType,indOff[v].offset*x3dom.Utils.getOffsetMultiplier(s_gl.indexType,gl));}} +else if(s_gl.indexes[q].length==0){gl.drawArrays(s_gl.primType,0,s_gl.positions[q].length/3);} +else{gl.drawElements(s_gl.primType,s_gl.indexes[q].length,s_gl.indexType,0);} +gl.disableVertexAttribArray(sp.position);if(sp.texcoord!==undefined&&s_gl.buffers[q6+3]){gl.disableVertexAttribArray(sp.texcoord);} +if(sp.color!==undefined&&s_gl.buffers[q6+4]){gl.disableVertexAttribArray(sp.color);} +if(sp.id!==undefined&&s_gl.buffers[q6+5]){gl.disableVertexAttribArray(sp.id);}} +if(s_gl.imageGeometry!=0&&!x3dom.caps.MOBILE){gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,null);if(s_gl.imageGeometry==1){gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,null);}}} +if(x3dom.Utils.needLineWidth){this.stateManager.lineWidth(1);} +if(depthMode){this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.depthMask(true);this.stateManager.depthFunc(gl.LEQUAL);this.stateManager.depthRange(0,1);} +gl.flush();try{var data=new Uint8Array(4*width*height);gl.readPixels(x,y,width,height,gl.RGBA,gl.UNSIGNED_BYTE,data);scene._webgl.fboPick.pixelData=data;} +catch(se){scene._webgl.fboPick.pixelData=[];x3dom.debug.logException(se+" (cannot pick)");} +this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,null);};Context.prototype.renderShape=function(drawable,viewarea,slights,numLights,mat_view,mat_scene,mat_light,mat_proj,gl) +{var shape=drawable.shape;var transform=drawable.transform;if(!shape||!shape._webgl||!transform){x3dom.debug.logError("[Context|RenderShape] No valid Shape!");return;} +var s_gl=shape._webgl;var sp=s_gl.shader;if(!sp){x3dom.debug.logError("[Context|RenderShape] No Shader is set!");return;} +var changed=this.stateManager.useProgram(sp);var s_app=shape._cf.appearance.node;var s_geo=shape._cf.geometry.node;var s_msh=s_geo._mesh;var scene=viewarea._scene;var tex=null;if(s_gl.coordType!=gl.FLOAT){if(!s_gl.popGeometry&&(x3dom.Utils.isUnsignedType(s_geo._vf.coordType))){sp.bgCenter=s_geo.getMin().toGL();} +else{sp.bgCenter=s_geo._vf.position.toGL();} +sp.bgSize=s_geo._vf.size.toGL();sp.bgPrecisionMax=s_geo.getPrecisionMax('coordType');} +else{sp.bgCenter=[0,0,0];sp.bgSize=[1,1,1];sp.bgPrecisionMax=1;} +if(s_gl.colorType!=gl.FLOAT){sp.bgPrecisionColMax=s_geo.getPrecisionMax('colorType');} +else{sp.bgPrecisionColMax=1;} +if(s_gl.texCoordType!=gl.FLOAT){sp.bgPrecisionTexMax=s_geo.getPrecisionMax('texCoordType');} +else{sp.bgPrecisionTexMax=1;} +if(s_gl.normalType!=gl.FLOAT){sp.bgPrecisionNorMax=s_geo.getPrecisionMax('normalType');} +else{sp.bgPrecisionNorMax=1;} +if(s_gl.imageGeometry!=0){sp.IG_bboxMin=s_geo.getMin().toGL();sp.IG_bboxMax=s_geo.getMax().toGL();sp.IG_implicitMeshSize=s_geo._vf.implicitMeshSize.toGL();tex=x3dom.Utils.findTextureByName(s_gl.texture,"IG_coords0");if(tex){sp.IG_coordTextureWidth=tex.texture.width;sp.IG_coordTextureHeight=tex.texture.height;} +if(s_gl.imageGeometry==1){tex=x3dom.Utils.findTextureByName(s_gl.texture,"IG_index");if(tex){sp.IG_indexTextureWidth=tex.texture.width;sp.IG_indexTextureHeight=tex.texture.height;}} +tex=null;} +var fog=scene.getFog();if(fog&&changed){sp.fogColor=fog._vf.color.toGL();sp.fogRange=fog._vf.visibilityRange;sp.fogType=(fog._vf.fogType=="LINEAR")?0.0:1.0;} +var mat=s_app?s_app._cf.material.node:null;var shader=s_app?s_app._shader:null;var isUserDefinedShader=shader&&x3dom.isa(shader,x3dom.nodeTypes.ComposedShader);if(s_gl.csshader){sp.diffuseColor=shader._vf.diffuseFactor.toGL();sp.specularColor=shader._vf.specularFactor.toGL();sp.emissiveColor=shader._vf.emissiveFactor.toGL();sp.shininess=shader._vf.shininessFactor;sp.ambientIntensity=(shader._vf.ambientFactor.x+ +shader._vf.ambientFactor.y+ +shader._vf.ambientFactor.z)/3;sp.transparency=1.0-shader._vf.alphaFactor;if(shader.getDisplacementMap()){tex=x3dom.Utils.findTextureByName(s_gl.texture,"displacementMap");sp.displacementWidth=tex.texture.width;sp.displacementHeight=tex.texture.height;sp.displacementFactor=shader._vf.displacementFactor;sp.displacementAxis=(shader._vf.displacementAxis=="x")?0.0:(shader._vf.displacementAxis=="y")?1.0:2.0;} +else if(shader.getDiffuseDisplacementMap()){tex=x3dom.Utils.findTextureByName(s_gl.texture,"diffuseDisplacementMap");sp.displacementWidth=tex.texture.width;sp.displacementHeight=tex.texture.height;sp.displacementFactor=shader._vf.displacementFactor;sp.displacementAxis=(shader._vf.displacementAxis=="x")?0.0:(shader._vf.displacementAxis=="y")?1.0:2.0;} +if(shader.getMultiDiffuseAlphaMap()){tex=x3dom.Utils.findTextureByName(s_gl.texture,"multiDiffuseAlphaMap");sp.multiDiffuseAlphaWidth=tex.texture.width;sp.multiDiffuseAlphaHeight=tex.texture.height;} +if(shader.getMultiVisibilityMap()){tex=x3dom.Utils.findTextureByName(s_gl.texture,"multiVisibilityMap");sp.multiVisibilityWidth=tex.texture.width;sp.multiVisibilityHeight=tex.texture.height;}} +else if(mat){sp.diffuseColor=mat._vf.diffuseColor.toGL();sp.specularColor=mat._vf.specularColor.toGL();sp.emissiveColor=mat._vf.emissiveColor.toGL();sp.shininess=mat._vf.shininess;sp.ambientIntensity=mat._vf.ambientIntensity;sp.transparency=mat._vf.transparency;} +else{sp.diffuseColor=[1.0,1.0,1.0];sp.specularColor=[0.0,0.0,0.0];sp.emissiveColor=[0.0,0.0,0.0];sp.shininess=0.0;sp.ambientIntensity=1.0;sp.transparency=0.0;} +if(shader){if(isUserDefinedShader){for(var fName in shader._vf){if(shader._vf.hasOwnProperty(fName)&&fName!=='language'){var field=shader._vf[fName];if(field){if(field.toGL){sp[fName]=field.toGL();} +else{sp[fName]=field;}}}}} +else if(x3dom.isa(shader,x3dom.nodeTypes.CommonSurfaceShader)){s_gl.csshader=shader;}} +for(var p=0;p<numLights&&changed;p++){var light_transform=mat_view.mult(slights[p].getCurrentTransform());if(x3dom.isa(slights[p],x3dom.nodeTypes.DirectionalLight)){sp['light'+p+'_Type']=0.0;sp['light'+p+'_On']=(slights[p]._vf.on)?1.0:0.0;sp['light'+p+'_Color']=slights[p]._vf.color.toGL();sp['light'+p+'_Intensity']=slights[p]._vf.intensity;sp['light'+p+'_AmbientIntensity']=slights[p]._vf.ambientIntensity;sp['light'+p+'_Direction']=light_transform.multMatrixVec(slights[p]._vf.direction).toGL();sp['light'+p+'_Attenuation']=[1.0,1.0,1.0];sp['light'+p+'_Location']=[1.0,1.0,1.0];sp['light'+p+'_Radius']=0.0;sp['light'+p+'_BeamWidth']=0.0;sp['light'+p+'_CutOffAngle']=0.0;sp['light'+p+'_ShadowIntensity']=slights[p]._vf.shadowIntensity;} +else if(x3dom.isa(slights[p],x3dom.nodeTypes.PointLight)){sp['light'+p+'_Type']=1.0;sp['light'+p+'_On']=(slights[p]._vf.on)?1.0:0.0;sp['light'+p+'_Color']=slights[p]._vf.color.toGL();sp['light'+p+'_Intensity']=slights[p]._vf.intensity;sp['light'+p+'_AmbientIntensity']=slights[p]._vf.ambientIntensity;sp['light'+p+'_Direction']=[1.0,1.0,1.0];sp['light'+p+'_Attenuation']=slights[p]._vf.attenuation.toGL();sp['light'+p+'_Location']=light_transform.multMatrixPnt(slights[p]._vf.location).toGL();sp['light'+p+'_Radius']=slights[p]._vf.radius;sp['light'+p+'_BeamWidth']=0.0;sp['light'+p+'_CutOffAngle']=0.0;sp['light'+p+'_ShadowIntensity']=slights[p]._vf.shadowIntensity;} +else if(x3dom.isa(slights[p],x3dom.nodeTypes.SpotLight)){sp['light'+p+'_Type']=2.0;sp['light'+p+'_On']=(slights[p]._vf.on)?1.0:0.0;sp['light'+p+'_Color']=slights[p]._vf.color.toGL();sp['light'+p+'_Intensity']=slights[p]._vf.intensity;sp['light'+p+'_AmbientIntensity']=slights[p]._vf.ambientIntensity;sp['light'+p+'_Direction']=light_transform.multMatrixVec(slights[p]._vf.direction).toGL();sp['light'+p+'_Attenuation']=slights[p]._vf.attenuation.toGL();sp['light'+p+'_Location']=light_transform.multMatrixPnt(slights[p]._vf.location).toGL();sp['light'+p+'_Radius']=slights[p]._vf.radius;sp['light'+p+'_BeamWidth']=slights[p]._vf.beamWidth;sp['light'+p+'_CutOffAngle']=slights[p]._vf.cutOffAngle;sp['light'+p+'_ShadowIntensity']=slights[p]._vf.shadowIntensity;}} +var nav=scene.getNavigationInfo();if(nav._vf.headlight&&changed){numLights=(numLights)?numLights:0;sp['light'+numLights+'_Type']=0.0;sp['light'+numLights+'_On']=1.0;sp['light'+numLights+'_Color']=[1.0,1.0,1.0];sp['light'+numLights+'_Intensity']=1.0;sp['light'+numLights+'_AmbientIntensity']=0.0;sp['light'+numLights+'_Direction']=[0.0,0.0,-1.0];sp['light'+numLights+'_Attenuation']=[1.0,1.0,1.0];sp['light'+numLights+'_Location']=[1.0,1.0,1.0];sp['light'+numLights+'_Radius']=0.0;sp['light'+numLights+'_BeamWidth']=0.0;sp['light'+numLights+'_CutOffAngle']=0.0;sp['light'+numLights+'_ShadowIntensity']=0.0;} +var depthMode=s_app?s_app._cf.depthMode.node:null;if(depthMode) +{if(depthMode._vf.enableDepthTest) +{this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.depthMask(!depthMode._vf.readOnly);this.stateManager.depthFunc(x3dom.Utils.depthFunc(gl,depthMode._vf.depthFunc));this.stateManager.depthRange(depthMode._vf.zNearRange,depthMode._vf.zFarRange);} +else +{this.stateManager.disable(gl.DEPTH_TEST);}} +else +{this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.depthMask(true);this.stateManager.depthFunc(gl.LEQUAL);} +var blendMode=s_app?s_app._cf.blendMode.node:null;if(blendMode) +{var srcFactor=x3dom.Utils.blendFunc(gl,blendMode._vf.srcFactor);var destFactor=x3dom.Utils.blendFunc(gl,blendMode._vf.destFactor);if(srcFactor&&destFactor) +{this.stateManager.enable(gl.BLEND);this.stateManager.blendFuncSeparate(srcFactor,destFactor,gl.ONE,gl.ONE);this.stateManager.blendColor(blendMode._vf.color.r,blendMode._vf.color.g,blendMode._vf.color.b,1.0-blendMode._vf.colorTransparency);this.stateManager.blendEquation(x3dom.Utils.blendEquation(gl,blendMode._vf.equation));} +else +{this.stateManager.disable(gl.BLEND);}} +else +{this.stateManager.enable(gl.BLEND);this.stateManager.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE);} +var colorMaskMode=s_app?s_app._cf.colorMaskMode.node:null;if(colorMaskMode) +{this.stateManager.colorMask(colorMaskMode._vf.maskR,colorMaskMode._vf.maskG,colorMaskMode._vf.maskB,colorMaskMode._vf.maskA);} +else +{this.stateManager.colorMask(true,true,true,true);} +var lineProperties=s_app?s_app._cf.lineProperties.node:null;if(lineProperties) +{this.stateManager.lineWidth(lineProperties._vf.linewidthScaleFactor);} +else if(x3dom.Utils.needLineWidth) +{this.stateManager.lineWidth(1);} +if(shape.isSolid()){this.stateManager.enable(gl.CULL_FACE);if(shape.isCCW()){this.stateManager.frontFace(gl.CCW);} +else{this.stateManager.frontFace(gl.CW);}} +else{this.stateManager.disable(gl.CULL_FACE);} +var model_view=mat_view.mult(transform);var model_view_inv=model_view.inverse();sp.modelViewMatrix=model_view.toGL();sp.viewMatrix=mat_view.toGL();sp.normalMatrix=model_view_inv.transpose().toGL();sp.modelViewMatrixInverse=model_view_inv.toGL();sp.modelViewProjectionMatrix=mat_scene.mult(transform).toGL();if(isUserDefinedShader){sp.projectionMatrix=mat_proj.toGL();sp.worldMatrix=transform.toGL();sp.worldInverseTranspose=transform.inverse().transpose().toGL();sp.viewMatrixInverse=mat_view.inverse().toGL();} +if(s_gl.popGeometry){this.updatePopState(drawable,s_geo,sp,s_gl,scene,model_view,viewarea,this.x3dElem.runtime.fps);} +for(var cnt=0,cnt_n=s_gl.texture.length;cnt<cnt_n;cnt++){tex=s_gl.texture[cnt];gl.activeTexture(gl.TEXTURE0+cnt);gl.bindTexture(tex.type,tex.texture);gl.texParameteri(tex.type,gl.TEXTURE_WRAP_S,tex.wrapS);gl.texParameteri(tex.type,gl.TEXTURE_WRAP_T,tex.wrapT);gl.texParameteri(tex.type,gl.TEXTURE_MAG_FILTER,tex.magFilter);gl.texParameteri(tex.type,gl.TEXTURE_MIN_FILTER,tex.minFilter);if(!shader||!isUserDefinedShader){if(!sp[tex.samplerName]) +sp[tex.samplerName]=cnt;}} +if(s_app&&s_app._cf.textureTransform.node){var texTrafo=s_app.texTransformMatrix();sp.texTrafoMatrix=texTrafo.toGL();} +var attrib=null;var df,df_n=s_gl.dynamicFields.length;for(df=0;df<df_n;df++){attrib=s_gl.dynamicFields[df];if(sp[attrib.name]!==undefined){gl.bindBuffer(gl.ARRAY_BUFFER,attrib.buf);gl.vertexAttribPointer(sp[attrib.name],attrib.numComponents,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp[attrib.name]);}} +var v,v_n,offset,q_n;if(s_gl.externalGeometry!=0) +{q_n=s_gl.primType.length;} +else +{q_n=s_gl.positions.length;} +for(var q=0;q<q_n;q++){var q6=6*q;if(!(sp.position!==undefined&&s_gl.buffers[q6+1]&&(s_gl.indexes[q]||s_gl.externalGeometry!=0))) +continue;if(s_gl.buffers[q6]){gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,s_gl.buffers[q6]);} +gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+1]);gl.vertexAttribPointer(sp.position,s_msh._numPosComponents,s_gl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);if(sp.normal!==undefined&&s_gl.buffers[q6+2]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+2]);gl.vertexAttribPointer(sp.normal,s_msh._numNormComponents,s_gl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);gl.enableVertexAttribArray(sp.normal);} +if(sp.texcoord!==undefined&&s_gl.buffers[q6+3]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+3]);gl.vertexAttribPointer(sp.texcoord,s_msh._numTexComponents,s_gl.texCoordType,false,shape._texCoordStrideOffset[0],shape._texCoordStrideOffset[1]);gl.enableVertexAttribArray(sp.texcoord);} +if(sp.color!==undefined&&s_gl.buffers[q6+4]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+4]);gl.vertexAttribPointer(sp.color,s_msh._numColComponents,s_gl.colorType,false,shape._colorStrideOffset[0],shape._colorStrideOffset[1]);gl.enableVertexAttribArray(sp.color);} +if(sp.id!==undefined&&s_gl.buffers[q6+5]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+5]);if(s_gl.binaryGeometry!=0&&s_geo._vf["idsPerVertex"]==true) +{gl.vertexAttribPointer(sp.id,1,gl.FLOAT,false,4,0);gl.enableVertexAttribArray(sp.id);} +else +{}} +if(s_gl.popGeometry!=0&&s_gl.buffers[q6+5]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+5]);gl.vertexAttribPointer(sp.PG_vertexID,1,gl.FLOAT,false,4,0);gl.enableVertexAttribArray(sp.PG_vertexID);} +var indOff,renderMode=viewarea.getRenderMode();if(renderMode>0){var polyMode=(renderMode==1)?gl.POINTS:gl.LINES;if(s_gl.binaryGeometry>0||s_gl.popGeometry>0){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawElements(polyMode,s_geo._vf.vertexCount[v],s_gl.indexType,x3dom.Utils.getByteAwareOffset(offset,s_gl.indexType,gl));offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.binaryGeometry<0||s_gl.popGeometry<0||s_gl.imageGeometry){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawArrays(polyMode,offset,s_geo._vf.vertexCount[v]);offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.externalGeometry==1) +{gl.drawElements(polyMode,s_gl.drawCount[q],s_gl.indexType,s_gl.indexOffset[q]);} +else if(s_gl.externalGeometry==-1) +{gl.drawArrays(polyMode,0,s_gl.drawCount[q]);} +else if(s_geo.hasIndexOffset()){indOff=shape.tessellationProperties();for(v=0,v_n=indOff.length;v<v_n;v++){gl.drawElements(polyMode,indOff[v].count,s_gl.indexType,indOff[v].offset*x3dom.Utils.getOffsetMultiplier(s_gl.indexType,gl));}} +else if(s_gl.indexes[q].length==0){gl.drawArrays(polyMode,0,s_gl.positions[q].length/3);} +else{gl.drawElements(polyMode,s_gl.indexes[q].length,s_gl.indexType,0);}} +else{if(s_gl.binaryGeometry>0||s_gl.popGeometry>0){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawElements(s_gl.primType[v],s_geo._vf.vertexCount[v],s_gl.indexType,x3dom.Utils.getByteAwareOffset(offset,s_gl.indexType,gl));offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.binaryGeometry<0||s_gl.popGeometry<0||s_gl.imageGeometry){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawArrays(s_gl.primType[v],offset,s_geo._vf.vertexCount[v]);offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.externalGeometry==1) +{gl.drawElements(s_gl.primType[q],s_gl.drawCount[q],s_gl.indexType,s_gl.indexOffset[q]);} +else if(s_gl.externalGeometry==-1) +{gl.drawArrays(s_gl.primType[q],0,s_gl.drawCount[q]);} +else if(s_geo.hasIndexOffset()){indOff=shape.tessellationProperties();for(v=0,v_n=indOff.length;v<v_n;v++){gl.drawElements(s_gl.primType,indOff[v].count,s_gl.indexType,indOff[v].offset*x3dom.Utils.getOffsetMultiplier(s_gl.indexType,gl));}} +else if(s_gl.indexes[q].length==0){gl.drawArrays(s_gl.primType,0,s_gl.positions[q].length/3);} +else{gl.drawElements(s_gl.primType,s_gl.indexes[q].length,s_gl.indexType,0);}} +gl.disableVertexAttribArray(sp.position);if(sp.normal!==undefined){gl.disableVertexAttribArray(sp.normal);} +if(sp.texcoord!==undefined){gl.disableVertexAttribArray(sp.texcoord);} +if(sp.color!==undefined){gl.disableVertexAttribArray(sp.color);} +if(sp.id!==undefined&&s_gl.buffers[q6+5]){gl.disableVertexAttribArray(sp.id);} +if(s_gl.popGeometry!=0&&sp.PG_vertexID!==undefined){gl.disableVertexAttribArray(sp.PG_vertexID);}} +for(df=0;df<df_n;df++){attrib=s_gl.dynamicFields[df];if(sp[attrib.name]!==undefined){gl.disableVertexAttribArray(sp[attrib.name]);}} +if(s_gl.imageGeometry){v_n=s_geo._vf.vertexCount.length;this.numDrawCalls+=v_n;for(v=0;v<v_n;v++){if(s_gl.primType[v]==gl.TRIANGLE_STRIP) +this.numFaces+=(s_geo._vf.vertexCount[v]-2);else +this.numFaces+=(s_geo._vf.vertexCount[v]/3);this.numCoords+=s_geo._vf.vertexCount[v];}} +else{this.numCoords+=s_msh._numCoords;this.numFaces+=s_msh._numFaces;if(s_gl.binaryGeometry||s_gl.popGeometry){this.numDrawCalls+=s_geo._vf.vertexCount.length;} +else if(s_geo.hasIndexOffset()){this.numDrawCalls+=shape.tessellationProperties().length;} +else{this.numDrawCalls+=q_n;}} +if(depthMode){this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.depthMask(true);this.stateManager.depthFunc(gl.LEQUAL);this.stateManager.depthRange(0,1);} +if(blendMode){this.stateManager.enable(gl.BLEND);this.stateManager.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE);this.stateManager.blendColor(1,1,1,1);this.stateManager.blendEquation(gl.FUNC_ADD);} +if(colorMaskMode){this.stateManager.colorMask(true,true,true,true);} +if(lineProperties){this.stateManager.lineWidth(1);} +var s_gl_tex=s_gl.texture;cnt_n=s_gl_tex?s_gl_tex.length:0;for(cnt=0;cnt<cnt_n;cnt++){if(!s_gl_tex[cnt]) +continue;if(s_app&&s_app._cf.texture.node){tex=s_app._cf.texture.node.getTexture(cnt);gl.activeTexture(gl.TEXTURE0+cnt);if(x3dom.isa(tex,x3dom.nodeTypes.X3DEnvironmentTextureNode)){gl.bindTexture(gl.TEXTURE_CUBE_MAP,null);} +else{gl.bindTexture(gl.TEXTURE_2D,null);}}}};Context.prototype.updatePopState=function(drawable,popGeo,sp,s_gl,scene,model_view,viewarea,currFps) +{var tol=x3dom.nodeTypes.PopGeometry.ErrorToleranceFactor*popGeo._vf.precisionFactor;if(currFps<=1||viewarea.isMovingOrAnimating()){tol*=x3dom.nodeTypes.PopGeometry.PrecisionFactorOnMove;} +var currentLOD=16;if(tol>0){var viewpoint=scene.getViewpoint();var imgPlaneHeightAtDistOne=viewpoint.getImgPlaneHeightAtDistOne();var near=viewpoint.getNear();var center=model_view.multMatrixPnt(popGeo._vf.position);var tightRad=model_view.multMatrixVec(popGeo._vf.size).length()*0.5;var largestRad=model_view.multMatrixVec(popGeo._vf.maxBBSize).length()*0.5;var dist=Math.max(-center.z-tightRad,near);var projPixelLength=dist*(imgPlaneHeightAtDistOne/viewarea._height);var arg=(2*largestRad)/(tol*projPixelLength);currentLOD=Math.ceil(Math.log(arg)/0.693147180559945);currentLOD=(currentLOD<1)?1:((currentLOD>16)?16:currentLOD);} +var minPrec=popGeo._vf.minPrecisionLevel,maxPrec=popGeo._vf.maxPrecisionLevel;currentLOD=(minPrec!=-1&¤tLOD<minPrec)?minPrec:currentLOD;currentLOD=(maxPrec!=-1&¤tLOD>maxPrec)?maxPrec:currentLOD;var currentLOD_min=(s_gl.levelsAvailable<currentLOD)?s_gl.levelsAvailable:currentLOD;currentLOD=currentLOD_min;if(tol<=1) +currentLOD=(currentLOD==popGeo.getNumLevels())?16:currentLOD;var hasIndex=popGeo._vf.indexedRendering;var p_msh=popGeo._mesh;p_msh._numCoords=0;p_msh._numFaces=0;for(var i=0;i<currentLOD_min;++i){var numVerticesAtLevel_i=s_gl.numVerticesAtLevel[i];p_msh._numCoords+=numVerticesAtLevel_i;p_msh._numFaces+=(hasIndex?popGeo.getNumIndicesByLevel(i):numVerticesAtLevel_i)/3;} +x3dom.nodeTypes.PopGeometry.numRenderedVerts+=p_msh._numCoords;x3dom.nodeTypes.PopGeometry.numRenderedTris+=p_msh._numFaces;p_msh.currentLOD=currentLOD;popGeo.adaptVertexCount(hasIndex?p_msh._numFaces*3:p_msh._numCoords);sp.PG_maxBBSize=popGeo._vf.maxBBSize.toGL();sp.PG_bbMin=popGeo._bbMinBySize;sp.PG_numAnchorVertices=popGeo._vf.numAnchorVertices;sp.PG_bbMaxModF=popGeo._vf.bbMaxModF.toGL();sp.PG_bboxShiftVec=popGeo._vf.bbShiftVec.toGL();sp.PG_precisionLevel=currentLOD;sp.PG_powPrecision=x3dom.nodeTypes.PopGeometry.powLUT[currentLOD-1];};Context.prototype.pickValue=function(viewarea,x,y,buttonState,viewMat,sceneMat) +{var gl=this.ctx3d;var scene=viewarea._scene;if(!gl||!scene||!scene._webgl||!scene.drawableCollection){return false;} +var pm=scene._vf.pickMode.toLowerCase();var pickMode=0;switch(pm){case"box":return false;case"idbuf":pickMode=0;break;case"idbuf24":pickMode=3;break;case"idbufid":pickMode=4;break;case"color":pickMode=1;break;case"texcoord":pickMode=2;break;} +x3dom.Utils.startMeasure("picking");var mat_view,mat_scene;if(arguments.length>4){mat_view=viewMat;mat_scene=sceneMat;} +else{mat_view=viewarea._last_mat_view;mat_scene=viewarea._last_mat_scene;} +var min=x3dom.fields.SFVec3f.copy(scene._lastMin);var max=x3dom.fields.SFVec3f.copy(scene._lastMax);var from=mat_view.inverse().e3();var _min=x3dom.fields.SFVec3f.copy(from);var _max=x3dom.fields.SFVec3f.copy(from);if(_min.x>min.x){_min.x=min.x;} +if(_min.y>min.y){_min.y=min.y;} +if(_min.z>min.z){_min.z=min.z;} +if(_max.x<max.x){_max.x=max.x;} +if(_max.y<max.y){_max.y=max.y;} +if(_max.z<max.z){_max.z=max.z;} +scene._lastMin.setValues(_min);scene._lastMax.setValues(_max);var sceneSize=scene._lastMax.subtract(scene._lastMin).length();var cctowc=viewarea.getCCtoWCMatrix();scene._lastMin.setValues(min);scene._lastMax.setValues(max);var baseID=x3dom.nodeTypes.Shape.objectID+2;this.renderPickingPass(gl,scene,mat_view,mat_scene,from,sceneSize,pickMode,x,y,2,2);var pixelData=scene._webgl.fboPick.pixelData;if(pixelData&&pixelData.length) +{var pickPos=new x3dom.fields.SFVec3f(0,0,0);var pickNorm=new x3dom.fields.SFVec3f(0,0,1);var index=0;var objId=pixelData[index+3],shapeId;var pixelOffset=1.0/scene._webgl.pickScale;var denom=1.0/256.0;var dist,line,lineoff,right,up;if(pickMode==0){objId+=256*pixelData[index+2];dist=(pixelData[index]/255.0)*denom+ +(pixelData[index+1]/255.0);line=viewarea.calcViewRay(x,y,cctowc);pickPos=line.pos.add(line.dir.multiply(dist*sceneSize));index=4;dist=(pixelData[index]/255.0)*denom+ +(pixelData[index+1]/255.0);lineoff=viewarea.calcViewRay(x+pixelOffset,y,cctowc);right=lineoff.pos.add(lineoff.dir.multiply(dist*sceneSize));right=right.subtract(pickPos).normalize();index=8;dist=(pixelData[index]/255.0)*denom+ +(pixelData[index+1]/255.0);lineoff=viewarea.calcViewRay(x,y-pixelOffset,cctowc);up=lineoff.pos.add(lineoff.dir.multiply(dist*sceneSize));up=up.subtract(pickPos).normalize();pickNorm=right.cross(up).normalize();} +else if(pickMode==3){objId+=256*pixelData[index+2]+ +65536*pixelData[index+1];dist=pixelData[index]/255.0;line=viewarea.calcViewRay(x,y,cctowc);pickPos=line.pos.add(line.dir.multiply(dist*sceneSize));index=4;dist=pixelData[index]/255.0;lineoff=viewarea.calcViewRay(x+pixelOffset,y,cctowc);right=lineoff.pos.add(lineoff.dir.multiply(dist*sceneSize));right=right.subtract(pickPos).normalize();index=8;dist=pixelData[index]/255.0;lineoff=viewarea.calcViewRay(x,y-pixelOffset,cctowc);up=lineoff.pos.add(lineoff.dir.multiply(dist*sceneSize));up=up.subtract(pickPos).normalize();pickNorm=right.cross(up).normalize();} +else if(pickMode==4){objId+=256*pixelData[index+2];shapeId=pixelData[index+1];shapeId+=256*pixelData[index];if(objId==0&&(shapeId>0&&shapeId<baseID)){objId=shapeId;}} +else{pickPos.x=pixelData[index];pickPos.y=pixelData[index+1];pickPos.z=pixelData[index+2];} +var eventType="shadowObjectIdChanged";var shadowObjectIdChanged,event;var button=Math.max(buttonState>>>8,buttonState&255);if(objId>=baseID){objId-=baseID;var hitObject;if(pickMode!=4){viewarea._pickingInfo.pickPos=pickPos;viewarea._pick.setValues(pickPos);viewarea._pickingInfo.pickNorm=pickNorm;viewarea._pickNorm.setValues(pickNorm);viewarea._pickingInfo.pickObj=null;viewarea._pickingInfo.lastClickObj=null;hitObject=scene._xmlNode;} +else{viewarea._pickingInfo.pickObj=x3dom.nodeTypes.Shape.idMap.nodeID[shapeId];hitObject=viewarea._pickingInfo.pickObj._xmlNode;} +shadowObjectIdChanged=(viewarea._pickingInfo.shadowObjectId!=objId);viewarea._pickingInfo.lastShadowObjectId=viewarea._pickingInfo.shadowObjectId;viewarea._pickingInfo.shadowObjectId=objId;if((shadowObjectIdChanged||button)&&scene._xmlNode&&(scene._xmlNode["on"+eventType]||scene._xmlNode.hasAttribute("on"+eventType)||scene._listeners[eventType])) +{event={target:scene._xmlNode,type:eventType,button:button,mouseup:((buttonState>>>8)>0),layerX:x,layerY:y,shadowObjectId:objId,worldX:pickPos.x,worldY:pickPos.y,worldZ:pickPos.z,normalX:pickNorm.x,normalY:pickNorm.y,normalZ:pickNorm.z,hitPnt:pickPos.toGL(),hitObject:hitObject,cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;},preventDefault:function(){this.cancelBubble=true;}};scene.callEvtHandler(("on"+eventType),event);} +if(scene._shadowIdMap&&scene._shadowIdMap.mapping&&objId<scene._shadowIdMap.mapping.length){var shIds=scene._shadowIdMap.mapping[objId].usage;if(!line){line=viewarea.calcViewRay(x,y,cctowc);} +for(var c=0;c<shIds.length;c++){var shObj=scene._nameSpace.defMap[shIds[c]];if(shObj&&shObj.doIntersect(line)){viewarea._pickingInfo.pickObj=shObj;break;}} +for(var n=0;n<scene._nameSpace.childSpaces.length;n++) +{for(var c=0;c<shIds.length;c++){var shObj=scene._nameSpace.childSpaces[n].defMap[shIds[c]];if(shObj&&shObj.doIntersect(line)){viewarea._pickingInfo.pickObj=shObj;break;}}}}} +else{shadowObjectIdChanged=(viewarea._pickingInfo.shadowObjectId!=-1);viewarea._pickingInfo.shadowObjectId=-1;if(shadowObjectIdChanged&&scene._xmlNode&&(scene._xmlNode["on"+eventType]||scene._xmlNode.hasAttribute("on"+eventType)||scene._listeners[eventType])) +{event={target:scene._xmlNode,type:eventType,button:button,mouseup:((buttonState>>>8)>0),layerX:x,layerY:y,shadowObjectId:viewarea._pickingInfo.shadowObjectId,cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;},preventDefault:function(){this.cancelBubble=true;}};scene.callEvtHandler(("on"+eventType),event);} +if(objId>0){viewarea._pickingInfo.pickPos=pickPos;viewarea._pickingInfo.pickNorm=pickNorm;viewarea._pickingInfo.pickObj=x3dom.nodeTypes.Shape.idMap.nodeID[objId];} +else{viewarea._pickingInfo.pickObj=null;viewarea._pickingInfo.lastClickObj=null;}}} +var pickTime=x3dom.Utils.stopMeasure("picking");this.x3dElem.runtime.addMeasurement('PICKING',pickTime);return true;};Context.prototype.pickRect=function(viewarea,x1,y1,x2,y2) +{var gl=this.ctx3d;var scene=viewarea?viewarea._scene:null;if(!gl||!scene||!scene._webgl||!scene.drawableCollection) +return false;var from=viewarea._last_mat_view.inverse().e3();var sceneSize=scene._lastMax.subtract(scene._lastMin).length();var x=(x1<=x2)?x1:x2;var y=(y1>=y2)?y1:y2;var width=(1+Math.abs(x2-x1))*scene._webgl.pickScale;var height=(1+Math.abs(y2-y1))*scene._webgl.pickScale;this.renderPickingPass(gl,scene,viewarea._last_mat_view,viewarea._last_mat_scene,from,sceneSize,0,x,y,(width<1)?1:width,(height<1)?1:height);var index;var pickedObjects=[];for(index=0;scene._webgl.fboPick.pixelData&&index<scene._webgl.fboPick.pixelData.length;index+=4){var objId=scene._webgl.fboPick.pixelData[index+3]+ +scene._webgl.fboPick.pixelData[index+2]*256;if(objId>0) +pickedObjects.push(objId);} +pickedObjects.sort();var pickedObjectsTemp=(function(arr){var a=[],l=arr.length;for(var i=0;i<l;i++){for(var j=i+1;j<l;j++){if(arr[i]===arr[j]) +j=++i;} +a.push(arr[i]);} +return a;})(pickedObjects);pickedObjects=pickedObjectsTemp;var pickedNodes=[];for(index=0;index<pickedObjects.length;index++){var obj=pickedObjects[index];obj=x3dom.nodeTypes.Shape.idMap.nodeID[obj];obj=(obj&&obj._xmlNode)?obj._xmlNode:null;if(obj) +pickedNodes.push(obj);} +return pickedNodes;};Context.prototype.renderScene=function(viewarea) +{var gl=this.ctx3d;var scene=viewarea._scene;if(gl===null||scene===null){return;} +var rentex=viewarea._doc._nodeBag.renderTextures;var rt_tex,rtl_i,rtl_n=rentex.length;var texProp=null;var type=gl.UNSIGNED_BYTE;var shadowType=gl.UNSIGNED_BYTE;var nearestFilt=false;if(x3dom.caps.FP_TEXTURES&&!x3dom.caps.MOBILE){type=gl.FLOAT;shadowType=gl.FLOAT;if(!x3dom.caps.FPL_TEXTURES){nearestFilt=true;}} +var shadowedLights,numShadowMaps;var i,j,n,size,sizeAvailable;var texType,refinementPos;var vertices=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1];scene.updateVolume();if(!scene._webgl) +{scene._webgl={};this.setupFgnds(gl,scene);scene._webgl.pickScale=0.5;scene._webgl._currFboWidth=Math.round(this.canvas.width*scene._webgl.pickScale);scene._webgl._currFboHeight=Math.round(this.canvas.height*scene._webgl.pickScale);scene._webgl.fboPick=x3dom.Utils.initFBO(gl,scene._webgl._currFboWidth,scene._webgl._currFboHeight,gl.UNSIGNED_BYTE,false,true);scene._webgl.fboPick.pixelData=null;scene._webgl.pickShader=this.cache.getShader(gl,x3dom.shader.PICKING);scene._webgl.pickShader24=this.cache.getShader(gl,x3dom.shader.PICKING_24);scene._webgl.pickShaderId=this.cache.getShader(gl,x3dom.shader.PICKING_ID);scene._webgl.pickColorShader=this.cache.getShader(gl,x3dom.shader.PICKING_COLOR);scene._webgl.pickTexCoordShader=this.cache.getShader(gl,x3dom.shader.PICKING_TEXCOORD);scene._webgl.normalShader=this.cache.getShader(gl,x3dom.shader.NORMAL);scene._webgl.fboShadow=[];shadowedLights=viewarea.getShadowedLights();n=shadowedLights.length;for(i=0;i<n;i++) +{size=shadowedLights[i]._vf.shadowMapSize;if(!x3dom.isa(shadowedLights[i],x3dom.nodeTypes.PointLight)) +numShadowMaps=Math.max(1,Math.min(shadowedLights[i]._vf.shadowCascades,6));else +numShadowMaps=6;scene._webgl.fboShadow[i]=[];for(j=0;j<numShadowMaps;j++) +scene._webgl.fboShadow[i][j]=x3dom.Utils.initFBO(gl,size,size,shadowType,false,true);} +if(scene._webgl.fboShadow.length>0) +scene._webgl.fboScene=x3dom.Utils.initFBO(gl,this.canvas.width,this.canvas.height,shadowType,false,true);scene._webgl.fboBlur=[];for(i=0;i<n;i++) +{size=scene._webgl.fboShadow[i][0].height;sizeAvailable=false;for(j=0;j<scene._webgl.fboBlur.length;j++){if(size==scene._webgl.fboBlur[j].height) +sizeAvailable=true;} +if(!sizeAvailable) +scene._webgl.fboBlur[scene._webgl.fboBlur.length]=x3dom.Utils.initFBO(gl,size,size,shadowType,false,true);} +scene._webgl.ppBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,scene._webgl.ppBuffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW);scene._webgl.shadowShader=this.cache.getShader(gl,x3dom.shader.SHADOW);scene._webgl.refinement={stamps:new Array(2),positionBuffer:gl.createBuffer()};gl.bindBuffer(gl.ARRAY_BUFFER,scene._webgl.refinement.positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW);for(rtl_i=0;rtl_i<rtl_n;rtl_i++){rt_tex=rentex[rtl_i];texProp=rt_tex._cf.textureProperties.node;texType=rt_tex.requirePingPong()?gl.UNSIGNED_BYTE:type;rt_tex._webgl={};rt_tex._webgl.fbo=x3dom.Utils.initFBO(gl,rt_tex._vf.dimensions[0],rt_tex._vf.dimensions[1],texType,(texProp&&texProp._vf.generateMipMaps),!rt_tex.requirePingPong());rt_tex._cleanupGLObjects=function(retainTex){if(!retainTex) +gl.deleteTexture(this._webgl.fbo.tex);if(this._webgl.fbo.rbo) +gl.deleteRenderbuffer(this._webgl.fbo.rbo);gl.bindFramebuffer(gl.FRAMEBUFFER,null);gl.deleteFramebuffer(this._webgl.fbo.fbo);this._webgl.fbo.rbo=null;this._webgl.fbo.fbo=null;};if(rt_tex.requirePingPong()){refinementPos=rt_tex._vf.dimensions[0]+"x"+rt_tex._vf.dimensions[1];if(scene._webgl.refinement[refinementPos]===undefined){scene._webgl.refinement[refinementPos]=x3dom.Utils.initFBO(gl,rt_tex._vf.dimensions[0],rt_tex._vf.dimensions[1],texType,false,false);} +rt_tex._webgl.texture=null;}} +viewarea._last_mat_view=x3dom.fields.SFMatrix4f.identity();viewarea._last_mat_proj=x3dom.fields.SFMatrix4f.identity();viewarea._last_mat_scene=x3dom.fields.SFMatrix4f.identity();this._calledViewpointChangedHandler=false;} +else +{var fboWidth=Math.round(this.canvas.width*scene._webgl.pickScale);var fboHeight=Math.round(this.canvas.height*scene._webgl.pickScale);if(scene._webgl._currFboWidth!==fboWidth||scene._webgl._currFboHeight!==fboHeight){scene._webgl._currFboWidth=fboWidth;scene._webgl._currFboHeight=fboHeight;scene._webgl.fboPick=x3dom.Utils.initFBO(gl,fboWidth,fboHeight,scene._webgl.fboPick.type,false,true);scene._webgl.fboPick.pixelData=null;x3dom.debug.logInfo("Refreshed picking FBO to size ("+fboWidth+", "+fboHeight+")");} +for(rtl_i=0;rtl_i<rtl_n;rtl_i++){rt_tex=rentex[rtl_i];if(rt_tex._webgl&&rt_tex._webgl.fbo&&rt_tex._webgl.fbo.width==rt_tex._vf.dimensions[0]&&rt_tex._webgl.fbo.height==rt_tex._vf.dimensions[1]) +continue;rt_tex.invalidateGLObject();if(rt_tex._cleanupGLObjects) +rt_tex._cleanupGLObjects();else +rt_tex._cleanupGLObjects=function(retainTex){if(!retainTex) +gl.deleteTexture(this._webgl.fbo.tex);if(this._webgl.fbo.rbo) +gl.deleteRenderbuffer(this._webgl.fbo.rbo);gl.bindFramebuffer(gl.FRAMEBUFFER,null);gl.deleteFramebuffer(this._webgl.fbo.fbo);this._webgl.fbo.rbo=null;this._webgl.fbo.fbo=null;};texProp=rt_tex._cf.textureProperties.node;texType=rt_tex.requirePingPong()?gl.UNSIGNED_BYTE:type;rt_tex._webgl={};rt_tex._webgl.fbo=x3dom.Utils.initFBO(gl,rt_tex._vf.dimensions[0],rt_tex._vf.dimensions[1],texType,(texProp&&texProp._vf.generateMipMaps),!rt_tex.requirePingPong());if(rt_tex.requirePingPong()){refinementPos=rt_tex._vf.dimensions[0]+"x"+rt_tex._vf.dimensions[1];if(scene._webgl.refinement[refinementPos]===undefined){scene._webgl.refinement[refinementPos]=x3dom.Utils.initFBO(gl,rt_tex._vf.dimensions[0],rt_tex._vf.dimensions[1],texType,false,false);} +rt_tex._webgl.texture=null;} +x3dom.debug.logInfo("Init/resize RenderedTexture_"+rtl_i+" to size "+ +rt_tex._vf.dimensions[0]+" x "+rt_tex._vf.dimensions[1]);} +shadowedLights=viewarea.getShadowedLights();n=shadowedLights.length;for(i=0;i<n;i++){size=shadowedLights[i]._vf.shadowMapSize;if(!x3dom.isa(shadowedLights[i],x3dom.nodeTypes.PointLight)) +numShadowMaps=Math.max(1,Math.min(shadowedLights[i]._vf.shadowCascades,6));else +numShadowMaps=6;if(typeof scene._webgl.fboShadow[i]==="undefined"||scene._webgl.fboShadow[i].length!=numShadowMaps||scene._webgl.fboShadow[i][0].height!=size){scene._webgl.fboShadow[i]=[];for(j=0;j<numShadowMaps;j++){scene._webgl.fboShadow[i][j]=x3dom.Utils.initFBO(gl,size,size,shadowType,false,true);}}} +for(i=0;i<n;i++){size=scene._webgl.fboShadow[i][0].height;sizeAvailable=false;for(j=0;j<scene._webgl.fboBlur.length;j++){if(size==scene._webgl.fboBlur[j].height) +sizeAvailable=true;} +if(!sizeAvailable) +scene._webgl.fboBlur[scene._webgl.fboBlur.length]=x3dom.Utils.initFBO(gl,size,size,shadowType,false,true);} +if(scene._webgl.fboShadow.length>0&&typeof scene._webgl.fboScene=="undefined"||scene._webgl.fboScene&&(this.canvas.width!=scene._webgl.fboScene.width||this.canvas.height!=scene._webgl.fboScene.height)){scene._webgl.fboScene=x3dom.Utils.initFBO(gl,this.canvas.width,this.canvas.height,shadowType,false,true);}} +var env=scene.getEnvironment();env.checkSanity();var bgnd=scene.getBackground();this.setupScene(gl,bgnd);this.numFaces=0;this.numCoords=0;this.numDrawCalls=0;var mat_proj=viewarea.getProjectionMatrix();var mat_view=viewarea.getViewMatrix();if(!this._calledViewpointChangedHandler||!viewarea._last_mat_view.equals(mat_view)){var e_viewpoint=scene.getViewpoint();var e_eventType="viewpointChanged";try{if(e_viewpoint._xmlNode&&(e_viewpoint._xmlNode["on"+e_eventType]||e_viewpoint._xmlNode.hasAttribute("on"+e_eventType)||e_viewpoint._listeners[e_eventType])){var e_viewtrafo=e_viewpoint.getCurrentTransform();e_viewtrafo=e_viewtrafo.inverse().mult(mat_view);var e_mat=e_viewtrafo.inverse();var e_rotation=new x3dom.fields.Quaternion(0,0,1,0);e_rotation.setValue(e_mat);var e_translation=e_mat.e3();var e_event={target:e_viewpoint._xmlNode,type:e_eventType,matrix:e_viewtrafo,position:e_translation,orientation:e_rotation.toAxisAngle(),cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;},preventDefault:function(){this.cancelBubble=true;}};e_viewpoint.callEvtHandler(("on"+e_eventType),e_event);this._calledViewpointChangedHandler=true;}} +catch(e_e){x3dom.debug.logException(e_e);}} +viewarea._last_mat_view=mat_view;viewarea._last_mat_proj=mat_proj;var mat_scene=mat_proj.mult(mat_view);viewarea._last_mat_scene=mat_scene;scene.drawableCollection=null;if(!scene.drawableCollection) +{var drawableCollectionConfig={viewArea:viewarea,sortTrans:env._vf.sortTrans,viewMatrix:mat_view,projMatrix:mat_proj,sceneMatrix:mat_scene,frustumCulling:true,smallFeatureThreshold:env._smallFeatureThreshold,context:this,gl:gl};scene.drawableCollection=new x3dom.DrawableCollection(drawableCollectionConfig);x3dom.Utils.startMeasure('traverse');scene.collectDrawableObjects(x3dom.fields.SFMatrix4f.identity(),scene.drawableCollection,true,false,0);var traverseTime=x3dom.Utils.stopMeasure('traverse');this.x3dElem.runtime.addMeasurement('TRAVERSE',traverseTime);} +x3dom.Utils.startMeasure('sorting');scene.drawableCollection.sort();var sortTime=x3dom.Utils.stopMeasure('sorting');this.x3dElem.runtime.addMeasurement('SORT',sortTime);var slights=viewarea.getLights();var numLights=slights.length;var mat_light;var WCToLCMatrices=[];var lMatrices=[];var shadowCount=0;x3dom.Utils.startMeasure('shadow');for(var p=0;p<numLights;p++){if(slights[p]._vf.shadowIntensity>0.0){var lightMatrix=viewarea.getLightMatrix()[p];shadowMaps=scene._webgl.fboShadow[shadowCount];var offset=Math.max(0.0,Math.min(1.0,slights[p]._vf.shadowOffset));if(!x3dom.isa(slights[p],x3dom.nodeTypes.PointLight)){var numCascades=Math.max(1,Math.min(slights[p]._vf.shadowCascades,6));mat_light=viewarea.getWCtoLCMatricesCascaded(lightMatrix,slights[p],mat_proj);for(i=0;i<numCascades;i++){this.renderShadowPass(gl,viewarea,mat_light[i],mat_view,shadowMaps[i],offset,false);}} +else{mat_light=viewarea.getWCtoLCMatricesPointLight(lightMatrix,slights[p],mat_proj);for(i=0;i<6;i++){this.renderShadowPass(gl,viewarea,mat_light[i],mat_view,shadowMaps[i],offset,false);}} +shadowCount++;WCToLCMatrices[WCToLCMatrices.length]=mat_light;lMatrices[lMatrices.length]=lightMatrix;}} +if(shadowCount>0){this.renderShadowPass(gl,viewarea,mat_scene,mat_view,scene._webgl.fboScene,0.0,true);var shadowTime=x3dom.Utils.stopMeasure('shadow');this.x3dElem.runtime.addMeasurement('SHADOW',shadowTime);} +else{this.x3dElem.runtime.removeMeasurement('SHADOW');} +mat_light=viewarea.getWCtoLCMatrix(viewarea.getLightMatrix()[0]);for(rtl_i=0;rtl_i<rtl_n;rtl_i++){this.renderRTPass(gl,viewarea,rentex[rtl_i]);} +x3dom.Utils.startMeasure('render');this.stateManager.viewport(0,0,this.canvas.width,this.canvas.height);bgnd._webgl.render(gl,mat_view,mat_proj);x3dom.nodeTypes.PopGeometry.numRenderedVerts=0;x3dom.nodeTypes.PopGeometry.numRenderedTris=0;n=scene.drawableCollection.length;if(env._vf.smallFeatureCulling&&env._lowPriorityThreshold<1&&viewarea.isMovingOrAnimating()){n=Math.floor(n*env._lowPriorityThreshold);if(!n&&scene.drawableCollection.length) +n=1;} +this.stateManager.unsetProgram();for(i=0;i<n;i++){var drawable=scene.drawableCollection.get(i);this.renderShape(drawable,viewarea,slights,numLights,mat_view,mat_scene,mat_light,mat_proj,gl);} +if(shadowCount>0) +this.renderShadows(gl,viewarea,shadowedLights,WCToLCMatrices,lMatrices,mat_view,mat_proj,mat_scene);this.stateManager.disable(gl.BLEND);this.stateManager.disable(gl.DEPTH_TEST);viewarea._numRenderedNodes=n;if(viewarea._visDbgBuf!==undefined&&viewarea._visDbgBuf) +{var pm=scene._vf.pickMode.toLowerCase();if(pm.indexOf("idbuf")==0||pm=="color"||pm=="texcoord"){this.stateManager.viewport(0,3*this.canvas.height/4,this.canvas.width/4,this.canvas.height/4);scene._fgnd._webgl.render(gl,scene._webgl.fboPick.tex);} +if(shadowCount>0){this.stateManager.viewport(this.canvas.width/4,3*this.canvas.height/4,this.canvas.width/4,this.canvas.height/4);scene._fgnd._webgl.render(gl,scene._webgl.fboScene.tex);} +var row=3,col=2;for(i=0;i<shadowCount;i++){var shadowMaps=scene._webgl.fboShadow[i];for(j=0;j<shadowMaps.length;j++){this.stateManager.viewport(col*this.canvas.width/4,row*this.canvas.height/4,this.canvas.width/4,this.canvas.height/4);scene._fgnd._webgl.render(gl,shadowMaps[j].tex);if(col<2){col++;}else{col=0;row--;}}} +for(rtl_i=0;rtl_i<rtl_n;rtl_i++){rt_tex=rentex[rtl_i];if(!rt_tex._webgl.fbo.fbo) +continue;this.stateManager.viewport(rtl_i*this.canvas.width/8,5*this.canvas.height/8,this.canvas.width/8,this.canvas.height/8);scene._fgnd._webgl.render(gl,rt_tex._webgl.fbo.tex);}} +gl.finish();var renderTime=x3dom.Utils.stopMeasure('render');this.x3dElem.runtime.addMeasurement('RENDER',renderTime);this.x3dElem.runtime.addMeasurement('DRAW',(n?renderTime/n:0));this.x3dElem.runtime.addInfo('#NODES:',scene.drawableCollection.numberOfNodes);this.x3dElem.runtime.addInfo('#SHAPES:',viewarea._numRenderedNodes);this.x3dElem.runtime.addInfo("#DRAWS:",this.numDrawCalls);this.x3dElem.runtime.addInfo("#POINTS:",this.numCoords);this.x3dElem.runtime.addInfo("#TRIS:",this.numFaces);};Context.prototype.renderPingPongPass=function(gl,viewarea,rt){var scene=viewarea._scene;var refinementPos=rt._vf.dimensions[0]+"x"+rt._vf.dimensions[1];var refinementFbo=scene._webgl.refinement[refinementPos];if(rt._currLoadLevel==0&&(!scene._webgl.refinement.stamps[0]||!scene._webgl.refinement.stamps[1])){scene._webgl.refinement.stamps[0]=this.cache.getTexture2D(gl,rt._nameSpace.doc,rt._nameSpace.getURL(rt._vf.stamp0),false,false,false,false);scene._webgl.refinement.stamps[1]=this.cache.getTexture2D(gl,rt._nameSpace.doc,rt._nameSpace.getURL(rt._vf.stamp1),false,false,false,false);} +if(rt._currLoadLevel<rt._loadLevel){rt._currLoadLevel++;if(rt._webgl.texture) +gl.deleteTexture(rt._webgl.texture);var filename=rt._vf.url[0]+"/"+rt._currLoadLevel+"."+rt._vf.format;rt._webgl.texture=x3dom.Utils.createTexture2D(gl,rt._nameSpace.doc,rt._nameSpace.getURL(filename),false,false,false,false);if(rt._vf.iterations%2===0) +(rt._currLoadLevel%2!==0)?rt._repeat.x*=2.0:rt._repeat.y*=2.0;else +(rt._currLoadLevel%2===0)?rt._repeat.x*=2.0:rt._repeat.y*=2.0;} +if(!rt._webgl.texture.ready||!scene._webgl.refinement.stamps[0].ready||!scene._webgl.refinement.stamps[1].ready) +return;this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,refinementFbo.fbo);this.stateManager.viewport(0,0,refinementFbo.width,refinementFbo.height);this.stateManager.disable(gl.BLEND);this.stateManager.disable(gl.CULL_FACE);this.stateManager.disable(gl.DEPTH_TEST);gl.clearColor(0,0,0,1);gl.clearDepth(1);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);var sp=this.cache.getShader(gl,x3dom.shader.TEXTURE_REFINEMENT);this.stateManager.useProgram(sp);gl.bindBuffer(gl.ARRAY_BUFFER,scene._webgl.refinement.positionBuffer);gl.vertexAttribPointer(sp.position,2,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.position);sp.stamp=0;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,scene._webgl.refinement.stamps[(rt._currLoadLevel+1)%2]);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.REPEAT);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.REPEAT);if(rt._currLoadLevel>1){sp.lastTex=1;gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,rt._webgl.fbo.tex);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);} +sp.curTex=2;gl.activeTexture(gl.TEXTURE2);gl.bindTexture(gl.TEXTURE_2D,rt._webgl.texture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);sp.mode=rt._currLoadLevel-1;sp.repeat=rt._repeat.toGL();gl.drawArrays(gl.TRIANGLES,0,6);this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,rt._webgl.fbo.fbo);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);sp.mode=0;sp.curTex=2;gl.activeTexture(gl.TEXTURE2);gl.bindTexture(gl.TEXTURE_2D,refinementFbo.tex);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.drawArrays(gl.TRIANGLES,0,6);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,null);gl.disableVertexAttribArray(sp.position);this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,null);this.stateManager.viewport(0,0,this.canvas.width,this.canvas.height);if(rt._vf.autoRefinement) +rt.nextLevel();if(rt._currLoadLevel==rt._vf.maxLevel) +rt._currLoadLevel++;if(rt._webgl.fbo.mipMap){gl.bindTexture(gl.TEXTURE_2D,rt._webgl.fbo.tex);gl.generateMipmap(gl.TEXTURE_2D);gl.bindTexture(gl.TEXTURE_2D,null);} +if(!rt.requirePingPong()){gl.deleteTexture(rt._webgl.texture);delete rt._webgl.texture;rt._cleanupGLObjects(true);} +rt._renderedImage++;};Context.prototype.renderRTPass=function(gl,viewarea,rt) +{if(x3dom.isa(rt,x3dom.nodeTypes.RefinementTexture)){if(rt.requirePingPong()){this.renderPingPongPass(gl,viewarea,rt);} +return;} +switch(rt._vf.update.toUpperCase()){case"NONE":return;case"NEXT_FRAME_ONLY":if(!rt._needRenderUpdate){return;} +rt._needRenderUpdate=false;break;case"ALWAYS":default:break;} +var scene=viewarea._scene;var bgnd=null;var mat_view=rt.getViewMatrix();var mat_proj=rt.getProjectionMatrix();var mat_scene=mat_proj.mult(mat_view);var lightMatrix=viewarea.getLightMatrix()[0];var mat_light=viewarea.getWCtoLCMatrix(lightMatrix);var i,n,m=rt._cf.excludeNodes.nodes.length;var arr=new Array(m);for(i=0;i<m;i++){var render=rt._cf.excludeNodes.nodes[i]._vf.render;if(render===undefined){arr[i]=-1;} +else{if(render===true){arr[i]=1;}else{arr[i]=0;}} +rt._cf.excludeNodes.nodes[i]._vf.render=false;} +this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,rt._webgl.fbo.fbo);this.stateManager.viewport(0,0,rt._webgl.fbo.width,rt._webgl.fbo.height);if(rt._cf.background.node===null){gl.clearColor(0,0,0,1);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT|gl.STENCIL_BUFFER_BIT);} +else if(rt._cf.background.node===scene.getBackground()){bgnd=scene.getBackground();bgnd._webgl.render(gl,mat_view,mat_proj);} +else{bgnd=rt._cf.background.node;this.setupScene(gl,bgnd);bgnd._webgl.render(gl,mat_view,mat_proj);} +this.stateManager.depthFunc(gl.LEQUAL);this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.enable(gl.CULL_FACE);this.stateManager.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE);this.stateManager.enable(gl.BLEND);var slights=viewarea.getLights();var numLights=slights.length;var transform,shape,drawable;var locScene=rt._cf.scene.node;if(!locScene||locScene===scene){n=scene.drawableCollection.length;if(rt._vf.showNormals){this.renderNormals(gl,scene,scene._webgl.normalShader,mat_view,mat_scene);} +else{this.stateManager.unsetProgram();for(i=0;i<n;i++){drawable=scene.drawableCollection.get(i);this.renderShape(drawable,viewarea,slights,numLights,mat_view,mat_scene,mat_light,mat_proj,gl);}}} +else{var env=scene.getEnvironment();var drawableCollectionConfig={viewArea:viewarea,sortTrans:env._vf.sortTrans,viewMatrix:mat_view,projMatrix:mat_proj,sceneMatrix:mat_scene,frustumCulling:false,smallFeatureThreshold:1,context:this,gl:gl};locScene.numberOfNodes=0;locScene.drawableCollection=new x3dom.DrawableCollection(drawableCollectionConfig);locScene.collectDrawableObjects(x3dom.fields.SFMatrix4f.identity(),locScene.drawableCollection,true,false,0);locScene.drawableCollection.sort();n=locScene.drawableCollection.length;if(rt._vf.showNormals){this.renderNormals(gl,locScene,scene._webgl.normalShader,mat_view,mat_scene);} +else{this.stateManager.unsetProgram();for(i=0;i<n;i++){drawable=locScene.drawableCollection.get(i);if(!drawable.shape._vf.render){continue;} +this.renderShape(drawable,viewarea,slights,numLights,mat_view,mat_scene,mat_light,mat_proj,gl);}}} +this.stateManager.disable(gl.BLEND);this.stateManager.disable(gl.DEPTH_TEST);gl.flush();this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,null);if(rt._webgl.fbo.mipMap){gl.bindTexture(gl.TEXTURE_2D,rt._webgl.fbo.tex);gl.generateMipmap(gl.TEXTURE_2D);gl.bindTexture(gl.TEXTURE_2D,null);} +for(i=0;i<m;i++){if(arr[i]!==0){rt._cf.excludeNodes.nodes[i]._vf.render=true;}}};Context.prototype.renderNormals=function(gl,scene,sp,mat_view,mat_scene) +{if(!sp||!scene){return;} +this.stateManager.depthFunc(gl.LEQUAL);this.stateManager.enable(gl.DEPTH_TEST);this.stateManager.enable(gl.CULL_FACE);this.stateManager.disable(gl.BLEND);this.stateManager.useProgram(sp);var bgCenter=x3dom.fields.SFVec3f.NullVector.toGL();var bgSize=x3dom.fields.SFVec3f.OneVector.toGL();for(var i=0,n=scene.drawableCollection.length;i<n;i++) +{var drawable=scene.drawableCollection.get(i);var trafo=drawable.transform;var shape=drawable.shape;var s_gl=shape._webgl;if(!s_gl||!shape||!shape._vf.render){continue;} +var s_geo=shape._cf.geometry.node;var s_msh=s_geo._mesh;var model_view_inv=mat_view.mult(trafo).inverse();sp.normalMatrix=model_view_inv.transpose().toGL();sp.modelViewProjectionMatrix=mat_scene.mult(trafo).toGL();sp.imageGeometry=s_gl.imageGeometry;if(s_gl.coordType!=gl.FLOAT){if(s_gl.popGeometry!=0||(s_msh._numPosComponents==4&&x3dom.Utils.isUnsignedType(s_geo._vf.coordType))) +sp.bgCenter=s_geo.getMin().toGL();else +sp.bgCenter=s_geo._vf.position.toGL();sp.bgSize=s_geo._vf.size.toGL();sp.bgPrecisionMax=s_geo.getPrecisionMax('coordType');} +else{sp.bgCenter=bgCenter;sp.bgSize=bgSize;sp.bgPrecisionMax=1;} +if(s_gl.normalType!=gl.FLOAT){sp.bgPrecisionNorMax=s_geo.getPrecisionMax('normalType');} +else{sp.bgPrecisionNorMax=1;} +if(shape.isSolid()){this.stateManager.enable(gl.CULL_FACE);if(shape.isCCW()){this.stateManager.frontFace(gl.CCW);} +else{this.stateManager.frontFace(gl.CW);}} +else{this.stateManager.disable(gl.CULL_FACE);} +for(var q=0,q_n=s_gl.positions.length;q<q_n;q++){var q6=6*q;var v,v_n,offset;if(!(sp.position!==undefined&&s_gl.buffers[q6+1]&&s_gl.indexes[q])) +continue;if(s_gl.buffers[q6]){gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,s_gl.buffers[q6]);} +gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+1]);gl.vertexAttribPointer(sp.position,s_msh._numPosComponents,s_gl.coordType,false,shape._coordStrideOffset[0],shape._coordStrideOffset[1]);gl.enableVertexAttribArray(sp.position);if(sp.normal!==undefined&&s_gl.buffers[q6+2]){gl.bindBuffer(gl.ARRAY_BUFFER,s_gl.buffers[q6+2]);gl.vertexAttribPointer(sp.normal,s_msh._numNormComponents,s_gl.normalType,false,shape._normalStrideOffset[0],shape._normalStrideOffset[1]);gl.enableVertexAttribArray(sp.normal);} +if(s_gl.binaryGeometry>0||s_gl.popGeometry>0){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawElements(s_gl.primType[v],s_geo._vf.vertexCount[v],s_gl.indexType,x3dom.Utils.getByteAwareOffset(offset,s_gl.indexType,gl));offset+=s_geo._vf.vertexCount[v];}} +else if(s_gl.binaryGeometry<0||s_gl.popGeometry<0||s_gl.imageGeometry){for(v=0,offset=0,v_n=s_geo._vf.vertexCount.length;v<v_n;v++){gl.drawArrays(s_gl.primType[v],offset,s_geo._vf.vertexCount[v]);offset+=s_geo._vf.vertexCount[v];}} +else if(s_geo.hasIndexOffset()){var indOff=shape.tessellationProperties();for(v=0,v_n=indOff.length;v<v_n;v++){gl.drawElements(s_gl.primType,indOff[v].count,s_gl.indexType,indOff[v].offset*x3dom.Utils.getOffsetMultiplier(s_gl.indexType,gl));}} +else if(s_gl.indexes[q].length==0){gl.drawArrays(s_gl.primType,0,s_gl.positions[q].length/3);} +else{gl.drawElements(s_gl.primType,s_gl.indexes[q].length,s_gl.indexType,0);} +gl.disableVertexAttribArray(sp.position);if(sp.normal!==undefined){gl.disableVertexAttribArray(sp.normal);}}}};Context.prototype.shutdown=function(viewarea){var gl=this.ctx3d;var scene=viewarea._scene;if(gl==null||!scene){return;} +var bgnd=scene.getBackground();if(bgnd._webgl.position!==undefined){gl.deleteBuffer(bgnd._webgl.buffers[1]);gl.deleteBuffer(bgnd._webgl.buffers[0]);} +var fgnd=scene._fgnd;if(fgnd._webgl.position!==undefined){gl.deleteBuffer(fgnd._webgl.buffers[1]);gl.deleteBuffer(fgnd._webgl.buffers[0]);} +var n=scene.drawableCollection?scene.drawableCollection.length:0;for(var i=0;i<n;i++){var shape=scene.drawableCollection.get(i).shape;if(shape._cleanupGLObjects) +shape._cleanupGLObjects(true);} +this.cache.Release(gl);};Context.prototype.renderShadows=function(gl,viewarea,shadowedLights,wctolc,lMatrices,mat_view,mat_proj,mat_scene) +{var scene=viewarea._scene;var texLimit=x3dom.caps.MAX_TEXTURE_IMAGE_UNITS;if(texLimit<7) +return;var texUnits=1;var renderSplit=[0];var shadowMaps,numShadowMaps;var i,j,k;for(i=0;i<shadowedLights.length;i++) +{var filterSize=shadowedLights[i]._vf.shadowFilterSize;shadowMaps=scene._webgl.fboShadow[i];numShadowMaps=shadowMaps.length;for(j=0;j<numShadowMaps;j++){this.blurTex(gl,scene,shadowMaps[j],filterSize);} +texUnits+=6;if(texUnits>texLimit){renderSplit[renderSplit.length]=i;texUnits=7;}} +renderSplit[renderSplit.length]=shadowedLights.length;var n=renderSplit.length-1;var mat_proj_inv=mat_proj.inverse();var mat_scene_inv=mat_scene.inverse();this.stateManager.enable(gl.BLEND);this.stateManager.blendFunc(gl.DST_COLOR,gl.ZERO);for(var s=0;s<n;s++) +{var startIndex=renderSplit[s];var endIndex=renderSplit[s+1];var currentLights=[];for(k=startIndex;k<endIndex;k++) +currentLights[currentLights.length]=shadowedLights[k];var sp=this.cache.getShadowRenderingShader(gl,currentLights);this.stateManager.useProgram(sp);gl.bindBuffer(gl.ARRAY_BUFFER,scene._webgl.ppBuffer);gl.vertexAttribPointer(sp.position,2,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.position);sp.sceneMap=0;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,scene._webgl.fboScene.tex);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);sp.inverseProj=mat_proj_inv.toGL();sp.inverseViewProj=mat_scene_inv.toGL();var mat_light;var lightMatrix;var shadowIndex=0;for(var p=0,pn=currentLights.length;p<pn;p++){lightMatrix=lMatrices[p+startIndex];mat_light=wctolc[p+startIndex];shadowMaps=scene._webgl.fboShadow[p+startIndex];numShadowMaps=mat_light.length;for(i=0;i<numShadowMaps;i++){gl.activeTexture(gl.TEXTURE1+shadowIndex);gl.bindTexture(gl.TEXTURE_2D,shadowMaps[i].tex);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);sp['light'+p+'_'+i+'_ShadowMap']=shadowIndex+1;sp['light'+p+'_'+i+'_Matrix']=mat_light[i].toGL();shadowIndex++;} +sp['light'+p+'_ViewMatrix']=lightMatrix.toGL();if(!x3dom.isa(currentLights[p],x3dom.nodeTypes.PointLight)){for(j=0;j<numShadowMaps;j++){var numCascades=Math.max(1,Math.min(currentLights[p]._vf.shadowCascades,6));var splitFactor=Math.max(0,Math.min(currentLights[p]._vf.shadowSplitFactor,1));var splitOffset=Math.max(0,Math.min(currentLights[p]._vf.shadowSplitOffset,1));var splitDepths=viewarea.getShadowSplitDepths(numCascades,splitFactor,splitOffset,false,mat_proj);sp['light'+p+'_'+j+'_Split']=splitDepths[j+1];}} +var light_transform=mat_view.mult(currentLights[p].getCurrentTransform());if(x3dom.isa(currentLights[p],x3dom.nodeTypes.DirectionalLight)) +{sp['light'+p+'_Type']=0.0;sp['light'+p+'_On']=(currentLights[p]._vf.on)?1.0:0.0;sp['light'+p+'_Direction']=light_transform.multMatrixVec(currentLights[p]._vf.direction).toGL();sp['light'+p+'_Attenuation']=[1.0,1.0,1.0];sp['light'+p+'_Location']=[1.0,1.0,1.0];sp['light'+p+'_Radius']=0.0;sp['light'+p+'_BeamWidth']=0.0;sp['light'+p+'_CutOffAngle']=0.0;sp['light'+p+'_ShadowIntensity']=currentLights[p]._vf.shadowIntensity;sp['light'+p+'_ShadowCascades']=currentLights[p]._vf.shadowCascades;sp['light'+p+'_ShadowOffset']=Math.max(0.0,Math.min(1.0,currentLights[p]._vf.shadowOffset));} +else if(x3dom.isa(currentLights[p],x3dom.nodeTypes.PointLight)) +{sp['light'+p+'_Type']=1.0;sp['light'+p+'_On']=(currentLights[p]._vf.on)?1.0:0.0;sp['light'+p+'_Direction']=[1.0,1.0,1.0];sp['light'+p+'_Attenuation']=currentLights[p]._vf.attenuation.toGL();sp['light'+p+'_Location']=light_transform.multMatrixPnt(currentLights[p]._vf.location).toGL();sp['light'+p+'_Radius']=currentLights[p]._vf.radius;sp['light'+p+'_BeamWidth']=0.0;sp['light'+p+'_CutOffAngle']=0.0;sp['light'+p+'_ShadowIntensity']=currentLights[p]._vf.shadowIntensity;sp['light'+p+'_ShadowOffset']=Math.max(0.0,Math.min(1.0,currentLights[p]._vf.shadowOffset));} +else if(x3dom.isa(currentLights[p],x3dom.nodeTypes.SpotLight)) +{sp['light'+p+'_Type']=2.0;sp['light'+p+'_On']=(currentLights[p]._vf.on)?1.0:0.0;sp['light'+p+'_Direction']=light_transform.multMatrixVec(currentLights[p]._vf.direction).toGL();sp['light'+p+'_Attenuation']=currentLights[p]._vf.attenuation.toGL();sp['light'+p+'_Location']=light_transform.multMatrixPnt(currentLights[p]._vf.location).toGL();sp['light'+p+'_Radius']=currentLights[p]._vf.radius;sp['light'+p+'_BeamWidth']=currentLights[p]._vf.beamWidth;sp['light'+p+'_CutOffAngle']=currentLights[p]._vf.cutOffAngle;sp['light'+p+'_ShadowIntensity']=currentLights[p]._vf.shadowIntensity;sp['light'+p+'_ShadowCascades']=currentLights[p]._vf.shadowCascades;sp['light'+p+'_ShadowOffset']=Math.max(0.0,Math.min(1.0,currentLights[p]._vf.shadowOffset));}} +gl.drawArrays(gl.TRIANGLES,0,6);var nk=shadowIndex+1;for(k=0;k<nk;k++){gl.activeTexture(gl.TEXTURE0+k);gl.bindTexture(gl.TEXTURE_2D,null);} +gl.disableVertexAttribArray(sp.position);} +this.stateManager.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);};Context.prototype.blurTex=function(gl,scene,targetFbo,filterSize) +{if(filterSize<=0) +return;else if(filterSize<5) +filterSize=3;else if(filterSize<7) +filterSize=5;else +filterSize=7;var width=targetFbo.width;var height=targetFbo.height;var fboBlur=null;for(var i=0,n=scene._webgl.fboBlur.length;i<n;i++) +if(height==scene._webgl.fboBlur[i].height){fboBlur=scene._webgl.fboBlur[i];break;} +this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,fboBlur.fbo);this.stateManager.viewport(0,0,width,height);this.stateManager.enable(gl.BLEND);this.stateManager.blendFunc(gl.ONE,gl.ZERO);this.stateManager.disable(gl.CULL_FACE);this.stateManager.disable(gl.DEPTH_TEST);gl.clearColor(1.0,1.0,1.0,0.0);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);var sp=this.cache.getShader(gl,x3dom.shader.BLUR);this.stateManager.useProgram(sp);gl.bindBuffer(gl.ARRAY_BUFFER,scene._webgl.ppBuffer);gl.vertexAttribPointer(sp.position,2,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(sp.position);sp.pixelSizeHor=1.0/width;sp.pixelSizeVert=1.0/height;sp.filterSize=filterSize;sp.horizontal=true;sp.texture=0;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,targetFbo.tex);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.drawArrays(gl.TRIANGLES,0,6);this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,targetFbo.fbo);gl.clearColor(1.0,1.0,1.0,0.0);gl.clearDepth(1.0);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);sp.horizontal=false;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,fboBlur.tex);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.drawArrays(gl.TRIANGLES,0,6);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,null);gl.disableVertexAttribArray(sp.position);gl.flush();this.stateManager.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);this.stateManager.bindFramebuffer(gl.FRAMEBUFFER,null);this.stateManager.viewport(0,0,this.canvas.width,this.canvas.height);};return setupContext;})();x3dom.bridge={setFlashReady:function(driver,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.isFlashReady=true;x3dom.debug.logInfo('Flash is ready for rendering ('+driver+')');},onMouseDown:function(x,y,button,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onMousePress(x3dCanvas.gl,x,y,button);x3dCanvas.doc.needRender=true;},onMouseUp:function(x,y,button,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onMouseRelease(x3dCanvas.gl,x,y,button);x3dCanvas.doc.needRender=true;},onMouseOver:function(x,y,button,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onMouseOver(x3dCanvas.gl,x,y,button);x3dCanvas.doc.needRender=true;},onMouseOut:function(x,y,button,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onMouseOut(x3dCanvas.gl,x,y,button);x3dCanvas.doc.needRender=true;},onDoubleClick:function(x,y,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onDoubleClick(x3dCanvas.gl,x,y);x3dCanvas.doc.needRender=true;x3dom.debug.logInfo("dblClick");},onMouseDrag:function(x,y,button,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onDrag(x3dCanvas.gl,x,y,button);x3dCanvas.doc.needRender=true;},onMouseMove:function(x,y,button,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onMove(x3dCanvas.gl,x,y,button);x3dCanvas.doc.needRender=true;},onMouseWheel:function(x,y,button,canvas){var x3dCanvas=x3dom.canvases[canvas];x3dCanvas.doc.onDrag(x3dCanvas.gl,x,y,button);x3dCanvas.doc.needRender=true;},onKeyDown:function(charCode,canvas){var x3dCanvas=x3dom.canvases[canvas];var keysEnabled=x3dCanvas.x3dElem.getAttribute("keysEnabled");if(!keysEnabled||keysEnabled.toLowerCase()==="true"){x3dCanvas.doc.onKeyPress(charCode);} +x3dCanvas.doc.needRender=true;},setBBox:function(id,center,size){var shape=x3dom.nodeTypes.Shape.idMap.nodeID[id];},setShapeDirty:function(id){var shape=x3dom.nodeTypes.Shape.idMap.nodeID[id];shape.setAllDirty();}};x3dom.gfx_flash=(function(){function Context(object,name,renderType){this.object=object;this.name=name;this.isAlreadySet=false;this.renderType=renderType;} +function setupContext(object,renderType){x3dom.Utils.maxIndexableCoords=65535;return new Context(object,'flash',renderType);} +Context.prototype.getName=function(){return this.name;};Context.prototype.renderScene=function(viewarea){var scene=viewarea._scene;var min=x3dom.fields.SFVec3f.MAX();var max=x3dom.fields.SFVec3f.MIN();var vol=scene.getVolume();vol.getBounds(min,max);scene._lastMin=min;scene._lastMax=max;viewarea._last_mat_view=x3dom.fields.SFMatrix4f.identity();viewarea._last_mat_proj=x3dom.fields.SFMatrix4f.identity();viewarea._last_mat_scene=x3dom.fields.SFMatrix4f.identity();var viewpoint=scene.getViewpoint();if(viewpoint._vf.zNear==-1||viewpoint._vf.zFar==-1){viewpoint._vf.zFar=20000;viewpoint._vf.zNear=0.1;} +var mat_view=viewarea.getViewMatrix();var mat_proj=viewarea.getProjectionMatrix();var mat_scene=mat_proj.mult(mat_view);this.setupScene(scene,viewarea);var background=scene.getBackground();this.setupBackground(background);scene.drawableCollection=null;var env=scene.getEnvironment();var drawableCollectionConfig={viewArea:viewarea,sortTrans:env._vf.sortTrans,viewMatrix:mat_view,projMatrix:mat_proj,sceneMatrix:mat_scene,frustumCulling:false,smallFeatureThreshold:false,context:null,gl:null};scene.drawableCollection=new x3dom.DrawableCollection(drawableCollectionConfig);scene.collectDrawableObjects(x3dom.fields.SFMatrix4f.identity(),scene.drawableCollection,true,false,0);scene.drawableCollection.concat();var numDrawableObjects=scene.drawableCollection.length;if(numDrawableObjects>0){var RefList=[];for(var i=0;i<numDrawableObjects;i++){var drawable=scene.drawableCollection.get(i);var trafo=drawable.transform;var obj3d=drawable.shape;if(RefList[obj3d._objectID]!=undefined){RefList[obj3d._objectID]++;}else{RefList[obj3d._objectID]=0;} +this.setupShape(obj3d,trafo,RefList[obj3d._objectID]);}} +this.object.renderScene();};Context.prototype.setupScene=function(scene,viewarea){var mat_view=viewarea.getViewMatrix();if(!viewarea._last_mat_view.equals(mat_view)){var e_viewpoint=viewarea._scene.getViewpoint();var e_eventType="viewpointChanged";try{if(e_viewpoint._xmlNode&&(e_viewpoint._xmlNode["on"+e_eventType]||e_viewpoint._xmlNode.hasAttribute("on"+e_eventType)||e_viewpoint._listeners[e_eventType])){var e_viewtrafo=e_viewpoint.getCurrentTransform();e_viewtrafo=e_viewtrafo.inverse().mult(mat_view);var e_mat=e_viewtrafo.inverse();var e_rotation=new x3dom.fields.Quaternion(0,0,1,0);var e_translation=e_mat.e3();var e_event={target:e_viewpoint._xmlNode,type:e_eventType,matrix:e_viewtrafo,position:e_translation,orientation:e_rotation.toAxisAngle(),cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;}};e_viewpoint.callEvtHandler(e_eventType,e_event);}} +catch(e_e){x3dom.debug.logException(e_e);}} +viewarea._last_mat_view=mat_view;var viewpoint=scene.getViewpoint();var mat_proj=viewarea.getProjectionMatrix();this.object.setViewpoint({fov:viewpoint._vf.fov,zFar:viewpoint._vf.zFar,zNear:viewpoint._vf.zNear,viewMatrix:mat_view.toGL(),projectionMatrix:mat_proj.toGL()});var nav=scene.getNavigationInfo();if(nav._vf.headlight){this.object.setHeadLight({id:-1,on:1.0,color:[1.0,1.0,1.0],intensity:1.0,ambientIntensity:0.0,direction:[0.0,0.0,-1.0]});} +if(this.renderType=="deferred"){var lights=viewarea.getLights();for(var i=0;i<lights.length;i++){if(lights[i]._dirty){if(x3dom.isa(lights[i],x3dom.nodeTypes.DirectionalLight)){this.object.setDirectionalLight({id:lights[i]._lightID,on:lights[i]._vf.on,color:lights[i]._vf.color.toGL(),intensity:lights[i]._vf.intensity,ambientIntensity:lights[i]._vf.ambientIntensity,direction:lights[i]._vf.direction.toGL()});} +else if(x3dom.isa(lights[i],x3dom.nodeTypes.PointLight)){var light_transform=mat_view.mult(lights[i].getCurrentTransform());this.object.setPointLight({id:lights[i]._lightID,on:lights[i]._vf.on,color:lights[i]._vf.color.toGL(),intensity:lights[i]._vf.intensity,ambientIntensity:lights[i]._vf.ambientIntensity,attenuation:lights[i]._vf.attenuation.toGL(),location:lights[i]._vf.location.toGL(),radius:lights[i]._vf.radius});} +else if(x3dom.isa(lights[i],x3dom.nodeTypes.SpotLight)){} +lights[i]._dirty=false;}}}};Context.prototype.setupBackground=function(background){if(background._dirty){this.object.setBackground({texURLs:background.getTexUrl(),skyAngle:background._vf.skyAngle,skyColor:background.getSkyColor().toGL(),groundAngle:background._vf.groundAngle,groundColor:background.getGroundColor().toGL(),transparency:background.getTransparency()});background._dirty=false;}};Context.prototype.setupShape=function(shape,trafo,refID){if(x3dom.isa(shape._cf.geometry.node,x3dom.nodeTypes.PointSet)){x3dom.debug.logError("Flash backend doesn't support PointSets yet");}else if(x3dom.isa(shape._cf.geometry.node,x3dom.nodeTypes.IndexedLineSet)){x3dom.debug.logError("Flash backend doesn't support LineSets yet");}else if(x3dom.isa(shape._cf.geometry.node,x3dom.nodeTypes.Text)){this.setupText(shape,trafo,refID);}else{this.setupIndexedFaceSet(shape,trafo,refID);}};Context.prototype.setupIndexedFaceSet=function(shape,trafo,refID){this.object.setMeshTransform({id:shape._objectID,refID:refID,transform:trafo.toGL()});if(refID==0){var isImageGeometry=x3dom.isa(shape._cf.geometry.node,x3dom.nodeTypes.ImageGeometry);var isBinaryGeometry=x3dom.isa(shape._cf.geometry.node,x3dom.nodeTypes.BinaryGeometry);var appearance=shape._cf.appearance.node;var sortType=(appearance)?shape._cf.appearance.node._vf.sortType:"auto";var sortKey=(appearance)?shape._cf.appearance.node._vf.sortKey:0 +if(isImageGeometry){this.object.setMeshProperties({id:shape._objectID,type:"ImageGeometry",sortType:sortType,sortKey:sortKey,solid:shape.isSolid(),bboxMin:shape._cf.geometry.node.getMin().toGL(),bboxMax:shape._cf.geometry.node.getMax().toGL(),bboxCenter:shape._cf.geometry.node.getCenter().toGL(),primType:shape._cf.geometry.node._vf.primType,vertexCount:shape._cf.geometry.node._vf.vertexCount});}else if(isBinaryGeometry){this.object.setMeshProperties({id:shape._objectID,type:"BinaryGeometry",sortType:sortType,sortKey:sortKey,solid:shape.isSolid(),bgCenter:shape._cf.geometry.node._vf.position.toGL(),bgSize:shape._cf.geometry.node._vf.size.toGL(),bboxCenter:shape._cf.geometry.node.getCenter().toGL(),primType:shape._cf.geometry.node._vf.primType,vertexCount:shape._cf.geometry.node._vf.vertexCount});}else{this.object.setMeshProperties({id:shape._objectID,type:"Default",sortType:sortType,sortKey:sortKey,solid:shape.isSolid()});} +if(shape._dirty.indexes===true){if(isImageGeometry){}else if(isBinaryGeometry){this.object.setMeshIndices({id:shape._objectID,idx:0,indices:shape._nameSpace.getURL(shape._cf.geometry.node._vf.index)});}else{if(shape._cf.geometry.node._mesh._multiIndIndices&&shape._cf.geometry.node._mesh._multiIndIndices.length) +{shape._cf.geometry.node._mesh.splitMesh(3,true);} +for(var i=0;i<shape._cf.geometry.node._mesh._indices.length;i++){this.object.setMeshIndices({id:shape._objectID,idx:i,indices:shape._cf.geometry.node._mesh._indices[i]});}} +shape._dirty.indexes=false;} +if(shape._dirty.positions===true){if(isImageGeometry){this.object.setMeshVertices({id:shape._objectID,idx:0,coordinateTexture0:shape._cf.geometry.node.getCoordinateTextureURL(0),coordinateTexture1:shape._cf.geometry.node.getCoordinateTextureURL(1)});}else if(isBinaryGeometry){this.object.setMeshVertices({id:shape._objectID,idx:0,interleaved:shape._cf.geometry.node._hasStrideOffset,vertices:shape._nameSpace.getURL(shape._cf.geometry.node._vf.coord),normals:shape._nameSpace.getURL(shape._cf.geometry.node._vf.normal),texCoords:shape._nameSpace.getURL(shape._cf.geometry.node._vf.texCoord),colors:shape._nameSpace.getURL(shape._cf.geometry.node._vf.color),numColorComponents:shape._cf.geometry.node._mesh._numColComponents,numNormalComponents:shape._cf.geometry.node._mesh._numNormComponents,vertexType:shape._cf.geometry.node._vf.coordType,normalType:shape._cf.geometry.node._vf.normalType,texCoordType:shape._cf.geometry.node._vf.texCoordType,colorType:shape._cf.geometry.node._vf.colorType,vertexStrideOffset:shape._coordStrideOffset,normalStrideOffset:shape._normalStrideOffset,texCoordStrideOffset:shape._texCoordStrideOffset,colorStrideOffset:shape._colorStrideOffset});}else{for(var i=0;i<shape._cf.geometry.node._mesh._positions.length;i++){this.object.setMeshVertices({id:shape._objectID,idx:i,vertices:shape._cf.geometry.node._mesh._positions[i]});}} +shape._dirty.positions=false;} +if(shape._dirty.normals===true){if(isImageGeometry){this.object.setMeshNormals({id:shape._objectID,idx:0,normalTexture:shape._cf.geometry.node.getNormalTextureURL()});}else if(isBinaryGeometry){if(!shape._cf.geometry.node._hasStrideOffset){this.object.setMeshNormals({id:shape._objectID,idx:0,normals:shape._nameSpace.getURL(shape._cf.geometry.node._vf.normal)});}}else{if(shape._cf.geometry.node._mesh._normals[0].length){for(var i=0;i<shape._cf.geometry.node._mesh._normals.length;i++){this.object.setMeshNormals({id:shape._objectID,idx:i,normals:shape._cf.geometry.node._mesh._normals[i]});}}} +shape._dirty.normals=false;} +if(shape._dirty.colors===true){if(isImageGeometry){this.object.setMeshColors({id:shape._objectID,idx:0,colorTexture:shape._cf.geometry.node.getColorTextureURL(),components:shape._cf.geometry.node._mesh._numColComponents});}else if(isBinaryGeometry){if(!shape._cf.geometry.node._hasStrideOffset){this.object.setMeshColors({id:shape._objectID,idx:0,colors:shape._nameSpace.getURL(shape._cf.geometry.node._vf.color),components:shape._cf.geometry.node._mesh._numColComponents});}}else{if(shape._cf.geometry.node._mesh._colors[0].length){for(var i=0;i<shape._cf.geometry.node._mesh._colors.length;i++){this.object.setMeshColors({id:shape._objectID,idx:i,colors:shape._cf.geometry.node._mesh._colors[i],components:shape._cf.geometry.node._mesh._numColComponents});}}} +shape._dirty.colors=false;} +if(shape._dirty.texcoords===true){if(isImageGeometry){this.object.setMeshTexCoords({id:shape._objectID,idx:0,texCoordTexture:shape._cf.geometry.node.getTexCoordTextureURL()});}else if(isBinaryGeometry){if(!shape._cf.geometry.node._hasStrideOffset){this.object.setMeshTexCoords({id:shape._objectID,idx:0,texCoords:shape._nameSpace.getURL(shape._cf.geometry.node._vf.texCoord)});}}else{if(shape._cf.geometry.node._mesh._texCoords[0].length){for(var i=0;i<shape._cf.geometry.node._mesh._texCoords.length;i++){this.object.setMeshTexCoords({id:shape._objectID,idx:i,texCoords:shape._cf.geometry.node._mesh._texCoords[i]});}}} +shape._dirty.texcoords=false;} +if(shape._dirty.material===true){if(appearance){var material=shape._cf.appearance.node._cf.material.node;if(material){this.object.setMeshMaterial({id:shape._objectID,ambientIntensity:material._vf.ambientIntensity,diffuseColor:material._vf.diffuseColor.toGL(),emissiveColor:material._vf.emissiveColor.toGL(),shininess:material._vf.shininess,specularColor:material._vf.specularColor.toGL(),transparency:material._vf.transparency});}} +shape._dirty.material=false;} +if(shape._dirty.texture===true){if(appearance){var texTrafo=null;if(appearance._cf.textureTransform.node){texTrafo=appearance.texTransformMatrix().toGL();} +var texture=shape._cf.appearance.node._cf.texture.node;if(texture){if(x3dom.isa(texture,x3dom.nodeTypes.PixelTexture)){this.object.setPixelTexture({id:shape._objectID,width:texture._vf.image.width,height:texture._vf.image.height,comp:texture._vf.image.comp,pixels:texture._vf.image.toGL()});}else if(x3dom.isa(texture,x3dom.nodeTypes.ComposedCubeMapTexture)){this.object.setCubeTexture({id:shape._objectID,texURLs:texture.getTexUrl()});}else if(texture._isCanvas&&texture._canvas){this.object.setCanvasTexture({id:shape._objectID,width:texture._canvas.width,height:texture._canvas.height,dataURL:texture._canvas.toDataURL()});}else if(x3dom.isa(texture,x3dom.nodeTypes.MultiTexture)){x3dom.debug.logError("Flash backend doesn't support MultiTextures yet");}else if(x3dom.isa(texture,x3dom.nodeTypes.MovieTexture)){x3dom.debug.logError("Flash backend doesn't support MovieTextures yet");}else{this.object.setMeshTexture({id:shape._objectID,origChannelCount:texture._vf.origChannelCount,repeatS:texture._vf.repeatS,repeatT:texture._vf.repeatT,url:texture._vf.url[0],transform:texTrafo});}}else{this.object.removeTexture({id:shape._objectID});}} +shape._dirty.texture=false;} +if(shape._cf.geometry.node._cf.texCoord!==undefined&&shape._cf.geometry.node._cf.texCoord.node!==null&&!x3dom.isa(shape._cf.geometry.node._cf.texCoord.node,x3dom.nodeTypes.X3DTextureNode)&&shape._cf.geometry.node._cf.texCoord.node._vf.mode){var texMode=shape._cf.geometry.node._cf.texCoord.node._vf.mode;if(texMode.toLowerCase()=="sphere"){this.object.setSphereMapping({id:shape._objectID,sphereMapping:1});} +else{this.object.setSphereMapping({id:shape._objectID,sphereMapping:0});}} +else{this.object.setSphereMapping({id:shape._objectID,sphereMapping:0});}}};Context.prototype.setupText=function(shape,trafo,refID){this.object.setMeshTransform({id:shape._objectID,refID:refID,transform:trafo.toGL()});if(refID==0){var appearance=shape._cf.appearance.node;var sortType=(appearance)?shape._cf.appearance.node._vf.sortType:"auto";var sortKey=(appearance)?shape._cf.appearance.node._vf.sortKey:0 +if(shape._dirty.text===true){var fontStyleNode=shape._cf.geometry.node._cf.fontStyle.node;if(fontStyleNode===null){this.object.setMeshProperties({id:shape._objectID,type:"Text",sortType:sortType,sortKey:sortKey,solid:shape.isSolid(),text:shape._cf.geometry.node._vf.string,fontFamily:['SERIF'],fontStyle:"PLAIN",fontAlign:"BEGIN",fontSize:32,fontSpacing:1.0,fontHorizontal:true,fontLanguage:"",fontLeftToRight:true,fontTopToBottom:true});}else{this.object.setMeshProperties({id:shape._objectID,type:"Text",sortType:sortType,sortKey:sortKey,solid:shape.isSolid(),text:shape._cf.geometry.node._vf.string,fontFamily:fontStyleNode._vf.family.toString(),fontStyle:fontStyleNode._vf.style.toString(),fontAlign:fontStyleNode._vf.justify.toString(),fontSize:fontStyleNode._vf.size,fontSpacing:fontStyleNode._vf.spacing,fontHorizontal:fontStyleNode._vf.horizontal,fontLanguage:fontStyleNode._vf.language,fontLeftToRight:fontStyleNode._vf.leftToRight,fontTopToBottom:fontStyleNode._vf.topToBottom});} +shape._dirty.text=false;} +if(shape._dirty.material===true){if(appearance){var material=shape._cf.appearance.node._cf.material.node;if(material){this.object.setMeshMaterial({id:shape._objectID,ambientIntensity:material._vf.ambientIntensity,diffuseColor:material._vf.diffuseColor.toGL(),emissiveColor:material._vf.emissiveColor.toGL(),shininess:material._vf.shininess,specularColor:material._vf.specularColor.toGL(),transparency:material._vf.transparency});}} +shape._dirty.material=false;}}};Context.prototype.pickValue=function(viewarea,x,y,viewMat,sceneMat){var scene=viewarea._scene;if(this.object===null||scene===null||scene.drawableCollection===undefined||!scene.drawableCollection||scene._vf.pickMode.toLowerCase()==="box"){return false;} +var pickMode=(scene._vf.pickMode.toLowerCase()==="color")?1:((scene._vf.pickMode.toLowerCase()==="texcoord")?2:0);var data=this.object.pickValue({pickMode:pickMode});if(data.objID>0){viewarea._pickingInfo.pickPos=new x3dom.fields.SFVec3f(data.pickPosX,data.pickPosY,data.pickPosZ);viewarea._pickingInfo.pickObj=x3dom.nodeTypes.Shape.idMap.nodeID[data.objID];}else{viewarea._pickingInfo.pickObj=null;viewarea._pickingInfo.lastClickObj=null;} +return true;};Context.prototype.shutdown=function(viewarea){};return setupContext;})();x3dom.NodeNameSpace=function(name,document){this.name=name;this.doc=document;this.baseURL="";this.defMap={};this.parent=null;this.childSpaces=[];};x3dom.NodeNameSpace.prototype.addNode=function(node,name){this.defMap[name]=node;node._nameSpace=this;};x3dom.NodeNameSpace.prototype.removeNode=function(name){var node=name?this.defMap[name]:null;if(node){delete this.defMap[name];node._nameSpace=null;}};x3dom.NodeNameSpace.prototype.getNamedNode=function(name){return this.defMap[name];};x3dom.NodeNameSpace.prototype.getNamedElement=function(name){var node=this.defMap[name];return(node?node._xmlNode:null);};x3dom.NodeNameSpace.prototype.addSpace=function(space){this.childSpaces.push(space);space.parent=this;};x3dom.NodeNameSpace.prototype.removeSpace=function(space){space.parent=null;for(var it=0;it<this.childSpaces.length;it++){if(this.childSpaces[it]==space){this.childSpaces.splice(it,1);}}};x3dom.NodeNameSpace.prototype.setBaseURL=function(url){var i=url.lastIndexOf("/");this.baseURL=(i>=0)?url.substr(0,i+1):"";x3dom.debug.logInfo("setBaseURL: "+this.baseURL);};x3dom.NodeNameSpace.prototype.getURL=function(url){if(url===undefined||!url.length){return"";} +else{return((url[0]==='/')||(url.indexOf(":")>=0))?url:(this.baseURL+url);}};x3dom.hasElementAttribute=function(attrName) +{var ok=this.__hasAttribute(attrName);if(!ok&&attrName){ok=this.__hasAttribute(attrName.toLowerCase());} +return ok;};x3dom.getElementAttribute=function(attrName) +{var attrib=this.__getAttribute(attrName);if(!attrib&&attrib!=""&&attrName){attrib=this.__getAttribute(attrName.toLowerCase());} +if(attrib||!this._x3domNode){return attrib;} +else{return this._x3domNode._vf[attrName];}};x3dom.setElementAttribute=function(attrName,newVal) +{this.__setAttribute(attrName,newVal);var x3dNode=this._x3domNode;if(x3dNode){x3dNode.updateField(attrName,newVal);x3dNode._nameSpace.doc.needRender=true;}};x3dom.getFieldValue=function(fieldName) +{var x3dNode=this._x3domNode;if(x3dNode&&x3dNode._vf[fieldName]){return x3dNode._vf[fieldName].copy();} +return null;};x3dom.setFieldValue=function(fieldName,fieldvalue){var x3dNode=this._x3domNode;if(x3dNode&&x3dNode._vf[fieldName]){if(fieldvalue instanceof Object&&'copy'in fieldvalue) +{x3dNode._vf[fieldName]=fieldvalue.copy();} +else +x3dNode._vf[fieldName]=fieldvalue;x3dNode.fieldChanged(fieldName);x3dNode._nameSpace.doc.needRender=true;}};x3dom.requestFieldRef=function(fieldName) +{var x3dNode=this._x3domNode;if(x3dNode&&x3dNode._vf[fieldName]) +{return x3dNode._vf[fieldName];} +return null;};x3dom.releaseFieldRef=function(fieldName) +{var x3dNode=this._x3domNode;if(x3dNode&&x3dNode._vf[fieldName]) +{x3dNode.fieldChanged(fieldName);x3dNode._nameSpace.doc.needRender=true;}};x3dom.NodeNameSpace.prototype.setupTree=function(domNode){var n=null;if(x3dom.isX3DElement(domNode)){if(domNode._x3domNode){x3dom.debug.logWarning('Tree is already initialized');return null;} +if((domNode.tagName!==undefined)&&(!domNode.__addEventListener)&&(!domNode.__removeEventListener)) +{domNode.__addEventListener=domNode.addEventListener;domNode.addEventListener=function(type,func,phase){if(!this._x3domNode._listeners[type]){this._x3domNode._listeners[type]=[];} +this._x3domNode._listeners[type].push(func);this.__addEventListener(type,func,phase);};domNode.__removeEventListener=domNode.removeEventListener;domNode.removeEventListener=function(type,func,phase){var list=this._x3domNode._listeners[type];if(list){for(var it=0;it<list.length;it++){if(list[it]==func){list.splice(it,1);}}} +this.__removeEventListener(type,func,phase);};} +if(domNode.hasAttribute('USE')||domNode.hasAttribute('use')) +{if(!domNode.hasAttribute('USE')){domNode.setAttribute('USE',domNode.getAttribute('use'));} +n=this.defMap[domNode.getAttribute('USE')];if(!n){var nsName=domNode.getAttribute('USE').split('__');if(nsName.length>=2){var otherNS=this;while(otherNS){if(otherNS.name==nsName[0]) +n=otherNS.defMap[nsName[1]];if(n) +otherNS=null;else +otherNS=otherNS.parent;} +if(!n){n=null;x3dom.debug.logWarning('Could not USE: '+domNode.getAttribute('USE'));}}} +if(n){domNode._x3domNode=n;} +return n;} +else{if(domNode.localName.toLowerCase()==='route'){var route=domNode;var fnAtt=route.getAttribute('fromNode')||route.getAttribute('fromnode');var tnAtt=route.getAttribute('toNode')||route.getAttribute('tonode');var fromNode=this.defMap[fnAtt];var toNode=this.defMap[tnAtt];if(!(fromNode&&toNode)){x3dom.debug.logWarning("Broken route - can't find all DEFs for "+fnAtt+" -> "+tnAtt);} +else{fnAtt=route.getAttribute('fromField')||route.getAttribute('fromfield');tnAtt=route.getAttribute('toField')||route.getAttribute('tofield');fromNode.setupRoute(fnAtt,toNode,tnAtt);route._nodeNameSpace=this;} +return null;} +domNode.requestFieldRef=x3dom.requestFieldRef;domNode.releaseFieldRef=x3dom.releaseFieldRef;domNode.getFieldValue=x3dom.getFieldValue;domNode.setFieldValue=x3dom.setFieldValue;var nodeType=x3dom.nodeTypesLC[domNode.localName.toLowerCase()];if(nodeType===undefined){x3dom.debug.logWarning("Unrecognised X3D element <"+domNode.localName+">.");} +else{if((x3dom.userAgentFeature.supportsDOMAttrModified===false)&&(domNode instanceof Element)){if(domNode.setAttribute&&!domNode.__setAttribute){domNode.__setAttribute=domNode.setAttribute;domNode.setAttribute=x3dom.setElementAttribute;} +if(domNode.getAttribute&&!domNode.__getAttribute){domNode.__getAttribute=domNode.getAttribute;domNode.getAttribute=x3dom.getElementAttribute;} +if(domNode.hasAttribute&&!domNode.__hasAttribute){domNode.__hasAttribute=domNode.hasAttribute;domNode.hasAttribute=x3dom.hasElementAttribute;}} +var ctx={doc:this.doc,xmlNode:domNode,nameSpace:this};n=new nodeType(ctx);if(domNode.hasAttribute('DEF')){n._DEF=domNode.getAttribute('DEF');this.defMap[n._DEF]=n;} +else{if(domNode.hasAttribute('id')){n._DEF=domNode.getAttribute('id');this.defMap[n._DEF]=n;}} +if(domNode.highlight===undefined) +{domNode.highlight=function(enable,colorStr){var color=x3dom.fields.SFColor.parse(colorStr);this._x3domNode.highlight(enable,color);this._x3domNode._nameSpace.doc.needRender=true;};} +n._xmlNode=domNode;domNode._x3domNode=n;var that=this;Array.forEach(domNode.childNodes,function(childDomNode){var c=that.setupTree(childDomNode);if(c){n.addChild(c,childDomNode.getAttribute("containerField"));}});n.nodeChanged();return n;}}} +else if(domNode.localName){x3dom.debug.logWarning("Unrecognised X3D element <"+domNode.localName+">.");n=null;} +return n;};x3dom.registerNodeType("X3DNode","Core",defineClass(null,function(ctx){this._xmlNode=null;this._DEF=null;this._nameSpace=(ctx&&ctx.nameSpace)?ctx.nameSpace:null;this._vf={};this._vfFieldTypes={};this._cf={};this._cfFieldTypes={};this._fieldWatchers={};this._routes={};this._listeners={};this._parentNodes=[];this._childNodes=[];this.addField_SFNode('metadata',x3dom.nodeTypes.X3DMetadataObject);},{type:function(){return this.constructor;},typeName:function(){return this.constructor._typeName;},addChild:function(node,containerFieldName){if(node){var field=null;if(containerFieldName){field=this._cf[containerFieldName];} +else{for(var fieldName in this._cf){if(this._cf.hasOwnProperty(fieldName)){var testField=this._cf[fieldName];if(x3dom.isa(node,testField.type)){field=testField;break;}}}} +if(field&&field.addLink(node)){node._parentNodes.push(this);this._childNodes.push(node);node.parentAdded(this);return true;}} +return false;},removeChild:function(node){if(node){for(var fieldName in this._cf){if(this._cf.hasOwnProperty(fieldName)){var field=this._cf[fieldName];if(field.rmLink(node)){for(var i=node._parentNodes.length-1;i>=0;i--){if(node._parentNodes[i]===this){node._parentNodes.splice(i,1);node.parentRemoved(this);}} +for(var j=this._childNodes.length-1;j>=0;j--){if(this._childNodes[j]===node){this._childNodes.splice(j,1);return true;}}}}}} +return false;},parentAdded:function(parent){},parentRemoved:function(parent){for(var i=0,n=this._childNodes.length;i<n;i++){if(this._childNodes[i]){this._childNodes[i].parentRemoved(this);}}},getCurrentTransform:function(){if(this._parentNodes.length>=1){return this.transformMatrix(this._parentNodes[0].getCurrentTransform());} +else{return x3dom.fields.SFMatrix4f.identity();}},transformMatrix:function(transform){return transform;},getVolume:function(){return null;},invalidateVolume:function(){},invalidateCache:function(){},volumeValid:function(){return false;},collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask){},highlight:function(enable,color) +{if(this._vf.hasOwnProperty("diffuseColor")) +{if(enable){if(this._actDiffuseColor===undefined){this._actDiffuseColor=new x3dom.fields.SFColor();this._highlightOn=false;} +if(!this._highlightOn){this._actDiffuseColor.setValues(this._vf.diffuseColor);this._highlightOn=true;} +this._vf.diffuseColor.setValues(color);} +else{if(this._actDiffuseColor!==undefined){this._vf.diffuseColor.setValues(this._actDiffuseColor);this._highlightOn=false;delete this._actDiffuseColor;}}} +for(var i=0,n=this._childNodes.length;i<n;i++) +{if(this._childNodes[i]) +this._childNodes[i].highlight(enable,color);}},findX3DDoc:function(){return this._nameSpace.doc;},doIntersect:function(line){var isect=false;for(var i=0;i<this._childNodes.length;i++){if(this._childNodes[i]){isect=this._childNodes[i].doIntersect(line)||isect;}} +return isect;},postMessage:function(field,msg){this._vf[field]=msg;var listeners=this._fieldWatchers[field];var that=this;if(listeners){Array.forEach(listeners,function(l){l.call(that,msg);});} +var eventObject={target:that._xmlNode,type:"onoutputchange",fieldName:field,value:msg};this.callEvtHandler(eventObject.type,eventObject);},updateField:function(field,msg){var f=this._vf[field];if(f===undefined){for(var key in this._vf){if(key.toLowerCase()==field){field=key;f=this._vf[field];break;}} +var pre="set_";if(f===undefined&&field.indexOf(pre)==0){var fieldName=field.substr(pre.length,field.length-1);if(this._vf[fieldName]!==undefined){field=fieldName;f=this._vf[field];}} +if(f===undefined){f=null;this._vf[field]=f;}} +if(f!==null){try{this._vf[field].setValueByStr(msg);} +catch(exc1){try{switch((typeof(this._vf[field])).toString()){case"number":if(typeof(msg)=="number") +this._vf[field]=msg;else +this._vf[field]=+msg;break;case"boolean":if(typeof(msg)=="boolean") +this._vf[field]=msg;else +this._vf[field]=(msg.toLowerCase()=="true");break;case"string":this._vf[field]=msg;break;}} +catch(exc2){x3dom.debug.logError("updateField: setValueByStr() NYI for "+typeof(f));}} +this.fieldChanged(field);}},setupRoute:function(fromField,toNode,toField){var pos;var fieldName;var pre="set_",post="_changed";if(!this._vf[fromField]){pos=fromField.indexOf(pre);if(pos===0){fieldName=fromField.substr(pre.length,fromField.length-1);if(this._vf[fieldName]){fromField=fieldName;}}else{pos=fromField.indexOf(post);if(pos>0){fieldName=fromField.substr(0,fromField.length-post.length);if(this._vf[fieldName]){fromField=fieldName;}}}} +if(!toNode._vf[toField]){pos=toField.indexOf(pre);if(pos===0){fieldName=toField.substr(pre.length,toField.length-1);if(toNode._vf[fieldName]){toField=fieldName;}} +else{pos=toField.indexOf(post);if(pos>0){fieldName=toField.substr(0,toField.length-post.length);if(toNode._vf[fieldName]){toField=fieldName;}}}} +var where=this._DEF+"&"+fromField+"&"+toNode._DEF+"&"+toField;if(!this._routes[where]){if(!this._fieldWatchers[fromField]){this._fieldWatchers[fromField]=[];} +this._fieldWatchers[fromField].push(function(msg){toNode.postMessage(toField,msg);});if(!toNode._fieldWatchers[toField]){toNode._fieldWatchers[toField]=[];} +toNode._fieldWatchers[toField].push(function(msg){toNode._vf[toField]=msg;toNode.fieldChanged(toField);});this._routes[where]={from:this._fieldWatchers[fromField].length-1,to:toNode._fieldWatchers[toField].length-1};}},removeRoute:function(fromField,toNode,toField){var pos;var fieldName;var pre="set_",post="_changed";if(!this._vf[fromField]){pos=fromField.indexOf(pre);if(pos===0){fieldName=fromField.substr(pre.length,fromField.length-1);if(this._vf[fieldName]){fromField=fieldName;}}else{pos=fromField.indexOf(post);if(pos>0){fieldName=fromField.substr(0,fromField.length-post.length);if(this._vf[fieldName]){fromField=fieldName;}}}} +if(!toNode._vf[toField]){pos=toField.indexOf(pre);if(pos===0){fieldName=toField.substr(pre.length,toField.length-1);if(toNode._vf[fieldName]){toField=fieldName;}} +else{pos=toField.indexOf(post);if(pos>0){fieldName=toField.substr(0,toField.length-post.length);if(toNode._vf[fieldName]){toField=fieldName;}}}} +var where=this._DEF+"&"+fromField+"&"+toNode._DEF+"&"+toField;if(this._routes[where]){this._fieldWatchers[fromField].splice(this._routes[where].from,1);toNode._fieldWatchers[toField].splice(this._routes[where].to,1);delete this._routes[where];}},fieldChanged:function(fieldName){},nodeChanged:function(){},callEvtHandler:function(eventType,event){var node=this;if(!node._xmlNode){return event.cancelBubble;} +try{var attrib=node._xmlNode[eventType];event.target=node._xmlNode;if(typeof(attrib)==="function"){attrib.call(node._xmlNode,event);} +else{var funcStr=node._xmlNode.getAttribute(eventType);var func=new Function('event',funcStr);func.call(node._xmlNode,event);} +var list=node._listeners[event.type];if(list){for(var it=0;it<list.length;it++){list[it].call(node._xmlNode,event);}}} +catch(ex){x3dom.debug.logException(ex);} +return event.cancelBubble;},initSetter:function(xmlNode,name){if(!xmlNode||!name) +return;var nameLC=name.toLowerCase();if(xmlNode.__defineSetter__&&xmlNode.__defineGetter__){xmlNode.__defineSetter__(name,function(value){xmlNode.setAttribute(name,value);});xmlNode.__defineGetter__(name,function(){return xmlNode.getAttribute(name);});if(nameLC!=name){xmlNode.__defineSetter__(nameLC,function(value){xmlNode.setAttribute(name,value);});xmlNode.__defineGetter__(nameLC,function(){return xmlNode.getAttribute(name);});}} +else{Object.defineProperty(xmlNode,name,{set:function(value){xmlNode.setAttribute(name,value);},get:function(){return xmlNode.getAttribute(name);},configurable:true,enumerable:true});} +if(this._vf[name]&&!xmlNode.attributes[name]&&!xmlNode.attributes[name.toLowerCase()]){var str="";try{if(this._vf[name].toGL) +str=this._vf[name].toGL().toString();else +str=this._vf[name].toString();} +catch(e){str=this._vf[name].toString();} +if(!str){str="";} +xmlNode.setAttribute(name,str);}},addField_SFInt32:function(ctx,name,n){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?parseInt(ctx.xmlNode.getAttribute(name),10):n;if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFInt32";},addField_SFFloat:function(ctx,name,n){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?+ctx.xmlNode.getAttribute(name):n;if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFFloat";},addField_SFDouble:function(ctx,name,n){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?+ctx.xmlNode.getAttribute(name):n;if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFDouble";},addField_SFTime:function(ctx,name,n){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?+ctx.xmlNode.getAttribute(name):n;if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFTime";},addField_SFBool:function(ctx,name,n){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?ctx.xmlNode.getAttribute(name).toLowerCase()==="true":n;if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFBool";},addField_SFString:function(ctx,name,n){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?ctx.xmlNode.getAttribute(name):n;if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFString";},addField_SFColor:function(ctx,name,r,g,b){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.SFColor.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.SFColor(r,g,b);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFColor";},addField_SFColorRGBA:function(ctx,name,r,g,b,a){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.SFColorRGBA.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.SFColorRGBA(r,g,b,a);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFColorRGBA";},addField_SFVec2f:function(ctx,name,x,y){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.SFVec2f.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.SFVec2f(x,y);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFVec2f";},addField_SFVec3f:function(ctx,name,x,y,z){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.SFVec3f.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.SFVec3f(x,y,z);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFVec3f";},addField_SFVec3d:function(ctx,name,x,y,z){this.addField_SFVec3f(ctx,name,x,y,z);this._vfFieldTypes[name]="SFVec3d";},addField_SFRotation:function(ctx,name,x,y,z,a){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.Quaternion.parseAxisAngle(ctx.xmlNode.getAttribute(name)):x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(x,y,z),a);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFRotation";},addField_SFMatrix4f:function(ctx,name,_00,_01,_02,_03,_10,_11,_12,_13,_20,_21,_22,_23,_30,_31,_32,_33){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.SFMatrix4f.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.SFMatrix4f(_00,_01,_02,_03,_10,_11,_12,_13,_20,_21,_22,_23,_30,_31,_32,_33);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFMatrix4f";},addField_SFImage:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.SFImage.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.SFImage(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="SFImage";},addField_MFString:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFString.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFString(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFString";},addField_MFBoolean:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFBoolean.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFBoolean(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFBoolean";},addField_MFInt32:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFInt32.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFInt32(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFInt32";},addField_MFFloat:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFFloat.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFFloat(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFFloat";},addField_MFDouble:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFFloat.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFFloat(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFDouble";},addField_MFColor:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFColor.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFColor(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFColor";},addField_MFColorRGBA:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFColorRGBA.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFColorRGBA(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFColorRGBA";},addField_MFVec2f:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFVec2f.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFVec2f(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFVec2f";},addField_MFVec3f:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFVec3f.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFVec3f(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFVec3f";},addField_MFVec3d:function(ctx,name,def){this.addField_MFVec3f(ctx,name,def);this._vfFieldTypes[name]="MFVec3d";},addField_MFRotation:function(ctx,name,def){this._vf[name]=ctx&&ctx.xmlNode&&ctx.xmlNode.hasAttribute(name)?x3dom.fields.MFRotation.parse(ctx.xmlNode.getAttribute(name)):new x3dom.fields.MFRotation(def);if(ctx&&ctx.xmlNode){this.initSetter(ctx.xmlNode,name);} +this._vfFieldTypes[name]="MFRotation";},addField_SFNode:function(name,type){this._cf[name]=new x3dom.fields.SFNode(type);this._cfFieldTypes[name]="SFNode";},addField_MFNode:function(name,type){this._cf[name]=new x3dom.fields.MFNode(type);this._cfFieldTypes[name]="MFNode";}}));x3dom.registerNodeType("X3DMetadataObject","Core",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.X3DMetadataObject.superClass.call(this,ctx);this.addField_SFString(ctx,'name',"");this.addField_SFString(ctx,'reference',"");}));x3dom.registerNodeType("MetadataBoolean","Core",defineClass(x3dom.nodeTypes.X3DMetadataObject,function(ctx){x3dom.nodeTypes.MetadataBoolean.superClass.call(this,ctx);this.addField_MFBoolean(ctx,'value',[]);}));x3dom.registerNodeType("MetadataDouble","Core",defineClass(x3dom.nodeTypes.X3DMetadataObject,function(ctx){x3dom.nodeTypes.MetadataDouble.superClass.call(this,ctx);this.addField_MFDouble(ctx,'value',[]);}));x3dom.registerNodeType("MetadataFloat","Core",defineClass(x3dom.nodeTypes.X3DMetadataObject,function(ctx){x3dom.nodeTypes.MetadataFloat.superClass.call(this,ctx);this.addField_MFFloat(ctx,'value',[]);}));x3dom.registerNodeType("MetadataInteger","Core",defineClass(x3dom.nodeTypes.X3DMetadataObject,function(ctx){x3dom.nodeTypes.MetadataInteger.superClass.call(this,ctx);this.addField_MFInt32(ctx,'value',[]);}));x3dom.registerNodeType("MetadataSet","Core",defineClass(x3dom.nodeTypes.X3DMetadataObject,function(ctx){x3dom.nodeTypes.MetadataSet.superClass.call(this,ctx);this.addField_MFNode('value',x3dom.nodeTypes.X3DMetadataObject);}));x3dom.registerNodeType("MetadataString","Core",defineClass(x3dom.nodeTypes.X3DMetadataObject,function(ctx){x3dom.nodeTypes.MetadataString.superClass.call(this,ctx);this.addField_MFString(ctx,'value',[]);}));x3dom.registerNodeType("Field","Core",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.Field.superClass.call(this,ctx);this.addField_SFString(ctx,'name',"");this.addField_SFString(ctx,'type',"");this.addField_SFString(ctx,'value',"");},{fieldChanged:function(fieldName){var that=this;if(fieldName==='value'){Array.forEach(this._parentNodes,function(node){node.fieldChanged(that._vf.name);});}}}));x3dom.registerNodeType("X3DChildNode","Core",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.X3DChildNode.superClass.call(this,ctx);}));x3dom.registerNodeType("X3DBindableNode","Core",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DBindableNode.superClass.call(this,ctx);this.addField_SFBool(ctx,'bind',false);this.addField_SFString(ctx,'description',"");this.addField_SFBool(ctx,'isActive',false);this._autoGen=(ctx&&ctx.autoGen?true:false);if(this._autoGen) +this._vf.description="default"+this.constructor.superClass._typeName;this._stack=null;},{bind:function(value){if(this._stack){if(value){this._stack.push(this);} +else{this._stack.pop(this);}} +else{x3dom.debug.logError('No BindStack in '+this.typeName()+'Bindable');}},activate:function(prev){this.postMessage('isActive',true);x3dom.debug.logInfo('activate '+this.typeName()+'Bindable '+ +this._DEF+'/'+this._vf.description);},deactivate:function(prev){this.postMessage('isActive',false);x3dom.debug.logInfo('deactivate '+this.typeName()+'Bindable '+ +this._DEF+'/'+this._vf.description);},fieldChanged:function(fieldName){if(fieldName.indexOf("bind")>=0){this.bind(this._vf.bind);}},nodeChanged:function(){this._stack=this._nameSpace.doc._bindableBag.addBindable(this);}}));x3dom.registerNodeType("X3DInfoNode","Core",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DInfoNode.superClass.call(this,ctx);}));x3dom.registerNodeType("WorldInfo","Core",defineClass(x3dom.nodeTypes.X3DInfoNode,function(ctx){x3dom.nodeTypes.WorldInfo.superClass.call(this,ctx);this.addField_MFString(ctx,'info',[]);this.addField_SFString(ctx,'title',"");x3dom.debug.logInfo(this._vf.info);x3dom.debug.logInfo(this._vf.title);}));x3dom.registerNodeType("X3DSensorNode","Core",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DSensorNode.superClass.call(this,ctx);this.addField_SFBool(ctx,'enabled',true);}));x3dom.registerNodeType("Param","Core",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.Param.superClass.call(this,ctx);x3dom.debug.logWarning('DEPRECATED: Param element needs to be child of X3D element ' ++'[<a href="http://x3dom.org/docs/latest/configuration.html">DOCS</a>]');}));x3dom.registerNodeType("X3DBoundedObject","Grouping",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DBoundedObject.superClass.call(this,ctx);this.addField_SFBool(ctx,'render',true);this.addField_SFVec3f(ctx,'bboxCenter',0,0,0);this.addField_SFVec3f(ctx,'bboxSize',-1,-1,-1);this._graph={boundedNode:this,localMatrix:x3dom.fields.SFMatrix4f.identity(),globalMatrix:null,volume:new x3dom.fields.BoxVolume(),worldVolume:new x3dom.fields.BoxVolume(),center:new x3dom.fields.SFVec3f(0,0,0),coverage:-1,needCulling:true};},{fieldChanged:function(fieldName){if(this._vf.hasOwnProperty(fieldName)){this.invalidateVolume();}},nodeChanged:function(){this.invalidateVolume();},parentAdded:function(parent){this.invalidateVolume();},getVolume:function() +{var vol=this._graph.volume;if(!this.volumeValid()&&this._vf.render) +{for(var i=0,n=this._childNodes.length;i<n;i++) +{var child=this._childNodes[i];if(!child||child._vf.render!==true) +continue;var childVol=child.getVolume();if(childVol&&childVol.isValid()) +vol.extendBounds(childVol.min,childVol.max);}} +return vol;},invalidateVolume:function() +{var graph=this._graph;graph.volume.invalidate();graph.worldVolume.invalidate();graph.globalMatrix=null;for(var i=0,n=this._parentNodes.length;i<n;i++){var node=this._parentNodes[i];if(node&&node.volumeValid()) +node.invalidateVolume();}},invalidateCache:function() +{var graph=this._graph;graph.worldVolume.invalidate();graph.globalMatrix=null;},cacheInvalid:function() +{return(this._graph.globalMatrix==null||!this._graph.worldVolume.isValid());},volumeValid:function() +{return this._graph.volume.isValid();},graphState:function() +{return this._graph;},forceUpdateCoverage:function() +{return false;}}));x3dom.registerNodeType("X3DGroupingNode","Grouping",defineClass(x3dom.nodeTypes.X3DBoundedObject,function(ctx){x3dom.nodeTypes.X3DGroupingNode.superClass.call(this,ctx);this.addField_MFNode('children',x3dom.nodeTypes.X3DChildNode);},{collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();planeMask=drawableCollection.cull(transform,this.graphState(),singlePath,planeMask);if(planeMask<=0){return;} +var cnode,childTransform;if(singlePath){if(!this._graph.globalMatrix){this._graph.globalMatrix=this.transformMatrix(transform);} +childTransform=this._graph.globalMatrix;} +else{childTransform=this.transformMatrix(transform);} +for(var i=0,n=this._childNodes.length;i<n;i++){if((cnode=this._childNodes[i])){cnode.collectDrawableObjects(childTransform,drawableCollection,singlePath,invalidateCache,planeMask);}}}}));x3dom.registerNodeType("Switch","Grouping",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Switch.superClass.call(this,ctx);this.addField_SFInt32(ctx,'whichChoice',-1);},{fieldChanged:function(fieldName){if(fieldName=="whichChoice"){this.invalidateVolume();}},getVolume:function() +{var vol=this._graph.volume;if(!this.volumeValid()&&this._vf.render) +{if(this._vf.whichChoice>=0&&this._vf.whichChoice<this._childNodes.length) +{var child=this._childNodes[this._vf.whichChoice];var childVol=(child&&child._vf.render===true)?child.getVolume():null;if(childVol&&childVol.isValid()) +vol.extendBounds(childVol.min,childVol.max);}} +return vol;},collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();if(this._vf.whichChoice<0||this._vf.whichChoice>=this._childNodes.length||(planeMask=drawableCollection.cull(transform,this.graphState(),singlePath,planeMask))<=0){return;} +var cnode,childTransform;if(singlePath){if(!this._graph.globalMatrix){this._graph.globalMatrix=this.transformMatrix(transform);} +childTransform=this._graph.globalMatrix;} +else{childTransform=this.transformMatrix(transform);} +if((cnode=this._childNodes[this._vf.whichChoice])){cnode.collectDrawableObjects(childTransform,drawableCollection,singlePath,invalidateCache,planeMask);}},doIntersect:function(line) +{if(this._vf.whichChoice<0||this._vf.whichChoice>=this._childNodes.length){return false;} +var child=this._childNodes[this._vf.whichChoice];if(child){return child.doIntersect(line);} +return false;}}));x3dom.registerNodeType("X3DTransformNode","Grouping",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.X3DTransformNode.superClass.call(this,ctx);if(ctx) +ctx.doc._nodeBag.trans.push(this);else +x3dom.debug.logWarning("X3DTransformNode: No runtime context found!");this._trafo=null;this._needCssStyleUpdates=true;},{tick:function(t) +{var dom=this._xmlNode;if(dom&&(dom['ontransform']||dom.hasAttribute('ontransform')||this._listeners['transform'])){var transMatrix=this.getCurrentTransform();var event={target:dom,type:'transform',worldX:transMatrix._03,worldY:transMatrix._13,worldZ:transMatrix._23,cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;}};this.callEvtHandler("ontransform",event);} +if(this._needCssStyleUpdates&&dom){var trans=x3dom.getStyle(dom,"-webkit-transform")||x3dom.getStyle(dom,"-moz-transform")||x3dom.getStyle(dom,"-ms-transform")||x3dom.getStyle(dom,"transform");if(trans&&(trans!='none')){this._trafo.setValueByStr(trans);this.invalidateVolume();return true;} +this._needCssStyleUpdates=false;} +return false;},transformMatrix:function(transform){return transform.mult(this._trafo);},getVolume:function() +{var vol=this._graph.volume;if(!this.volumeValid()&&this._vf.render) +{this._graph.localMatrix=this._trafo;for(var i=0,n=this._childNodes.length;i<n;i++) +{var child=this._childNodes[i];if(!child||child._vf.render!==true) +continue;var childVol=child.getVolume();if(childVol&&childVol.isValid()) +vol.extendBounds(childVol.min,childVol.max);} +if(vol.isValid()) +vol.transform(this._trafo);} +return vol;},doIntersect:function(line) +{var isect=false;var mat=this._trafo.inverse();var tmpPos=new x3dom.fields.SFVec3f(line.pos.x,line.pos.y,line.pos.z);var tmpDir=new x3dom.fields.SFVec3f(line.dir.x,line.dir.y,line.dir.z);line.pos=mat.multMatrixPnt(line.pos);line.dir=mat.multMatrixVec(line.dir);if(line.hitObject){line.dist*=line.dir.length();} +for(var i=0;i<this._childNodes.length;i++) +{if(this._childNodes[i]){isect=this._childNodes[i].doIntersect(line)||isect;}} +line.pos.setValues(tmpPos);line.dir.setValues(tmpDir);if(isect){line.hitPoint=this._trafo.multMatrixPnt(line.hitPoint);line.dist*=line.dir.length();} +return isect;},parentRemoved:function(parent) +{var i,n;if(this._parentNodes.length==0){var doc=this.findX3DDoc();for(i=0,n=doc._nodeBag.trans.length;i<n;i++){if(doc._nodeBag.trans[i]===this){doc._nodeBag.trans.splice(i,1);}}} +for(i=0,n=this._childNodes.length;i<n;i++){if(this._childNodes[i]){this._childNodes[i].parentRemoved(this);}}}}));x3dom.registerNodeType("Transform","Grouping",defineClass(x3dom.nodeTypes.X3DTransformNode,function(ctx){x3dom.nodeTypes.Transform.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'center',0,0,0);this.addField_SFVec3f(ctx,'translation',0,0,0);this.addField_SFRotation(ctx,'rotation',0,0,1,0);this.addField_SFVec3f(ctx,'scale',1,1,1);this.addField_SFRotation(ctx,'scaleOrientation',0,0,1,0);this._trafo=x3dom.fields.SFMatrix4f.translation(this._vf.translation.add(this._vf.center)).mult(this._vf.rotation.toMatrix()).mult(this._vf.scaleOrientation.toMatrix()).mult(x3dom.fields.SFMatrix4f.scale(this._vf.scale)).mult(this._vf.scaleOrientation.toMatrix().inverse()).mult(x3dom.fields.SFMatrix4f.translation(this._vf.center.negate()));},{fieldChanged:function(fieldName) +{if(fieldName=="center"||fieldName=="translation"||fieldName=="rotation"||fieldName=="scale"||fieldName=="scaleOrientation") +{this._trafo=x3dom.fields.SFMatrix4f.translation(this._vf.translation.add(this._vf.center)).mult(this._vf.rotation.toMatrix()).mult(this._vf.scaleOrientation.toMatrix()).mult(x3dom.fields.SFMatrix4f.scale(this._vf.scale)).mult(this._vf.scaleOrientation.toMatrix().inverse()).mult(x3dom.fields.SFMatrix4f.translation(this._vf.center.negate()));this.invalidateVolume();} +else if(fieldName=="render"){this.invalidateVolume();}}}));x3dom.registerNodeType("MatrixTransform","Grouping",defineClass(x3dom.nodeTypes.X3DTransformNode,function(ctx){x3dom.nodeTypes.MatrixTransform.superClass.call(this,ctx);this.addField_SFMatrix4f(ctx,'matrix',1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);this._trafo=this._vf.matrix.transpose();},{fieldChanged:function(fieldName){if(fieldName=="matrix"){this._trafo=this._vf.matrix.transpose();this.invalidateVolume();} +else if(fieldName=="render"){this.invalidateVolume();}}}));x3dom.registerNodeType("Group","Grouping",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Group.superClass.call(this,ctx);}));x3dom.registerNodeType("Block","Grouping",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Block.superClass.call(this,ctx);this.addField_MFString(ctx,'nameSpaceName',[]);}));x3dom.registerNodeType("StaticGroup","Grouping",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.StaticGroup.superClass.call(this,ctx);this.addField_SFBool(ctx,'debug',false);this.addField_SFBool(ctx,'showDebugBoxVolumes',false);this.addField_SFString(ctx,'bvhType','jsBIH');this.addField_SFInt32(ctx,'maxObjectsPerNode',1);this.addField_SFInt32(ctx,'maxDepth',-1);this.addField_SFFloat(ctx,'minRelativeBBoxSize',0.01);this.needBvhRebuild=true;this.drawableCollection=null;this.bvh=null;},{getMaxDepth:function() +{if(this._vf.maxDepth==-1) +{return(this._vf.bvhType==('jsBIH'||'BIH'))?50:4;} +return this._vf.maxDepth;},collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();planeMask=drawableCollection.cull(transform,this.graphState(),singlePath,planeMask);if(planeMask<=0){return;} +var cnode,childTransform;if(singlePath){if(!this._graph.globalMatrix){this._graph.globalMatrix=this.transformMatrix(transform);} +childTransform=this._graph.globalMatrix;} +else{childTransform=this.transformMatrix(transform);} +if(this.needBvhRebuild) +{var drawableCollectionConfig={viewArea:drawableCollection.viewarea,sortTrans:drawableCollection.sortTrans,viewMatrix:drawableCollection.viewMatrix,projMatrix:drawableCollection.projMatrix,sceneMatrix:drawableCollection.sceneMatrix,frustumCulling:false,smallFeatureThreshold:0,context:drawableCollection.context};this.drawableCollection=new x3dom.DrawableCollection(drawableCollectionConfig);var i,n=this._childNodes.length;for(i=0;i<n;i++){if((cnode=this._childNodes[i])){cnode.collectDrawableObjects(childTransform,this.drawableCollection,singlePath,invalidateCache,planeMask);}} +this.drawableCollection.concat();var scene=this._nameSpace.doc._scene;var bvhSettings=new x3dom.bvh.Settings(this._vf.debug,this._vf.showDebugBoxVolumes,this._vf.bvhType,this._vf.maxObjectsPerNode,this.getMaxDepth(),this._vf.minRelativeBBoxSize);this.bvh=(this._vf.bvhType=='jsBIH')?new x3dom.bvh.BIH(scene,bvhSettings):new x3dom.bvh.Culler(this.drawableCollection,scene,bvhSettings);if(this._vf.debug||this._vf.showDebugBoxVolumes) +this.bvh=new x3dom.bvh.DebugDecorator(this.bvh,scene,bvhSettings);n=this.drawableCollection.length;for(i=0;i<n;i++) +{this.bvh.addDrawable(this.drawableCollection.get(i))} +this.bvh.compile();if(this._vf.debug) +this.bvh.showCompileStats();this.needBvhRebuild=false;} +x3dom.Utils.startMeasure('bvhTraverse');this.bvh.collectDrawables(drawableCollection);var dt=x3dom.Utils.stopMeasure('bvhTraverse');this._nameSpace.doc.ctx.x3dElem.runtime.addMeasurement('BVH',dt);this.bvh.showTraverseStats(this._nameSpace.doc.ctx.x3dElem.runtime);}}));x3dom.registerNodeType("RemoteSelectionGroup","Grouping",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.RemoteSelectionGroup.superClass.call(this,ctx);this.addField_MFString(ctx,'url',["ws://localhost:35668/cstreams/0"]);this.addField_MFString(ctx,'label',[]);this.addField_SFInt32(ctx,'maxRenderedIds',-1);this.addField_SFBool(ctx,'reconnect',true);this.addField_SFFloat(ctx,'scaleRenderedIdsOnMove',1.0);this.addField_SFBool(ctx,'enableCulling',true);this.addField_MFString(ctx,'invisibleNodes',[]);this._idList=[];this._websocket=null;this._nameObjMap={};this._createTime=[];this._visibleList=[];if(ctx) +this.initializeSocket();else +x3dom.debug.logWarning("RemoteSelectionGroup: No runtime context found!");},{initializeSocket:function() +{var that=this;if("WebSocket"in window) +{var wsUrl="ws://localhost:35668/cstreams/0";if(this._vf.url.length&&this._vf.url[0].length) +wsUrl=this._vf.url[0];this._websocket=new WebSocket(wsUrl);this._websocket._lastMsg=null;this._websocket._lastData="";this._websocket.onopen=function(evt) +{x3dom.debug.logInfo("WS Connected");var view=that._nameSpace.doc._viewarea.getViewMatrix();this._lastMsg=view.toGL().toString();view=that._nameSpace.doc._viewarea.getProjectionMatrix();this._lastMsg+=(","+view.toGL().toString());this.send(this._lastMsg);x3dom.debug.logInfo("WS Sent: "+this._lastMsg);this._lastMsg="";this._lastData="";};this._websocket.onclose=function(evt) +{x3dom.debug.logInfo("WS Disconnected");if(that._vf.reconnect) +{window.setTimeout(function(){that.initializeSocket();},2000);}};this._websocket.onmessage=function(evt) +{if(that._vf.maxRenderedIds<0) +{that._idList=x3dom.fields.MFString.parse(evt.data);} +else if(that._vf.maxRenderedIds>0) +{that._idList=[];var arr=x3dom.fields.MFString.parse(evt.data);var n=Math.min(arr.length,Math.abs(that._vf.maxRenderedIds));for(var i=0;i<n;++i){that._idList[i]=arr[i];}} +if(that._vf.maxRenderedIds!=0&&this._lastData!=evt.data) +{this._lastData=evt.data;that._nameSpace.doc.needRender=true;that.invalidateVolume();}};this._websocket.onerror=function(evt) +{x3dom.debug.logError(evt.data);};this._websocket.updateCamera=function() +{var view=that._nameSpace.doc._viewarea.getViewMatrix();var message=view.toGL().toString();view=that._nameSpace.doc._viewarea.getProjectionMatrix();message+=(","+view.toGL().toString());if(this._lastMsg!=null&&this._lastMsg!=message) +{this._lastMsg=message;this.send(message);}};} +else +{x3dom.debug.logError("Browser has no WebSocket support!");}},nodeChanged:function() +{var n=this._vf.label.length;this._nameObjMap={};this._createTime=new Array(n);this._visibleList=new Array(n);for(var i=0;i<n;++i) +{var shape=this._childNodes[i];if(shape&&x3dom.isa(shape,x3dom.nodeTypes.X3DShapeNode)) +{this._nameObjMap[this._vf.label[i]]={shape:shape,pos:i};this._visibleList[i]=true;} +else{this._visibleList[i]=false;x3dom.debug.logError("Invalid children: "+this._vf.label[i]);} +this._createTime[i]=0;} +this.invalidateVolume();x3dom.debug.logInfo("RemoteSelectionGroup has "+n+" entries.");},fieldChanged:function(fieldName) +{if(fieldName=="url") +{if(this._websocket){this._websocket.close();this._websocket=null;} +this.initializeSocket();} +else if(fieldName=="invisibleNodes") +{for(var i=0,n=this._vf.label.length;i<n;++i) +{var shape=this._childNodes[i];if(shape&&x3dom.isa(shape,x3dom.nodeTypes.X3DShapeNode)) +{this._visibleList[i]=true;for(var j=0,numInvis=this._vf.invisibleNodes.length;j<numInvis;++j) +{var nodeName=this._vf.invisibleNodes[j];var starInd=nodeName.lastIndexOf('*');var matchNameBegin=false;if(starInd>0){nodeName=nodeName.substring(0,starInd);matchNameBegin=true;} +if(nodeName.length<=1) +continue;if((matchNameBegin&&this._vf.label[i].indexOf(nodeName)==0)||this._vf.label[i]==nodeName){this._visibleList[i]=false;break;}}} +else{this._visibleList[i]=false;}} +this.invalidateVolume();} +else if(fieldName=="render"){this.invalidateVolume();}},getNumRenderedObjects:function(len,isMoving) +{var n=len;if(this._vf.maxRenderedIds>0) +{var num=Math.max(this._vf.maxRenderedIds,16);var scale=1;if(isMoving) +scale=Math.min(this._vf.scaleRenderedIdsOnMove,1);num=Math.max(Math.round(scale*num),0);n=Math.min(n,num);} +return n;},collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();planeMask=drawableCollection.cull(transform,this.graphState(),singlePath,planeMask);if(planeMask<=0){return;} +var viewarea=this._nameSpace.doc._viewarea;var isMoving=viewarea.isMovingOrAnimating();var ts=new Date().getTime();var maxLiveTime=10000;var i,n,numChild=this._childNodes.length;if(!this._vf.enableCulling) +{n=this.getNumRenderedObjects(numChild,isMoving);var cnt=0;for(i=0;i<numChild;i++) +{var shape=this._childNodes[i];if(shape) +{var needCleanup=true;if(this._visibleList[i]&&cnt<n&&shape.collectDrawableObjects(transform,drawableCollection,singlePath,invalidateCache,planeMask)) +{this._createTime[i]=ts;cnt++;needCleanup=false;} +if(needCleanup&&!isMoving&&this._createTime[i]>0&&ts-this._createTime[i]>maxLiveTime&&shape._cleanupGLObjects) +{shape._cleanupGLObjects(true);this._createTime[i]=0;}}} +return;} +if(this._websocket) +this._websocket.updateCamera();if(this._vf.label.length) +{n=this.getNumRenderedObjects(this._idList.length,isMoving);for(i=0;i<n;i++) +{var obj=this._nameObjMap[this._idList[i]];if(obj&&obj.shape){obj.shape.collectDrawableObjects(transform,drawableCollection,singlePath,invalidateCache,planeMask);this._createTime[obj.pos]=ts;} +else +x3dom.debug.logError("Invalid label: "+this._idList[i]);} +for(i=0;i<this._childNodes.length;i++) +{if(this._childNodes[i]&&!isMoving&&this._createTime[i]>0&&ts-this._createTime[i]>maxLiveTime&&this._childNodes[i]._cleanupGLObjects) +{this._childNodes[i]._cleanupGLObjects(true);this._createTime[i]=0;}}}}}));x3dom.registerNodeType("Scene","Grouping",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Scene.superClass.call(this,ctx);this.addField_SFString(ctx,'pickMode',"idBuf");this.addField_SFBool(ctx,'doPickPass',true);this.addField_SFString(ctx,'shadowObjectIdMapping',"");this._lastMin=new x3dom.fields.SFVec3f(0,0,0);this._lastMax=new x3dom.fields.SFVec3f(1,1,1);this._shadowIdMap=null;this.loadMapping();},{fieldChanged:function(fieldName) +{if(fieldName=="shadowObjectIdMapping") +this.loadMapping();},updateVolume:function() +{var vol=this.getVolume();if(vol.isValid()) +{this._lastMin=x3dom.fields.SFVec3f.copy(vol.min);this._lastMax=x3dom.fields.SFVec3f.copy(vol.max);}},loadMapping:function() +{this._shadowIdMap=null;if(this._vf.shadowObjectIdMapping.length==0){return;} +var that=this;var xhr=new XMLHttpRequest();xhr.open("GET",encodeURI(this._nameSpace.getURL(this._vf.shadowObjectIdMapping)),true);xhr.send();xhr.onload=function() +{that._shadowIdMap=eval("("+xhr.response+")");if(!that._shadowIdMap||!that._shadowIdMap.mapping){x3dom.debug.logWarning("Invalid ID map: "+that._vf.shadowObjectIdMapping);} +else{x3dom.debug.assert(that._shadowIdMap.maxID<=that._shadowIdMap.mapping.length,"Too few ID map entries in "+that._vf.shadowObjectIdMapping+", "+"length of mapping array is only "+that._shadowIdMap.mapping.length+" instead of "+that._shadowIdMap.ids.length+"!");}};}}));x3dom.BindableStack=function(doc,type,defaultType,getter){this._doc=doc;this._type=type;this._defaultType=defaultType;this._defaultRoot=null;this._getter=getter;this._bindBag=[];this._bindStack=[];};x3dom.BindableStack.prototype.top=function(){return((this._bindStack.length>0)?this._bindStack[this._bindStack.length-1]:null);};x3dom.BindableStack.prototype.push=function(bindable){var top=this.top();if(top===bindable){return;} +if(top){top.deactivate();} +this._bindStack.push(bindable);bindable.activate(top);};x3dom.BindableStack.prototype.replaceTop=function(bindable){var top=this.top();if(top===bindable){return;} +if(top){top.deactivate();this._bindStack[this._bindStack.length-1]=bindable;bindable.activate(top);}};x3dom.BindableStack.prototype.pop=function(bindable){var top;if(bindable){top=this.top();if(bindable!==top){return null;}} +top=this._bindStack.pop();if(top){top.deactivate();} +return top;};x3dom.BindableStack.prototype.switchTo=function(target){var last=this.getActive();var n=this._bindBag.length;var toBind=0;var i=0,lastIndex=-1;if(n<=1){return;} +switch(target) +{case'first':toBind=this._bindBag[0];break;case'last':toBind=this._bindBag[n-1];break;default:for(i=0;i<n;i++){if(this._bindBag[i]==last){lastIndex=i;break;}} +if(lastIndex>=0){i=lastIndex;while(!toBind){if(target=='next'){i=(i<(n-1))?(i+1):0;}else{i=(i>0)?(i-1):(n-1);} +if(i==lastIndex){break;} +if(this._bindBag[i]._vf.description.length>=0){toBind=this._bindBag[i];}}} +break;} +if(toBind){this.replaceTop(toBind);}else{x3dom.debug.logWarning('Cannot switch bindable; no other bindable with description found.');}};x3dom.BindableStack.prototype.getActive=function(){if(this._bindStack.length===0){if(this._bindBag.length===0){if(this._defaultRoot){x3dom.debug.logInfo('create new '+this._defaultType._typeName+' for '+this._type._typeName+'-stack');var obj=new this._defaultType({doc:this._doc,nameSpace:this._defaultRoot._nameSpace,autoGen:true});this._defaultRoot.addChild(obj);obj.nodeChanged();} +else{x3dom.debug.logError('stack without defaultRoot');}} +else{x3dom.debug.logInfo('activate first '+this._type._typeName+' for '+this._type._typeName+'-stack');} +this._bindStack.push(this._bindBag[0]);this._bindBag[0].activate();} +return this._bindStack[this._bindStack.length-1];};x3dom.BindableBag=function(doc){this._stacks=[];this.addType("X3DViewpointNode","Viewpoint","getViewpoint",doc);this.addType("X3DNavigationInfoNode","NavigationInfo","getNavigationInfo",doc);this.addType("X3DBackgroundNode","Background","getBackground",doc);this.addType("X3DFogNode","Fog","getFog",doc);this.addType("X3DEnvironmentNode","Environment","getEnvironment",doc);};x3dom.BindableBag.prototype.addType=function(typeName,defaultTypeName,getter,doc){var type=x3dom.nodeTypes[typeName];var defaultType=x3dom.nodeTypes[defaultTypeName];if(type&&defaultType){var stack=new x3dom.BindableStack(doc,type,defaultType,getter);this._stacks.push(stack);} +else{x3dom.debug.logWarning('Invalid Bindable type/defaultType: '+ +typeName+'/'+defaultType);}};x3dom.BindableBag.prototype.setRefNode=function(node){Array.forEach(this._stacks,function(stack){stack._defaultRoot=node;node[stack._getter]=function(){return stack.getActive();};});};x3dom.BindableBag.prototype.addBindable=function(node){for(var i=0,n=this._stacks.length;i<n;i++){var stack=this._stacks[i];if(x3dom.isa(node,stack._type)){x3dom.debug.logInfo('register '+node.typeName()+'Bindable '+ +node._DEF+'/'+node._vf.description);stack._bindBag.push(node);var top=stack.top();if(top&&top._autoGen){stack.replaceTop(node);for(var j=0,m=stack._bindBag.length;j<m;j++){if(stack._bindBag[j]===top){stack._bindBag.splice(j,1);break;}} +stack._defaultRoot.removeChild(top);} +return stack;}} +x3dom.debug.logError(node.typeName()+' is not a valid bindable');return null;};x3dom.registerNodeType("X3DGeometryNode","Rendering",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.X3DGeometryNode.superClass.call(this,ctx);this.addField_SFBool(ctx,'solid',true);this.addField_SFBool(ctx,'ccw',true);this.addField_SFBool(ctx,'useGeoCache',true);this.addField_SFBool(ctx,'lit',true);this._mesh=new x3dom.Mesh(this);},{getVolume:function(){return this._mesh.getVolume();},invalidateVolume:function(){this._mesh.invalidate();},getCenter:function(){return this._mesh.getCenter();},getDiameter:function(){return this._mesh.getDiameter();},doIntersect:function(line){return this._mesh.doIntersect(line);},forceUpdateCoverage:function(){return false;},hasIndexOffset:function(){return false;},getColorTexture:function(){return null;},getColorTextureURL:function(){return null;},parentAdded:function(parent){if(x3dom.isa(parent,x3dom.nodeTypes.X3DShapeNode)){if(parent._cleanupGLObjects){parent._cleanupGLObjects(true);} +parent.setAllDirty();parent.invalidateVolume();}},needLighting:function(){var hasTris=this._mesh._primType.indexOf("TRIANGLE")>=0;return(this._vf.lit&&hasTris);}}));x3dom.registerNodeType("Mesh","Rendering",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.Mesh.superClass.call(this,ctx);this.addField_SFString(ctx,'primType',"triangle");this.addField_MFInt32(ctx,'index',[]);this.addField_MFNode('vertexAttributes',x3dom.nodeTypes.X3DVertexAttributeNode);},{nodeChanged:function() +{var time0=new Date().getTime();var i,n=this._cf.vertexAttributes.nodes.length;for(i=0;i<n;i++) +{var name=this._cf.vertexAttributes.nodes[i]._vf.name;switch(name.toLowerCase()) +{case"position":this._mesh._positions[0]=this._cf.vertexAttributes.nodes[i]._vf.value.toGL();break;case"normal":this._mesh._normals[0]=this._cf.vertexAttributes.nodes[i]._vf.value.toGL();break;case"texcoord":this._mesh._texCoords[0]=this._cf.vertexAttributes.nodes[i]._vf.value.toGL();break;case"color":this._mesh._colors[0]=this._cf.vertexAttributes.nodes[i]._vf.value.toGL();break;default:this._mesh._dynamicFields[name]={};this._mesh._dynamicFields[name].numComponents=this._cf.vertexAttributes.nodes[i]._vf.numComponents;this._mesh._dynamicFields[name].value=this._cf.vertexAttributes.nodes[i]._vf.value.toGL();break;}} +this._mesh._indices[0]=this._vf.index.toGL();this.invalidateVolume();this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;var time1=new Date().getTime()-time0;x3dom.debug.logWarning("Mesh load time: "+time1+" ms");}}));x3dom.registerNodeType("PointSet","Rendering",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.PointSet.superClass.call(this,ctx);this.addField_SFNode('coord',x3dom.nodeTypes.X3DCoordinateNode);this.addField_SFNode('color',x3dom.nodeTypes.X3DColorNode);this._mesh._primType='POINTS';},{nodeChanged:function() +{var time0=new Date().getTime();var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);var positions=coordNode.getPoints();var numColComponents=3;var colorNode=this._cf.color.node;var colors=new x3dom.fields.MFColor();if(colorNode){colors=colorNode._vf.color;x3dom.debug.assert(positions.length==colors.length);if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +this._mesh._numColComponents=numColComponents;this._mesh._lit=false;this._mesh._indices[0]=[];this._mesh._positions[0]=positions.toGL();this._mesh._colors[0]=colors.toGL();this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];this.invalidateVolume();this._mesh._numCoords=this._mesh._positions[0].length/3;var time1=new Date().getTime()-time0;},fieldChanged:function(fieldName) +{var pnts=null;if(fieldName=="coord") +{pnts=this._cf.coord.node.getPoints();this._mesh._positions[0]=pnts.toGL();this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName=="color") +{pnts=this._cf.color.node._vf.color;this._mesh._colors[0]=pnts.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});}}}));x3dom.registerNodeType("X3DComposedGeometryNode","Rendering",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.X3DComposedGeometryNode.superClass.call(this,ctx);this.addField_SFBool(ctx,'colorPerVertex',true);this.addField_SFBool(ctx,'normalPerVertex',true);this.addField_SFString(ctx,'normalUpdateMode','fast');this.addField_MFNode('attrib',x3dom.nodeTypes.X3DVertexAttributeNode);this.addField_SFNode('coord',x3dom.nodeTypes.X3DCoordinateNode);this.addField_SFNode('normal',x3dom.nodeTypes.Normal);this.addField_SFNode('color',x3dom.nodeTypes.X3DColorNode);this.addField_SFNode('texCoord',x3dom.nodeTypes.X3DTextureCoordinateNode);},{handleAttribs:function() +{var i,n=this._cf.attrib.nodes.length;for(i=0;i<n;i++) +{var name=this._cf.attrib.nodes[i]._vf.name;switch(name.toLowerCase()) +{case"position":this._mesh._positions[0]=this._cf.attrib.nodes[i]._vf.value.toGL();break;case"normal":this._mesh._normals[0]=this._cf.attrib.nodes[i]._vf.value.toGL();break;case"texcoord":this._mesh._texCoords[0]=this._cf.attrib.nodes[i]._vf.value.toGL();break;case"color":this._mesh._colors[0]=this._cf.attrib.nodes[i]._vf.value.toGL();break;default:this._mesh._dynamicFields[name]={};this._mesh._dynamicFields[name].numComponents=this._cf.attrib.nodes[i]._vf.numComponents;this._mesh._dynamicFields[name].value=this._cf.attrib.nodes[i]._vf.value.toGL();break;}}}}));x3dom.registerNodeType("LineSet","Rendering",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.LineSet.superClass.call(this,ctx);this.addField_MFInt32(ctx,'vertexCount',[]);this.addField_MFNode('attrib',x3dom.nodeTypes.X3DVertexAttributeNode);this.addField_SFNode('coord',x3dom.nodeTypes.X3DCoordinateNode);this.addField_SFNode('color',x3dom.nodeTypes.X3DColorNode);this._mesh._primType="LINES";x3dom.Utils.needLineWidth=true;},{nodeChanged:function(){var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);var positions=coordNode.getPoints();this._mesh._positions[0]=positions.toGL();var colorNode=this._cf.color.node;if(colorNode){var colors=colorNode._vf.color;this._mesh._colors[0]=colors.toGL();var numColComponents=3;if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +var cnt=0;this._mesh._indices[0]=[];for(var i=0,n=this._vf.vertexCount.length;i<n;i++){var vc=this._vf.vertexCount[i];if(vc<2){x3dom.debug.logError("LineSet.vertexCount must not be smaller than 2!");break;} +for(var j=vc-2;j>=0;j--){this._mesh._indices[0].push(cnt++,cnt);if(j==0)cnt++;}}},fieldChanged:function(fieldName){if(fieldName=="coord"){var pnts=this._cf.coord.node.getPoints();this._mesh._positions[0]=pnts.toGL();this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName=="color"){var cols=this._cf.color.node._vf.color;this._mesh._colors[0]=cols.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});}}}));x3dom.registerNodeType("IndexedLineSet","Rendering",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.IndexedLineSet.superClass.call(this,ctx);this.addField_SFBool(ctx,'colorPerVertex',true);this.addField_MFNode('attrib',x3dom.nodeTypes.X3DVertexAttributeNode);this.addField_SFNode('coord',x3dom.nodeTypes.X3DCoordinateNode);this.addField_SFNode('color',x3dom.nodeTypes.X3DColorNode);this.addField_MFInt32(ctx,'coordIndex',[]);this.addField_MFInt32(ctx,'colorIndex',[]);this._mesh._primType='LINES';x3dom.Utils.needLineWidth=true;},{nodeChanged:function() +{var time0=new Date().getTime();var indexes=this._vf.coordIndex;var colorInd=this._vf.colorIndex;var hasColor=false,hasColorInd=false;var colPerVert=this._vf.colorPerVertex;if(colorInd.length>0) +{hasColorInd=true;} +var positions,colors;var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);positions=coordNode.getPoints();var numColComponents=3;var colorNode=this._cf.color.node;if(colorNode) +{hasColor=true;colors=colorNode._vf.color;if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +else{hasColor=false;} +this._mesh._indices[0]=[];this._mesh._positions[0]=[];this._mesh._colors[0]=[];var i,t,cnt,lineCnt;var p0,p1,c0,c1;if((hasColor&&hasColorInd)||positions.length>x3dom.Utils.maxIndexableCoords) +{t=0;cnt=0;lineCnt=0;for(i=0;i<indexes.length;++i) +{if(indexes[i]===-1){t=0;continue;} +if(hasColorInd){x3dom.debug.assert(colorInd[i]!=-1);} +switch(t) +{case 0:p0=+indexes[i];if(hasColorInd&&colPerVert){c0=+colorInd[i];} +else{c0=p0;} +t=1;break;case 1:p1=+indexes[i];if(hasColorInd&&colPerVert){c1=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c1=+colorInd[lineCnt];} +else{c1=p1;} +this._mesh._indices[0].push(cnt++,cnt++);this._mesh._positions[0].push(positions[p0].x);this._mesh._positions[0].push(positions[p0].y);this._mesh._positions[0].push(positions[p0].z);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);if(hasColor){if(!colPerVert){c0=c1;} +this._mesh._colors[0].push(colors[c0].r);this._mesh._colors[0].push(colors[c0].g);this._mesh._colors[0].push(colors[c0].b);this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);} +t=2;lineCnt++;break;case 2:p0=p1;c0=c1;p1=+indexes[i];if(hasColorInd&&colPerVert){c1=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c1=+colorInd[lineCnt];} +else{c1=p1;} +this._mesh._indices[0].push(cnt++,cnt++);this._mesh._positions[0].push(positions[p0].x);this._mesh._positions[0].push(positions[p0].y);this._mesh._positions[0].push(positions[p0].z);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);if(hasColor){if(!colPerVert){c0=c1;} +this._mesh._colors[0].push(colors[c0].r);this._mesh._colors[0].push(colors[c0].g);this._mesh._colors[0].push(colors[c0].b);this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);} +lineCnt++;break;default:}} +if(positions.length>x3dom.Utils.maxIndexableCoords) +this._mesh.splitMesh(2);} +else +{var n=indexes.length;t=0;for(i=0;i<n;++i) +{if(indexes[i]==-1){t=0;continue;} +switch(t){case 0:p0=+indexes[i];t=1;break;case 1:p1=+indexes[i];t=2;this._mesh._indices[0].push(p0,p1);break;case 2:p0=p1;p1=+indexes[i];this._mesh._indices[0].push(p0,p1);break;}} +this._mesh._positions[0]=positions.toGL();if(hasColor){this._mesh._colors[0]=colors.toGL();this._mesh._numColComponents=numColComponents;}} +this.invalidateVolume();this._mesh._numCoords=0;for(i=0;i<this._mesh._indices.length;i++){this._mesh._numCoords+=this._mesh._positions[i].length/3;} +var time1=new Date().getTime()-time0;},fieldChanged:function(fieldName) +{var pnts=null;if(fieldName=="coord") +{pnts=this._cf.coord.node._vf.point;this._mesh._positions[0]=pnts.toGL();this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName=="color") +{pnts=this._cf.color.node._vf.color;this._mesh._colors[0]=pnts.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});} +else if(fieldName=="coordIndex"){this._mesh._indices[0]=[];var indexes=this._vf.coordIndex;var p0,p1,t=0;for(var i=0,n=indexes.length;i<n;++i){if(indexes[i]==-1){t=0;} +else{switch(t){case 0:p0=+indexes[i];t=1;break;case 1:p1=+indexes[i];t=2;this._mesh._indices[0].push(p0,p1);break;case 2:p0=p1;p1=+indexes[i];this._mesh._indices[0].push(p0,p1);break;}}} +this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.indexes=true;node.invalidateVolume();});}}}));x3dom.registerNodeType("IndexedTriangleSet","Rendering",defineClass(x3dom.nodeTypes.X3DComposedGeometryNode,function(ctx){x3dom.nodeTypes.IndexedTriangleSet.superClass.call(this,ctx);this.addField_MFInt32(ctx,'index',[]);},{nodeChanged:function() +{var time0=new Date().getTime();this.handleAttribs();var colPerVert=this._vf.colorPerVertex;var normPerVert=this._vf.normalPerVertex;var indexes=this._vf.index;var hasNormal=false,hasTexCoord=false,hasColor=false;var positions,normals,texCoords,colors;var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);positions=coordNode._vf.point;var normalNode=this._cf.normal.node;if(normalNode){hasNormal=true;normals=normalNode._vf.vector;} +else{hasNormal=false;} +var texMode="",numTexComponents=2;var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +if(texCoordNode){if(texCoordNode._vf.point){hasTexCoord=true;texCoords=texCoordNode._vf.point;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.TextureCoordinate3D)){numTexComponents=3;}} +else if(texCoordNode._vf.mode){texMode=texCoordNode._vf.mode;}} +else{hasTexCoord=false;} +var numColComponents=3;var colorNode=this._cf.color.node;if(colorNode){hasColor=true;colors=colorNode._vf.color;if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +else{hasColor=false;} +this._mesh._indices[0]=[];this._mesh._positions[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];this._mesh._colors[0]=[];var i,t,cnt,faceCnt,posMax;var p0,p1,p2,n0,n1,n2,t0,t1,t2,c0,c1,c2;while(positions.length%3>0){positions.push(positions.length-1);} +posMax=positions.length;if(!normPerVert||posMax>x3dom.Utils.maxIndexableCoords) +{t=0;cnt=0;faceCnt=0;this._mesh._multiIndIndices=[];this._mesh._posSize=positions.length;for(i=0;i<indexes.length;++i) +{if((i>0)&&(i%3===0)){t=0;faceCnt++;} +switch(t) +{case 0:p0=+indexes[i];if(normPerVert){n0=p0;}else if(!normPerVert){n0=faceCnt;} +t0=p0;if(colPerVert){c0=p0;}else if(!colPerVert){c0=faceCnt;} +t=1;break;case 1:p1=+indexes[i];if(normPerVert){n1=p1;}else if(!normPerVert){n1=faceCnt;} +t1=p1;if(colPerVert){c1=p1;}else if(!colPerVert){c1=faceCnt;} +t=2;break;case 2:p2=+indexes[i];if(normPerVert){n2=p2;}else if(!normPerVert){n2=faceCnt;} +t2=p2;if(colPerVert){c2=p2;}else if(!colPerVert){c2=faceCnt;} +t=3;this._mesh._indices[0].push(cnt++,cnt++,cnt++);this._mesh._positions[0].push(positions[p0].x);this._mesh._positions[0].push(positions[p0].y);this._mesh._positions[0].push(positions[p0].z);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);this._mesh._positions[0].push(positions[p2].x);this._mesh._positions[0].push(positions[p2].y);this._mesh._positions[0].push(positions[p2].z);if(hasNormal){this._mesh._normals[0].push(normals[n0].x);this._mesh._normals[0].push(normals[n0].y);this._mesh._normals[0].push(normals[n0].z);this._mesh._normals[0].push(normals[n1].x);this._mesh._normals[0].push(normals[n1].y);this._mesh._normals[0].push(normals[n1].z);this._mesh._normals[0].push(normals[n2].x);this._mesh._normals[0].push(normals[n2].y);this._mesh._normals[0].push(normals[n2].z);} +else{this._mesh._multiIndIndices.push(p0,p1,p2);} +if(hasColor){this._mesh._colors[0].push(colors[c0].r);this._mesh._colors[0].push(colors[c0].g);this._mesh._colors[0].push(colors[c0].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c0].a);} +this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c1].a);} +this._mesh._colors[0].push(colors[c2].r);this._mesh._colors[0].push(colors[c2].g);this._mesh._colors[0].push(colors[c2].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c2].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(texCoords[t0].x);this._mesh._texCoords[0].push(texCoords[t0].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t0].z);} +this._mesh._texCoords[0].push(texCoords[t1].x);this._mesh._texCoords[0].push(texCoords[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t1].z);} +this._mesh._texCoords[0].push(texCoords[t2].x);this._mesh._texCoords[0].push(texCoords[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t2].z);}} +break;default:}} +if(!hasNormal){this._mesh.calcNormals(normPerVert?Math.PI:0);} +if(!hasTexCoord){this._mesh.calcTexCoords(texMode);} +this._mesh.splitMesh();} +else +{faceCnt=0;for(i=0;i<indexes.length;i++) +{if((i>0)&&(i%3===0)){faceCnt++;} +this._mesh._indices[0].push(indexes[i]);if(!normPerVert&&hasNormal){this._mesh._normals[0].push(normals[faceCnt].x);this._mesh._normals[0].push(normals[faceCnt].y);this._mesh._normals[0].push(normals[faceCnt].z);} +if(!colPerVert&&hasColor){this._mesh._colors[0].push(colors[faceCnt].r);this._mesh._colors[0].push(colors[faceCnt].g);this._mesh._colors[0].push(colors[faceCnt].b);if(numColComponents===4){this._mesh._colors[0].push(colors[faceCnt].a);}}} +this._mesh._positions[0]=positions.toGL();if(hasNormal){this._mesh._normals[0]=normals.toGL();} +else{this._mesh.calcNormals(normPerVert?Math.PI:0);} +if(hasTexCoord){this._mesh._texCoords[0]=texCoords.toGL();this._mesh._numTexComponents=numTexComponents;} +else{this._mesh.calcTexCoords(texMode);} +if(hasColor&&colPerVert){this._mesh._colors[0]=colors.toGL();this._mesh._numColComponents=numColComponents;}} +this.invalidateVolume();this._mesh._numFaces=0;this._mesh._numCoords=0;for(i=0;i<this._mesh._indices.length;i++){this._mesh._numFaces+=this._mesh._indices[i].length/3;this._mesh._numCoords+=this._mesh._positions[i].length/3;} +var time1=new Date().getTime()-time0;},fieldChanged:function(fieldName) +{var pnts=this._cf.coord.node._vf.point;if(pnts.length>x3dom.Utils.maxIndexableCoords) +{x3dom.debug.logWarning("IndexedTriangleSet: fieldChanged with "+"too many coordinates not yet implemented!");return;} +if(fieldName=="coord") +{this._mesh._positions[0]=pnts.toGL();this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName=="color") +{pnts=this._cf.color.node._vf.color;if(this._vf.colorPerVertex){this._mesh._colors[0]=pnts.toGL();}else if(!this._vf.colorPerVertex){var faceCnt=0;var numColComponents=3;if(x3dom.isa(this._cf.color.node,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;} +this._mesh._colors[0]=[];var indexes=this._vf.index;for(var i=0;i<indexes.length;++i) +{if((i>0)&&(i%3===0)){faceCnt++;} +this._mesh._colors[0].push(pnts[faceCnt].r);this._mesh._colors[0].push(pnts[faceCnt].g);this._mesh._colors[0].push(pnts[faceCnt].b);if(numColComponents===4){this._mesh._colors[0].push(pnts[faceCnt].a);}}} +Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});} +else if(fieldName=="normal") +{pnts=this._cf.normal.node._vf.vector;if(this._vf.normalPerVertex){this._mesh._normals[0]=pnts.toGL();}else if(!this._vf.normalPerVertex){var indexes=this._vf.index;this._mesh._normals[0]=[];var faceCnt=0;for(var i=0;i<indexes.length;++i) +{if((i>0)&&(i%3===0)){faceCnt++;} +this._mesh._normals[0].push(pnts[faceCnt].x);this._mesh._normals[0].push(pnts[faceCnt].y);this._mesh._normals[0].push(pnts[faceCnt].z);}} +Array.forEach(this._parentNodes,function(node){node._dirty.normals=true;});} +else if(fieldName=="texCoord") +{var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +pnts=texCoordNode._vf.point;this._mesh._texCoords[0]=pnts.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.texcoords=true;});}}}));x3dom.registerNodeType("IndexedTriangleStripSet","Rendering",defineClass(x3dom.nodeTypes.X3DComposedGeometryNode,function(ctx){x3dom.nodeTypes.IndexedTriangleStripSet.superClass.call(this,ctx);this.addField_MFInt32(ctx,'index',[]);this._hasIndexOffset=false;this._indexOffset=null;},{hasIndexOffset:function(){return this._hasIndexOffset;},nodeChanged:function() +{this.handleAttribs();var hasNormal=false,hasTexCoord=false,hasColor=false;var colPerVert=this._vf.colorPerVertex;var normPerVert=this._vf.normalPerVertex;var indexes=this._vf.index;var positions,normals,texCoords,colors;var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);positions=coordNode._vf.point;var normalNode=this._cf.normal.node;if(normalNode){hasNormal=true;normals=normalNode._vf.vector;} +else{hasNormal=false;} +var texMode="",numTexComponents=2;var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +if(texCoordNode){if(texCoordNode._vf.point){hasTexCoord=true;texCoords=texCoordNode._vf.point;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.TextureCoordinate3D)){numTexComponents=3;}} +else if(texCoordNode._vf.mode){texMode=texCoordNode._vf.mode;}} +else{hasTexCoord=false;} +this._mesh._numTexComponents=numTexComponents;var numColComponents=3;var colorNode=this._cf.color.node;if(colorNode){hasColor=true;colors=colorNode._vf.color;if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +else{hasColor=false;} +this._mesh._numColComponents=numColComponents;this._mesh._indices[0]=[];this._mesh._positions[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];this._mesh._colors[0]=[];this.invalidateVolume();this._mesh._numFaces=0;this._mesh._numCoords=0;var faceCnt=0,cnt=0;if(hasNormal&&positions.length<=x3dom.Utils.maxIndexableCoords) +{this._hasIndexOffset=true;this._indexOffset=[];this._mesh._primType='TRIANGLESTRIP';var indexOffset=[0];for(i=0;i<indexes.length;i++) +{if(indexes[i]==-1){faceCnt++;indexOffset.push(this._mesh._indices[0].length);} +else{this._mesh._indices[0].push(+indexes[i]);if(!normPerVert){this._mesh._normals[0].push(normals[faceCnt].x);this._mesh._normals[0].push(normals[faceCnt].y);this._mesh._normals[0].push(normals[faceCnt].z);} +if(!colPerVert){this._mesh._colors[0].push(colors[faceCnt].r);this._mesh._colors[0].push(colors[faceCnt].g);this._mesh._colors[0].push(colors[faceCnt].b);if(numColComponents===4){this._mesh._colors[0].push(colors[faceCnt].a);}}}} +this._mesh._positions[0]=positions.toGL();if(normPerVert){this._mesh._normals[0]=normals.toGL();} +if(hasTexCoord){this._mesh._texCoords[0]=texCoords.toGL();this._mesh._numTexComponents=numTexComponents;} +else{x3dom.debug.logWarning("IndexedTriangleStripSet: no texCoords given and won't calculate!");} +if(hasColor){if(colPerVert){this._mesh._colors[0]=colors.toGL();} +this._mesh._numColComponents=numColComponents;} +for(i=1;i<indexOffset.length;i++){var triCnt=indexOffset[i]-indexOffset[i-1];this._indexOffset.push({count:triCnt,offset:2*indexOffset[i-1]});this._mesh._numFaces+=(triCnt-2);} +this._mesh._numCoords=this._mesh._positions[0].length/3;} +else +{this._hasIndexOffset=false;var p1,p2,p3,n1,n2,n3,t1,t2,t3,c1,c2,c3;var swapOrder=false;for(var i=1;i<indexes.length-2;++i) +{if(indexes[i+1]==-1){i=i+2;faceCnt++;continue;} +if(swapOrder){p1=indexes[i];p2=indexes[i-1];p3=indexes[i+1];} +else{p1=indexes[i-1];p2=indexes[i];p3=indexes[i+1];} +swapOrder=!swapOrder;if(normPerVert){n1=p1;n2=p2;n3=p3;}else if(!normPerVert){n1=n2=n3=faceCnt;} +t1=p1;t2=p2;t3=p3;if(colPerVert){c1=p1;c2=p2;c3=p3;}else if(!colPerVert){c1=c2=c3=faceCnt;} +this._mesh._indices[0].push(cnt++,cnt++,cnt++);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);this._mesh._positions[0].push(positions[p2].x);this._mesh._positions[0].push(positions[p2].y);this._mesh._positions[0].push(positions[p2].z);this._mesh._positions[0].push(positions[p3].x);this._mesh._positions[0].push(positions[p3].y);this._mesh._positions[0].push(positions[p3].z);if(hasNormal){this._mesh._normals[0].push(normals[n1].x);this._mesh._normals[0].push(normals[n1].y);this._mesh._normals[0].push(normals[n1].z);this._mesh._normals[0].push(normals[n2].x);this._mesh._normals[0].push(normals[n2].y);this._mesh._normals[0].push(normals[n2].z);this._mesh._normals[0].push(normals[n3].x);this._mesh._normals[0].push(normals[n3].y);this._mesh._normals[0].push(normals[n3].z);} +if(hasColor){this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c1].a);} +this._mesh._colors[0].push(colors[c2].r);this._mesh._colors[0].push(colors[c2].g);this._mesh._colors[0].push(colors[c2].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c2].a);} +this._mesh._colors[0].push(colors[c3].r);this._mesh._colors[0].push(colors[c3].g);this._mesh._colors[0].push(colors[c3].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c3].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(texCoords[t1].x);this._mesh._texCoords[0].push(texCoords[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t1].z);} +this._mesh._texCoords[0].push(texCoords[t2].x);this._mesh._texCoords[0].push(texCoords[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t2].z);} +this._mesh._texCoords[0].push(texCoords[t3].x);this._mesh._texCoords[0].push(texCoords[t3].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t3].z);}}} +if(!hasNormal){this._mesh.calcNormals(Math.PI);} +if(!hasTexCoord){this._mesh.calcTexCoords(texMode);} +this._mesh.splitMesh();this.invalidateVolume();for(i=0;i<this._mesh._indices.length;i++){this._mesh._numFaces+=this._mesh._indices[i].length/3;this._mesh._numCoords+=this._mesh._positions[i].length/3;}}},fieldChanged:function(fieldName) +{if(fieldName!="coord"&&fieldName!="normal"&&fieldName!="texCoord"&&fieldName!="color") +{x3dom.debug.logWarning("IndexedTriangleStripSet: fieldChanged for "+ +fieldName+" not yet implemented!");return;} +var pnts=this._cf.coord.node._vf.point;if((this._cf.normal.node===null)||(pnts.length>x3dom.Utils.maxIndexableCoords)) +{if(fieldName=="coord"){this._mesh._positions[0]=[];this._mesh._indices[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];var hasNormal=false,hasTexCoord=false,hasColor=false;var colPerVert=this._vf.colorPerVertex;var normPerVert=this._vf.normalPerVertex;var indexes=this._vf.index;var positions,normals,texCoords,colors;var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);positions=coordNode._vf.point;var normalNode=this._cf.normal.node;if(normalNode){hasNormal=true;normals=normalNode._vf.vector;} +else{hasNormal=false;} +var texMode="",numTexComponents=2;var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +if(texCoordNode){if(texCoordNode._vf.point){hasTexCoord=true;texCoords=texCoordNode._vf.point;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.TextureCoordinate3D)){numTexComponents=3;}} +else if(texCoordNode._vf.mode){texMode=texCoordNode._vf.mode;}} +else{hasTexCoord=false;} +this._mesh._numTexComponents=numTexComponents;var numColComponents=3;var colorNode=this._cf.color.node;if(colorNode){hasColor=true;colors=colorNode._vf.color;if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +else{hasColor=false;} +this._mesh._numColComponents=numColComponents;this._mesh._indices[0]=[];this._mesh._positions[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];this._mesh._colors[0]=[];var faceCnt=0,cnt=0;var p1,p2,p3,n1,n2,n3,t1,t2,t3,c1,c2,c3;var swapOrder=false;if(hasNormal||hasTexCoord||hasColor){for(var i=1;i<indexes.length-2;++i) +{if(indexes[i+1]==-1){i=i+2;faceCnt++;continue;} +if(swapOrder){p1=indexes[i];p2=indexes[i-1];p3=indexes[i+1];} +else{p1=indexes[i-1];p2=indexes[i];p3=indexes[i+1];} +swapOrder=!swapOrder;if(normPerVert){n1=p1;n2=p2;n3=p3;}else if(!normPerVert){n1=n2=n3=faceCnt;} +t1=p1;t2=p2;t3=p3;if(colPerVert){c1=p1;c2=p2;c3=p3;}else if(!colPerVert){c1=c2=c3=faceCnt;} +this._mesh._indices[0].push(cnt++,cnt++,cnt++);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);this._mesh._positions[0].push(positions[p2].x);this._mesh._positions[0].push(positions[p2].y);this._mesh._positions[0].push(positions[p2].z);this._mesh._positions[0].push(positions[p3].x);this._mesh._positions[0].push(positions[p3].y);this._mesh._positions[0].push(positions[p3].z);if(hasNormal){this._mesh._normals[0].push(normals[n1].x);this._mesh._normals[0].push(normals[n1].y);this._mesh._normals[0].push(normals[n1].z);this._mesh._normals[0].push(normals[n2].x);this._mesh._normals[0].push(normals[n2].y);this._mesh._normals[0].push(normals[n2].z);this._mesh._normals[0].push(normals[n3].x);this._mesh._normals[0].push(normals[n3].y);this._mesh._normals[0].push(normals[n3].z);} +if(hasColor){this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c1].a);} +this._mesh._colors[0].push(colors[c2].r);this._mesh._colors[0].push(colors[c2].g);this._mesh._colors[0].push(colors[c2].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c2].a);} +this._mesh._colors[0].push(colors[c3].r);this._mesh._colors[0].push(colors[c3].g);this._mesh._colors[0].push(colors[c3].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c3].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(texCoords[t1].x);this._mesh._texCoords[0].push(texCoords[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t1].z);} +this._mesh._texCoords[0].push(texCoords[t2].x);this._mesh._texCoords[0].push(texCoords[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t2].z);} +this._mesh._texCoords[0].push(texCoords[t3].x);this._mesh._texCoords[0].push(texCoords[t3].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t3].z);}}} +if(!hasNormal){this._mesh.calcNormals(Math.PI);} +if(!hasTexCoord){this._mesh.calcTexCoords(texMode);} +this._mesh.splitMesh();}else{var swapOrder=false;for(var i=1;i<indexes.length;++i) +{if(indexes[i+1]==-1){i=i+2;continue;} +if(swapOrder){this._mesh._indices[0].push(indexes[i]);this._mesh._indices[0].push(indexes[i-1]);this._mesh._indices[0].push(indexes[i+1]);} +else{this._mesh._indices[0].push(indexes[i-1]);this._mesh._indices[0].push(indexes[i]);this._mesh._indices[0].push(indexes[i+1]);} +swapOrder=!swapOrder;} +this._mesh._positions[0]=positions.toGL();if(hasNormal){this._mesh._normals[0]=normals.toGL();} +else{this._mesh.calcNormals(Math.PI);} +if(hasTexCoord){this._mesh._texCoords[0]=texCoords.toGL();this._mesh._numTexComponents=numTexComponents;} +else{this._mesh.calcTexCoords(texMode);} +if(hasColor){this._mesh._colors[0]=colors.toGL();this._mesh._numColComponents=numColComponents;}} +this.invalidateVolume();this._mesh._numFaces=0;this._mesh._numCoords=0;for(i=0;i<this._mesh._indices.length;i++){this._mesh._numFaces+=this._mesh._indices[i].length/3;this._mesh._numCoords+=this._mesh._positions[i].length/3;} +Array.forEach(this._parentNodes,function(node){node.setAllDirty();node.invalidateVolume();});} +else if(fieldName=="color"){var col=this._cf.color.node._vf.color;var faceCnt=0;var c1=c2=c3=0;var numColComponents=3;if(x3dom.isa(this._cf.color.node,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;} +this._mesh._colors[0]=[];var indexes=this._vf.index;var swapOrder=false;for(i=1;i<indexes.length-2;++i) +{if(indexes[i+1]==-1){i=i+2;faceCnt++;continue;} +if(this._vf.colorPerVertex){if(swapOrder){c1=indexes[i];c2=indexes[i-1];c3=indexes[i+1];} +else{c1=indexes[i-1];c2=indexes[i];c3=indexes[i+1];} +swapOrder=!swapOrder;}else if(!this._vf.colorPerVertex){c1=c2=c3=faceCnt;} +this._mesh._colors[0].push(col[c1].r);this._mesh._colors[0].push(col[c1].g);this._mesh._colors[0].push(col[c1].b);if(numColComponents===4){this._mesh._colors[0].push(col[c1].a);} +this._mesh._colors[0].push(col[c2].r);this._mesh._colors[0].push(col[c2].g);this._mesh._colors[0].push(col[c2].b);if(numColComponents===4){this._mesh._colors[0].push(col[c2].a);} +this._mesh._colors[0].push(col[c3].r);this._mesh._colors[0].push(col[c3].g);this._mesh._colors[0].push(col[c3].b);if(numColComponents===4){this._mesh._colors[0].push(col[c3].a);}} +Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});} +else if(fieldName=="normal"){var nor=this._cf.normal.node._vf.vector;var faceCnt=0;var n1=n2=n3=0;this._mesh._normals[0]=[];var indexes=this._vf.index;var swapOrder=false;for(i=1;i<indexes.length-2;++i) +{if(indexes[i+1]==-1){i=i+2;faceCnt++;continue;} +if(this._vf.normalPerVertex){if(swapOrder){n1=indexes[i];n2=indexes[i-1];n3=indexes[i+1];} +else{n1=indexes[i-1];n2=indexes[i];n3=indexes[i+1];} +swapOrder=!swapOrder;}else if(!this._vf.normalPerVertex){n1=n2=n3=faceCnt;} +this._mesh._normals[0].push(nor[n1].x);this._mesh._normals[0].push(nor[n1].y);this._mesh._normals[0].push(nor[n1].z);this._mesh._normals[0].push(nor[n2].x);this._mesh._normals[0].push(nor[n2].y);this._mesh._normals[0].push(nor[n2].z);this._mesh._normals[0].push(nor[n3].x);this._mesh._normals[0].push(nor[n3].y);this._mesh._normals[0].push(nor[n3].z);} +Array.forEach(this._parentNodes,function(node){node._dirty.normals=true;});} +else if(fieldName=="texCoord"){var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +var tex=texCoordNode._vf.point;var t1=t2=t3=0;var numTexComponents=2;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.TextureCoordinate3D)){numTexComponents=3;} +this._mesh._texCoords[0]=[];var indexes=this._vf.index;var swapOrder=false;for(i=1;i<indexes.length-2;++i) +{if(indexes[i+1]==-1){i=i+2;continue;} +if(swapOrder){t1=indexes[i];t2=indexes[i-1];t3=indexes[i+1];} +else{t1=indexes[i-1];t2=indexes[i];t3=indexes[i+1];} +swapOrder=!swapOrder;this._mesh._texCoords[0].push(tex[t1].x);this._mesh._texCoords[0].push(tex[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(tex[t1].z);} +this._mesh._texCoords[0].push(tex[t2].x);this._mesh._texCoords[0].push(tex[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].tex(col[t2].z);} +this._mesh._texCoords[0].push(tex[t3].x);this._mesh._texCoords[0].push(tex[t3].y);if(numTexComponents===3){this._mesh._texCoords[0].push(tex[t3].z);}} +Array.forEach(this._parentNodes,function(node){node._dirty.texcoords=true;});}} +else +{if(fieldName=="coord") +{this._mesh._positions[0]=pnts.toGL();this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName=="color") +{pnts=this._cf.color.node._vf.color;if(this._vf.colorPerVertex){this._mesh._colors[0]=pnts.toGL();}else if(!this._vf.colorPerVertex){var faceCnt=0;var numColComponents=3;if(x3dom.isa(this._cf.color.node,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;} +this._mesh._colors[0]=[];var indexes=this._vf.index;for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){faceCnt++;continue;} +this._mesh._colors[0].push(pnts[faceCnt].r);this._mesh._colors[0].push(pnts[faceCnt].g);this._mesh._colors[0].push(pnts[faceCnt].b);if(numColComponents===4){this._mesh._colors[0].push(pnts[faceCnt].a);}}} +Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});} +else if(fieldName=="normal") +{pnts=this._cf.normal.node._vf.vector;if(this._vf.normalPerVertex){this._mesh._normals[0]=pnts.toGL();}else if(!this._vf.normalPerVertex){var indexes=this._vf.index;this._mesh._normals[0]=[];var faceCnt=0;for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){faceCnt++;continue;} +this._mesh._normals[0].push(pnts[faceCnt].x);this._mesh._normals[0].push(pnts[faceCnt].y);this._mesh._normals[0].push(pnts[faceCnt].z);}} +Array.forEach(this._parentNodes,function(node){node._dirty.normals=true;});} +else if(fieldName=="texCoord") +{var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +pnts=texCoordNode._vf.point;this._mesh._texCoords[0]=pnts.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.texcoords=true;});}}}}));x3dom.registerNodeType("X3DGeometricPropertyNode","Rendering",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.X3DGeometricPropertyNode.superClass.call(this,ctx);}));x3dom.registerNodeType("X3DCoordinateNode","Rendering",defineClass(x3dom.nodeTypes.X3DGeometricPropertyNode,function(ctx){x3dom.nodeTypes.X3DCoordinateNode.superClass.call(this,ctx);},{fieldChanged:function(fieldName){if(fieldName==="coord"||fieldName==="point"){Array.forEach(this._parentNodes,function(node){node.fieldChanged("coord");});}},parentAdded:function(parent){if(parent._mesh&&parent._cf.coord.node!==this){parent.fieldChanged("coord");}}}));x3dom.registerNodeType("Coordinate","Rendering",defineClass(x3dom.nodeTypes.X3DCoordinateNode,function(ctx){x3dom.nodeTypes.Coordinate.superClass.call(this,ctx);this.addField_MFVec3f(ctx,'point',[]);},{getPoints:function(){return this._vf.point;}}));x3dom.registerNodeType("Normal","Rendering",defineClass(x3dom.nodeTypes.X3DGeometricPropertyNode,function(ctx){x3dom.nodeTypes.Normal.superClass.call(this,ctx);this.addField_MFVec3f(ctx,'vector',[]);},{fieldChanged:function(fieldName){if(fieldName==="normal"||fieldName==="vector"){Array.forEach(this._parentNodes,function(node){node.fieldChanged("normal");});}},parentAdded:function(parent){if(parent._mesh&&parent._cf.normal.node!==this){parent.fieldChanged("normal");}}}));x3dom.registerNodeType("X3DColorNode","Rendering",defineClass(x3dom.nodeTypes.X3DGeometricPropertyNode,function(ctx){x3dom.nodeTypes.X3DColorNode.superClass.call(this,ctx);},{fieldChanged:function(fieldName){if(fieldName==="color"){Array.forEach(this._parentNodes,function(node){node.fieldChanged("color");});}},parentAdded:function(parent){if(parent._mesh&&parent._cf.color.node!==this){parent.fieldChanged("color");}}}));x3dom.registerNodeType("Color","Rendering",defineClass(x3dom.nodeTypes.X3DColorNode,function(ctx){x3dom.nodeTypes.Color.superClass.call(this,ctx);this.addField_MFColor(ctx,'color',[]);}));x3dom.registerNodeType("ColorRGBA","Rendering",defineClass(x3dom.nodeTypes.X3DColorNode,function(ctx){x3dom.nodeTypes.ColorRGBA.superClass.call(this,ctx);this.addField_MFColorRGBA(ctx,'color',[]);}));x3dom.registerNodeType("ParticleSet","Rendering",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.ParticleSet.superClass.call(this,ctx);this.addField_SFString(ctx,'mode','ViewDirQuads');this.addField_SFString(ctx,'mode','ViewDirQuads');this.addField_SFNode(ctx,'coord',null);this.addField_SFNode(ctx,'secCoord',null);this.addField_SFNode(ctx,'color',null);this.addField_SFNode(ctx,'normal',null);this.addField_MFVec3f(ctx,'size',null);this.addField_MFInt32(ctx,'index',null);this.addField_MFFloat(ctx,'textureZ',null);},{getVolume:function(){},fieldChanged:function(fieldName) +{if(fieldName=='mode') +{console.log("mode has been changed");}},getCenter:function(){},getDiameter:function(){}}));x3dom.registerNodeType("X3DAppearanceNode","Shape",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.X3DAppearanceNode.superClass.call(this,ctx);}));x3dom.registerNodeType("Appearance","Shape",defineClass(x3dom.nodeTypes.X3DAppearanceNode,function(ctx){x3dom.nodeTypes.Appearance.superClass.call(this,ctx);this.addField_SFNode('material',x3dom.nodeTypes.X3DMaterialNode);this.addField_SFNode('texture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('textureTransform',x3dom.nodeTypes.X3DTextureTransformNode);this.addField_SFNode('lineProperties',x3dom.nodeTypes.LineProperties);this.addField_SFNode('colorMaskMode',x3dom.nodeTypes.ColorMaskMode);this.addField_SFNode('blendMode',x3dom.nodeTypes.BlendMode);this.addField_SFNode('depthMode',x3dom.nodeTypes.DepthMode);this.addField_MFNode('shaders',x3dom.nodeTypes.X3DShaderNode);this.addField_SFString(ctx,'sortType','auto');this.addField_SFInt32(ctx,'sortKey',0);this._shader=null;},{nodeChanged:function(){if(!this._cf.material.node){} +if(this._cf.shaders.nodes.length){this._shader=this._cf.shaders.nodes[0];} +Array.forEach(this._parentNodes,function(shape){shape.setAppDirty();});this.checkSortType();},checkSortType:function(){if(this._vf.sortType=='auto'){if(this._cf.material.node&&this._cf.material.node._vf.transparency>0){this._vf.sortType='transparent';} +else if(this._cf.texture.node&&this._cf.texture.node._vf.url.length){if(this._cf.texture.node._vf.url[0].toLowerCase().indexOf('.'+'png')>=0){this._vf.sortType='transparent';} +else{this._vf.sortType='opaque';}} +else{this._vf.sortType='opaque';}}},texTransformMatrix:function(){if(this._cf.textureTransform.node===null){return x3dom.fields.SFMatrix4f.identity();} +else{return this._cf.textureTransform.node.texTransformMatrix();}},parentAdded:function(parent){if(this!=x3dom.nodeTypes.Appearance._defaultNode){parent.setAppDirty();}}}));x3dom.nodeTypes.Appearance.defaultNode=function(){if(!x3dom.nodeTypes.Appearance._defaultNode){x3dom.nodeTypes.Appearance._defaultNode=new x3dom.nodeTypes.Appearance();x3dom.nodeTypes.Appearance._defaultNode.nodeChanged();} +return x3dom.nodeTypes.Appearance._defaultNode;};x3dom.registerNodeType("X3DAppearanceChildNode","Shape",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.X3DAppearanceChildNode.superClass.call(this,ctx);}));x3dom.registerNodeType("BlendMode","Shape",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.BlendMode.superClass.call(this,ctx);this.addField_SFString(ctx,'srcFactor',"src_alpha");this.addField_SFString(ctx,'destFactor',"one_minus_src_alpha");this.addField_SFColor(ctx,'color',1,1,1);this.addField_SFFloat(ctx,'colorTransparency',0);this.addField_SFString(ctx,'alphaFunc',"none");this.addField_SFFloat(ctx,'alphaFuncValue',0);this.addField_SFString(ctx,'equation',"none");}));x3dom.registerNodeType("DepthMode","Shape",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.DepthMode.superClass.call(this,ctx);this.addField_SFBool(ctx,'enableDepthTest',true);this.addField_SFString(ctx,'depthFunc',"none");this.addField_SFBool(ctx,'readOnly',false);this.addField_SFFloat(ctx,'zNearRange',-1);this.addField_SFFloat(ctx,'zFarRange',-1);}));x3dom.registerNodeType("ColorMaskMode","Shape",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.ColorMaskMode.superClass.call(this,ctx);this.addField_SFBool(ctx,'maskR',true);this.addField_SFBool(ctx,'maskG',true);this.addField_SFBool(ctx,'maskB',true);this.addField_SFBool(ctx,'maskA',true);}));x3dom.registerNodeType("LineProperties","Shape",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.LineProperties.superClass.call(this,ctx);this.addField_SFBool(ctx,'applied',true);this.addField_SFInt32(ctx,'linetype',1);this.addField_SFFloat(ctx,'linewidthScaleFactor',0);}));x3dom.registerNodeType("X3DMaterialNode","Shape",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.X3DMaterialNode.superClass.call(this,ctx);}));x3dom.registerNodeType("Material","Shape",defineClass(x3dom.nodeTypes.X3DMaterialNode,function(ctx){x3dom.nodeTypes.Material.superClass.call(this,ctx);this.addField_SFFloat(ctx,'ambientIntensity',0.2);this.addField_SFColor(ctx,'diffuseColor',0.8,0.8,0.8);this.addField_SFColor(ctx,'emissiveColor',0,0,0);this.addField_SFFloat(ctx,'shininess',0.2);this.addField_SFColor(ctx,'specularColor',0,0,0);this.addField_SFFloat(ctx,'transparency',0);},{fieldChanged:function(fieldName){if(fieldName=="ambientIntensity"||fieldName=="diffuseColor"||fieldName=="emissiveColor"||fieldName=="shininess"||fieldName=="specularColor"||fieldName=="transparency") +{Array.forEach(this._parentNodes,function(app){Array.forEach(app._parentNodes,function(shape){shape._dirty.material=true;});app.checkSortType();});}}}));x3dom.nodeTypes.Material.defaultNode=function(){if(!x3dom.nodeTypes.Material._defaultNode){x3dom.nodeTypes.Material._defaultNode=new x3dom.nodeTypes.Material();x3dom.nodeTypes.Material._defaultNode.nodeChanged();} +return x3dom.nodeTypes.Material._defaultNode;};x3dom.registerNodeType("TwoSidedMaterial","Shape",defineClass(x3dom.nodeTypes.X3DMaterialNode,function(ctx){x3dom.nodeTypes.TwoSidedMaterial.superClass.call(this,ctx);this.addField_SFFloat(ctx,'backAmbientIntensity',0.2);this.addField_SFColor(ctx,'backDiffuseColor',0.8,0.8,0.8);this.addField_SFColor(ctx,'backEmissiveColor',0,0,0);this.addField_SFFloat(ctx,'backShininess',0.2);this.addField_SFColor(ctx,'backSpecularColor',0,0,0);this.addField_SFFloat(ctx,'backTransparency',0);this.addField_SFBool(ctx,'separateBackColor',false);},{fieldChanged:function(fieldName){if(fieldName=="ambientIntensity"||fieldName=="diffuseColor"||fieldName=="emissiveColor"||fieldName=="shininess"||fieldName=="specularColor"||fieldName=="transparency"||fieldName=="backAmbientIntensity"||fieldName=="backDiffuseColor"||fieldName=="backEmissiveColor"||fieldName=="backShininess"||fieldName=="backSpecularColor"||fieldName=="backTransparency"||fieldName=="separateBackColor") +{Array.forEach(this._parentNodes,function(app){Array.forEach(app._parentNodes,function(shape){shape._dirty.material=true;});app.checkSortType();});}}}));x3dom.registerNodeType("X3DShapeNode","Shape",defineClass(x3dom.nodeTypes.X3DBoundedObject,function(ctx){x3dom.nodeTypes.X3DShapeNode.superClass.call(this,ctx);this.addField_SFBool(ctx,'isPickable',true);this.addField_SFNode('appearance',x3dom.nodeTypes.X3DAppearanceNode);this.addField_SFNode('geometry',x3dom.nodeTypes.X3DGeometryNode);this._objectID=0;this._shaderProperties=null;this._cleanupGLObjects=null;this._dirty={positions:true,normals:true,texcoords:true,colors:true,indexes:true,texture:true,material:true,text:true,shader:true};this._coordStrideOffset=[0,0];this._normalStrideOffset=[0,0];this._texCoordStrideOffset=[0,0];this._colorStrideOffset=[0,0];this._tessellationProperties=[];},{collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{var graphState=this.graphState();if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();if(!this._cf.geometry.node||drawableCollection.cull(transform,graphState,singlePath,planeMask)<=0){return false;} +if(singlePath&&!this._graph.globalMatrix) +this._graph.globalMatrix=transform;drawableCollection.addShape(this,transform,graphState);return true;},getVolume:function() +{var vol=this._graph.volume;if(!this.volumeValid()&&this._vf.render) +{var geo=this._cf.geometry.node;var childVol=geo?geo.getVolume():null;if(childVol&&childVol.isValid()) +vol.extendBounds(childVol.min,childVol.max);} +return vol;},getCenter:function(){var geo=this._cf.geometry.node;return(geo?geo.getCenter():new x3dom.fields.SFVec3f(0,0,0));},getDiameter:function(){var geo=this._cf.geometry.node;return(geo?geo.getDiameter():0);},doIntersect:function(line){return this._cf.geometry.node.doIntersect(line);},forceUpdateCoverage:function() +{var geo=this._cf.geometry.node;return(geo?geo.forceUpdateCoverage():false);},tessellationProperties:function() +{var geo=this._cf.geometry.node;if(geo&&geo._indexOffset) +return geo._indexOffset;else +return this._tessellationProperties;},isLit:function(){return this._cf.geometry.node._vf.lit;},isSolid:function(){return this._cf.geometry.node._vf.solid;},isCCW:function(){return this._cf.geometry.node._vf.ccw;},parentRemoved:function(parent){for(var i=0,n=this._childNodes.length;i<n;i++){var child=this._childNodes[i];if(child){child.parentRemoved(this);}} +if(parent) +parent.invalidateVolume();if(this._parentNodes.length>0) +this.invalidateVolume();if(this._cleanupGLObjects){this._cleanupGLObjects();}},unsetDirty:function(){this._dirty.positions=false;this._dirty.normals=false;this._dirty.texcoords=false;this._dirty.colors=false;this._dirty.indexes=false;this._dirty.texture=false;this._dirty.material=false;this._dirty.text=false;this._dirty.shader=false;},unsetGeoDirty:function(){this._dirty.positions=false;this._dirty.normals=false;this._dirty.texcoords=false;this._dirty.colors=false;this._dirty.indexes=false;},setAllDirty:function(){this._dirty.positions=true;this._dirty.normals=true;this._dirty.texcoords=true;this._dirty.colors=true;this._dirty.indexes=true;this._dirty.texture=true;this._dirty.material=true;this._dirty.text=true;this._dirty.shader=true;this.invalidateVolume();},setAppDirty:function(){this._dirty.texture=true;this._dirty.material=true;this._dirty.shader=true;},setGeoDirty:function(){this._dirty.positions=true;this._dirty.normals=true;this._dirty.texcoords=true;this._dirty.colors=true;this._dirty.indexes=true;this.invalidateVolume();},getShaderProperties:function(viewarea) +{if(this._shaderProperties==null||this._dirty.shader==true||(this._webgl!==undefined&&this._webgl.dirtyLighting!=x3dom.Utils.checkDirtyLighting(viewarea))||x3dom.Utils.checkDirtyEnvironment(viewarea,this._shaderProperties)==true) +{this._shaderProperties=x3dom.Utils.generateProperties(viewarea,this);this._dirty.shader=false;if(this._webgl!==undefined) +{this._webgl.dirtyLighting=x3dom.Utils.checkDirtyLighting(viewarea);}} +return this._shaderProperties;},getTextures:function(){var textures=[];var appearance=this._cf.appearance.node;if(appearance){var tex=appearance._cf.texture.node;if(tex){if(x3dom.isa(tex,x3dom.nodeTypes.MultiTexture)){textures=textures.concat(tex.getTextures());} +else{textures.push(tex);}} +var shader=appearance._cf.shaders.nodes[0];if(shader){if(x3dom.isa(shader,x3dom.nodeTypes.CommonSurfaceShader)){textures=textures.concat(shader.getTextures());}}} +var geometry=this._cf.geometry.node;if(geometry){if(x3dom.isa(geometry,x3dom.nodeTypes.ImageGeometry)){textures=textures.concat(geometry.getTextures());} +else if(x3dom.isa(geometry,x3dom.nodeTypes.Text)){textures=textures.concat(geometry);}} +return textures;}}));x3dom.registerNodeType("Shape","Shape",defineClass(x3dom.nodeTypes.X3DShapeNode,function(ctx){x3dom.nodeTypes.Shape.superClass.call(this,ctx);},{nodeChanged:function(){if(!this._cf.appearance.node){} +if(!this._cf.geometry.node){if(this._DEF) +x3dom.debug.logError("No geometry given in Shape/"+this._DEF);} +else if(!this._objectID){this._objectID=++x3dom.nodeTypes.Shape.objectID;x3dom.nodeTypes.Shape.idMap.nodeID[this._objectID]=this;} +this.invalidateVolume();}}));x3dom.nodeTypes.Shape.shaderPartID=0;x3dom.nodeTypes.Shape.objectID=0;x3dom.nodeTypes.Shape.idMap={nodeID:{},remove:function(obj){for(var prop in this.nodeID){if(this.nodeID.hasOwnProperty(prop)){var val=this.nodeID[prop];if(val._objectID&&obj._objectID&&val._objectID===obj._objectID) +{delete this.nodeID[prop];x3dom.debug.logInfo("Unreg "+val._objectID);}}}}};x3dom.registerNodeType("X3DLightNode","Lighting",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DLightNode.superClass.call(this,ctx);if(ctx) +ctx.doc._nodeBag.lights.push(this);else +x3dom.debug.logWarning("X3DLightNode: No runtime context found!");this._lightID=0;this._dirty=true;this.addField_SFFloat(ctx,'ambientIntensity',0);this.addField_SFColor(ctx,'color',1,1,1);this.addField_SFFloat(ctx,'intensity',1);this.addField_SFBool(ctx,'global',false);this.addField_SFBool(ctx,'on',true);this.addField_SFFloat(ctx,'shadowIntensity',0);this.addField_SFInt32(ctx,'shadowMapSize',1024);this.addField_SFInt32(ctx,'shadowFilterSize',0);this.addField_SFFloat(ctx,'shadowOffset',0);this.addField_SFFloat(ctx,'zFar',-1);},{getViewMatrix:function(vec){return x3dom.fields.SFMatrix4f.identity;},nodeChanged:function(){if(!this._lightID){this._lightID=++x3dom.nodeTypes.X3DLightNode.lightID;}},fieldChanged:function(fieldName) +{if(this._vf.hasOwnProperty(fieldName)){this._dirty=true;}},parentRemoved:function(parent) +{if(this._parentNodes.length===0){var doc=this.findX3DDoc();for(var i=0,n=doc._nodeBag.lights.length;i<n;i++){if(doc._nodeBag.lights[i]===this){doc._nodeBag.lights.splice(i,1);}}}}}));x3dom.nodeTypes.X3DLightNode.lightID=0;x3dom.registerNodeType("DirectionalLight","Lighting",defineClass(x3dom.nodeTypes.X3DLightNode,function(ctx){x3dom.nodeTypes.DirectionalLight.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'direction',0,0,-1);this.addField_SFInt32(ctx,'shadowCascades',1);this.addField_SFFloat(ctx,'shadowSplitFactor',1);this.addField_SFFloat(ctx,'shadowSplitOffset',0.1);},{getViewMatrix:function(vec){var dir=this.getCurrentTransform().multMatrixVec(this._vf.direction).normalize();var orientation=x3dom.fields.Quaternion.rotateFromTo(new x3dom.fields.SFVec3f(0,0,-1),dir);return orientation.toMatrix().transpose().mult(x3dom.fields.SFMatrix4f.translation(vec.negate()));}}));x3dom.registerNodeType("PointLight","Lighting",defineClass(x3dom.nodeTypes.X3DLightNode,function(ctx){x3dom.nodeTypes.PointLight.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'attenuation',1,0,0);this.addField_SFVec3f(ctx,'location',0,0,0);this.addField_SFFloat(ctx,'radius',100);this._vf.global=true;},{getViewMatrix:function(vec){var pos=this.getCurrentTransform().multMatrixPnt(this._vf.location);var orientation=x3dom.fields.Quaternion.rotateFromTo(new x3dom.fields.SFVec3f(0,0,-1),vec);return orientation.toMatrix().transpose().mult(x3dom.fields.SFMatrix4f.translation(pos.negate()));}}));x3dom.registerNodeType("SpotLight","Lighting",defineClass(x3dom.nodeTypes.X3DLightNode,function(ctx){x3dom.nodeTypes.SpotLight.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'direction',0,0,-1);this.addField_SFVec3f(ctx,'attenuation',1,0,0);this.addField_SFVec3f(ctx,'location',0,0,0);this.addField_SFFloat(ctx,'radius',100);this.addField_SFFloat(ctx,'beamWidth',1.5707963);this.addField_SFFloat(ctx,'cutOffAngle',1.5707963);this.addField_SFInt32(ctx,'shadowCascades',1);this.addField_SFFloat(ctx,'shadowSplitFactor',1);this.addField_SFFloat(ctx,'shadowSplitOffset',0.1);this._vf.global=true;},{getViewMatrix:function(vec){var pos=this.getCurrentTransform().multMatrixPnt(this._vf.location);var dir=this.getCurrentTransform().multMatrixVec(this._vf.direction).normalize();var orientation=x3dom.fields.Quaternion.rotateFromTo(new x3dom.fields.SFVec3f(0,0,-1),dir);return orientation.toMatrix().transpose().mult(x3dom.fields.SFMatrix4f.translation(pos.negate()));}}));x3dom.registerNodeType("X3DFollowerNode","Followers",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DFollowerNode.superClass.call(this,ctx);if(ctx) +ctx.doc._nodeBag.followers.push(this);else +x3dom.debug.logWarning("X3DFollowerNode: No runtime context found!");this.addField_SFBool(ctx,'isActive',false);this._eps=x3dom.fields.Eps;},{parentRemoved:function(parent) +{if(this._parentNodes.length===0){var doc=this.findX3DDoc();for(var i=0,n=doc._nodeBag.followers.length;i<n;i++){if(doc._nodeBag.followers[i]===this){doc._nodeBag.followers.splice(i,1);}}}},tick:function(t){return false;},stepResponse:function(t) +{if(t<=0){return 0;} +if(t>=this._vf.duration){return 1;} +return this.stepResponseCore(t/this._vf.duration);},stepResponseCore:function(T) +{return 0.5-0.5*Math.cos(T*Math.PI);}}));x3dom.registerNodeType("X3DChaserNode","Followers",defineClass(x3dom.nodeTypes.X3DFollowerNode,function(ctx){x3dom.nodeTypes.X3DChaserNode.superClass.call(this,ctx);this.addField_SFTime(ctx,'duration',1);this._initDone=false;this._stepTime=0;this._currTime=0;this._bufferEndTime=0;this._numSupports=60;}));x3dom.registerNodeType("X3DDamperNode","Followers",defineClass(x3dom.nodeTypes.X3DFollowerNode,function(ctx){x3dom.nodeTypes.X3DDamperNode.superClass.call(this,ctx);this.addField_SFTime(ctx,'tau',0.3);this.addField_SFFloat(ctx,'tolerance',-1);this.addField_SFInt32(ctx,'order',3);this._eps=this._vf.tolerance<0?this._eps:this._vf.tolerance;this._lastTick=0;}));x3dom.registerNodeType("ColorChaser","Followers",defineClass(x3dom.nodeTypes.X3DChaserNode,function(ctx){x3dom.nodeTypes.ColorChaser.superClass.call(this,ctx);this.addField_SFColor(ctx,'initialDestination',0.8,0.8,0.8);this.addField_SFColor(ctx,'initialValue',0.8,0.8,0.8);this.addField_SFColor(ctx,'value',0,0,0);this.addField_SFColor(ctx,'destination',0,0,0);this._buffer=new x3dom.fields.MFColor();this._previousValue=new x3dom.fields.SFColor(0,0,0);this._value=new x3dom.fields.SFColor(0,0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName.indexOf("destination")>=0) +{this.initialize();this.updateBuffer(this._currTime);if(!this._vf.isActive){this.postMessage('isActive',true);}} +else if(fieldName.indexOf("value")>=0) +{this.initialize();this._previousValue.setValues(this._vf.value);for(var C=1;C<this._buffer.length;C++){this._buffer[C].setValues(this._vf.value);} +this.postMessage('value',this._vf.value);if(!this._vf.isActive){this.postMessage('isActive',true);}}},initialize:function() +{if(!this._initDone) +{this._initDone=true;this._vf.destination=this._vf.initialDestination;this._buffer.length=this._numSupports;this._buffer[0]=this._vf.initialDestination;for(var C=1;C<this._buffer.length;C++){this._buffer[C]=this._vf.initialValue;} +this._previousValue=this._vf.initialValue;this._stepTime=this._vf.duration/this._numSupports;var active=!this._buffer[0].equals(this._buffer[1],this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}}},tick:function(now) +{this.initialize();this._currTime=now;if(!this._bufferEndTime) +{this._bufferEndTime=now;this._value=this._vf.initialValue;this.postMessage('value',this._value);return true;} +var Frac=this.updateBuffer(now);var Output=this._previousValue;var DeltaIn=this._buffer[this._buffer.length-1].subtract(this._previousValue);var DeltaOut=DeltaIn.multiply(this.stepResponse((this._buffer.length-1+Frac)*this._stepTime));Output=Output.add(DeltaOut);for(var C=this._buffer.length-2;C>=0;C--) +{DeltaIn=this._buffer[C].subtract(this._buffer[C+1]);DeltaOut=DeltaIn.multiply(this.stepResponse((C+Frac)*this._stepTime));Output=Output.add(DeltaOut);} +if(!Output.equals(this._value,this._eps)){this._value.setValues(Output);this.postMessage('value',this._value);} +else{this.postMessage('isActive',false);} +return this._vf.isActive;},updateBuffer:function(now) +{var Frac=(now-this._bufferEndTime)/this._stepTime;var C;var NumToShift;var Alpha;if(Frac>=1) +{NumToShift=Math.floor(Frac);Frac-=NumToShift;if(NumToShift<this._buffer.length) +{this._previousValue=this._buffer[this._buffer.length-NumToShift];for(C=this._buffer.length-1;C>=NumToShift;C--){this._buffer[C]=this._buffer[C-NumToShift];} +for(C=0;C<NumToShift;C++) +{Alpha=C/NumToShift;this._buffer[C]=this._buffer[NumToShift].multiply(Alpha).add(this._vf.destination.multiply((1-Alpha)));}} +else +{this._previousValue=(NumToShift==this._buffer.length)?this._buffer[0]:this._vf.destination;for(C=0;C<this._buffer.length;C++){this._buffer[C]=this._vf.destination;}} +this._bufferEndTime+=NumToShift*this._stepTime;} +return Frac;}}));x3dom.registerNodeType("ColorDamper","Followers",defineClass(x3dom.nodeTypes.X3DDamperNode,function(ctx){x3dom.nodeTypes.ColorDamper.superClass.call(this,ctx);this.addField_SFColor(ctx,'initialDestination',0.8,0.8,0.8);this.addField_SFColor(ctx,'initialValue',0.8,0.8,0.8);this.addField_SFColor(ctx,'value',0,0,0);this.addField_SFColor(ctx,'destination',0,0,0);this._value0=new x3dom.fields.SFColor(0,0,0);this._value1=new x3dom.fields.SFColor(0,0,0);this._value2=new x3dom.fields.SFColor(0,0,0);this._value3=new x3dom.fields.SFColor(0,0,0);this._value4=new x3dom.fields.SFColor(0,0,0);this._value5=new x3dom.fields.SFColor(0,0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName==="tolerance") +{this._eps=this._vf.tolerance<0?0.001:this._vf.tolerance;} +else if(fieldName.indexOf("destination")>=0) +{if(!this._value0.equals(this._vf.destination,this._eps)){this._value0=this._vf.destination;if(!this._vf.isActive){this.postMessage('isActive',true);}}} +else if(fieldName.indexOf("value")>=0) +{this._value1.setValues(this._vf.value);this._value2.setValues(this._vf.value);this._value3.setValues(this._vf.value);this._value4.setValues(this._vf.value);this._value5.setValues(this._vf.value);this._lastTick=0;this.postMessage('value',this._value5);if(!this._vf.isActive){this._lastTick=0;this.postMessage('isActive',true);}}},initialize:function() +{this._value0.setValues(this._vf.initialDestination);this._value1.setValues(this._vf.initialValue);this._value2.setValues(this._vf.initialValue);this._value3.setValues(this._vf.initialValue);this._value4.setValues(this._vf.initialValue);this._value5.setValues(this._vf.initialValue);this._lastTick=0;var active=!this._value0.equals(this._value1,this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}},distance:function(a,b) +{var diff=a.subtract(b);return Math.sqrt(diff.r*diff.r+diff.g*diff.g+diff.b*diff.b);},tick:function(now) +{if(!this._lastTick) +{this._lastTick=now;return false;} +var delta=now-this._lastTick;var alpha=Math.exp(-delta/this._vf.tau);this._value1=this._vf.order>0&&this._vf.tau?this._value0.add(this._value1.subtract(this._value0).multiply(alpha)):new x3dom.fields.SFColor(this._value0.r,this._value0.g,this._value0.b);this._value2=this._vf.order>1&&this._vf.tau?this._value1.add(this._value2.subtract(this._value1).multiply(alpha)):new x3dom.fields.SFColor(this._value1.r,this._value1.g,this._value1.b);this._value3=this._vf.order>2&&this._vf.tau?this._value2.add(this._value3.subtract(this._value2).multiply(alpha)):new x3dom.fields.SFColor(this._value2.r,this._value2.g,this._value2.b);this._value4=this._vf.order>3&&this._vf.tau?this._value3.add(this._value4.subtract(this._value3).multiply(alpha)):new x3dom.fields.SFColor(this._value3.r,this._value3.g,this._value3.b);this._value5=this._vf.order>4&&this._vf.tau?this._value4.add(this._value5.subtract(this._value4).multiply(alpha)):new x3dom.fields.SFColor(this._value4.r,this._value4.g,this._value4.b);var dist=this.distance(this._value1,this._value0);if(this._vf.order>1) +{var dist2=this.distance(this._value2,this._value1);if(dist2>dist){dist=dist2;}} +if(this._vf.order>2) +{var dist3=this.distance(this._value3,this._value2);if(dist3>dist){dist=dist3;}} +if(this._vf.order>3) +{var dist4=this.distance(this._value4,this._value3);if(dist4>dist){dist=dist4;}} +if(this._vf.order>4) +{var dist5=this.distance(this._value5,this._value4);if(dist5>dist){dist=dist5;}} +if(dist<=this._eps) +{this._value1.setValues(this._value0);this._value2.setValues(this._value0);this._value3.setValues(this._value0);this._value4.setValues(this._value0);this._value5.setValues(this._value0);this.postMessage('value',this._value0);this.postMessage('isActive',false);this._lastTick=0;return false;} +this.postMessage('value',this._value5);this._lastTick=now;return true;}}));x3dom.registerNodeType("OrientationChaser","Followers",defineClass(x3dom.nodeTypes.X3DChaserNode,function(ctx){x3dom.nodeTypes.OrientationChaser.superClass.call(this,ctx);this.addField_SFRotation(ctx,'initialDestination',0,1,0,0);this.addField_SFRotation(ctx,'initialValue',0,1,0,0);this.addField_SFRotation(ctx,'value',0,1,0,0);this.addField_SFRotation(ctx,'destination',0,1,0,0);this._numSupports=30;this._buffer=new x3dom.fields.MFRotation();this._previousValue=new x3dom.fields.Quaternion(0,1,0,0);this._value=new x3dom.fields.Quaternion(0,1,0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName.indexOf("destination")>=0) +{this.initialize();this.updateBuffer(this._currTime);if(!this._vf.isActive){this.postMessage('isActive',true);}} +else if(fieldName.indexOf("value")>=0) +{this.initialize();this._previousValue.setValues(this._vf.value);for(var C=1;C<this._buffer.length;C++){this._buffer[C].setValues(this._vf.value);} +this.postMessage('value',this._vf.value);if(!this._vf.isActive){this.postMessage('isActive',true);}}},initialize:function() +{if(!this._initDone) +{this._initDone=true;this._vf.destination=x3dom.fields.Quaternion.copy(this._vf.initialDestination);this._buffer.length=this._numSupports;this._buffer[0]=x3dom.fields.Quaternion.copy(this._vf.initialDestination);for(var C=1;C<this._buffer.length;C++){this._buffer[C]=x3dom.fields.Quaternion.copy(this._vf.initialValue);} +this._previousValue=x3dom.fields.Quaternion.copy(this._vf.initialValue);this._stepTime=this._vf.duration/this._numSupports;var active=!this._buffer[0].equals(this._buffer[1],this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}}},tick:function(now) +{this.initialize();this._currTime=now;if(!this._bufferEndTime) +{this._bufferEndTime=now;this._value=x3dom.fields.Quaternion.copy(this._vf.initialValue);this.postMessage('value',this._value);return true;} +var Frac=this.updateBuffer(now);var Output=x3dom.fields.Quaternion.copy(this._previousValue);var DeltaIn=this._previousValue.inverse().multiply(this._buffer[this._buffer.length-1]);Output=Output.slerp(Output.multiply(DeltaIn),this.stepResponse((this._buffer.length-1+Frac)*this._stepTime));for(var C=this._buffer.length-2;C>=0;C--) +{DeltaIn=this._buffer[C+1].inverse().multiply(this._buffer[C]);Output=Output.slerp(Output.multiply(DeltaIn),this.stepResponse((C+Frac)*this._stepTime));} +if(!Output.equals(this._value,this._eps)){Output=Output.normalize(Output);this._value.setValues(Output);this.postMessage('value',this._value);} +else{this.postMessage('isActive',false);} +return this._vf.isActive;},updateBuffer:function(now) +{var Frac=(now-this._bufferEndTime)/this._stepTime;var C;var NumToShift;var Alpha;if(Frac>=1) +{NumToShift=Math.floor(Frac);Frac-=NumToShift;if(NumToShift<this._buffer.length) +{this._previousValue=x3dom.fields.Quaternion.copy(this._buffer[this._buffer.length-NumToShift]);for(C=this._buffer.length-1;C>=NumToShift;C--){this._buffer[C]=x3dom.fields.Quaternion.copy(this._buffer[C-NumToShift]);} +for(C=0;C<NumToShift;C++) +{Alpha=C/NumToShift;this._buffer[C]=this._vf.destination.slerp(this._buffer[NumToShift],Alpha);}} +else +{this._previousValue=x3dom.fields.Quaternion.copy((NumToShift==this._buffer.length)?this._buffer[0]:this._vf.destination);for(C=0;C<this._buffer.length;C++){this._buffer[C]=x3dom.fields.Quaternion.copy(this._vf.destination);}} +this._bufferEndTime+=NumToShift*this._stepTime;} +return Frac;}}));x3dom.registerNodeType("OrientationDamper","Followers",defineClass(x3dom.nodeTypes.X3DDamperNode,function(ctx){x3dom.nodeTypes.OrientationDamper.superClass.call(this,ctx);this.addField_SFRotation(ctx,'initialDestination',0,1,0,0);this.addField_SFRotation(ctx,'initialValue',0,1,0,0);this.addField_SFRotation(ctx,'value',0,1,0,0);this.addField_SFRotation(ctx,'destination',0,1,0,0);this._value0=new x3dom.fields.Quaternion(0,1,0,0);this._value1=new x3dom.fields.Quaternion(0,1,0,0);this._value2=new x3dom.fields.Quaternion(0,1,0,0);this._value3=new x3dom.fields.Quaternion(0,1,0,0);this._value4=new x3dom.fields.Quaternion(0,1,0,0);this._value5=new x3dom.fields.Quaternion(0,1,0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName==="tolerance") +{this._eps=this._vf.tolerance<0?0.001:this._vf.tolerance;} +else if(fieldName.indexOf("destination")>=0) +{if(!this._value0.equals(this._vf.destination,this._eps)){this._value0=this._vf.destination;if(!this._vf.isActive){this.postMessage('isActive',true);}}} +else if(fieldName.indexOf("value")>=0) +{this._value1.setValues(this._vf.value);this._value2.setValues(this._vf.value);this._value3.setValues(this._vf.value);this._value4.setValues(this._vf.value);this._value5.setValues(this._vf.value);this._lastTick=0;this.postMessage('value',this._value5);if(!this._vf.isActive){this._lastTick=0;this.postMessage('isActive',true);}}},initialize:function() +{this._value0.setValues(this._vf.initialDestination);this._value1.setValues(this._vf.initialValue);this._value2.setValues(this._vf.initialValue);this._value3.setValues(this._vf.initialValue);this._value4.setValues(this._vf.initialValue);this._value5.setValues(this._vf.initialValue);this._lastTick=0;var active=!this._value0.equals(this._value1,this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}},tick:function(now) +{if(!this._lastTick) +{this._lastTick=now;return false;} +var delta=now-this._lastTick;var alpha=Math.exp(-delta/this._vf.tau);this._value1=this._vf.order>0&&this._vf.tau?this._value0.slerp(this._value1,alpha):new x3dom.fields.Quaternion(this._value0.x,this._value0.y,this._value0.z,this._value0.w);this._value2=this._vf.order>1&&this._vf.tau?this._value1.slerp(this._value2,alpha):new x3dom.fields.Quaternion(this._value1.x,this._value1.y,this._value1.z,this._value1.w);this._value3=this._vf.order>2&&this._vf.tau?this._value2.slerp(this._value3,alpha):new x3dom.fields.Quaternion(this._value2.x,this._value2.y,this._value2.z,this._value2.w);this._value4=this._vf.order>3&&this._vf.tau?this._value3.slerp(this._value4,alpha):new x3dom.fields.Quaternion(this._value3.x,this._value3.y,this._value3.z,this._value3.w);this._value5=this._vf.order>4&&this._vf.tau?this._value4.slerp(this._value5,alpha):new x3dom.fields.Quaternion(this._value4.x,this._value4.y,this._value4.z,this._value4.w);var dist=Math.abs(this._value1.inverse().multiply(this._value0).angle());if(this._vf.order>1) +{var dist2=Math.abs(this._value2.inverse().multiply(this._value1).angle());if(dist2>dist){dist=dist2;}} +if(this._vf.order>2) +{var dist3=Math.abs(this._value3.inverse().multiply(this._value2).angle());if(dist3>dist){dist=dist3;}} +if(this._vf.order>3) +{var dist4=Math.abs(this._value4.inverse().multiply(this._value3).angle());if(dist4>dist){dist=dist4;}} +if(this._vf.order>4) +{var dist5=Math.abs(this._value5.inverse().multiply(this._value4).angle());if(dist5>dist){dist=dist5;}} +if(dist<=this._eps) +{this._value1.setValues(this._value0);this._value2.setValues(this._value0);this._value3.setValues(this._value0);this._value4.setValues(this._value0);this._value5.setValues(this._value0);this.postMessage('value',this._value0);this.postMessage('isActive',false);this._lastTick=0;return false;} +this.postMessage('value',this._value5);this._lastTick=now;return true;}}));x3dom.registerNodeType("PositionChaser","Followers",defineClass(x3dom.nodeTypes.X3DChaserNode,function(ctx){x3dom.nodeTypes.PositionChaser.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'initialDestination',0,0,0);this.addField_SFVec3f(ctx,'initialValue',0,0,0);this.addField_SFVec3f(ctx,'value',0,0,0);this.addField_SFVec3f(ctx,'destination',0,0,0);this._buffer=new x3dom.fields.MFVec3f();this._previousValue=new x3dom.fields.SFVec3f(0,0,0);this._value=new x3dom.fields.SFVec3f(0,0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName.indexOf("destination")>=0) +{this.initialize();this.updateBuffer(this._currTime);if(!this._vf.isActive){this.postMessage('isActive',true);}} +else if(fieldName.indexOf("value")>=0) +{this.initialize();this._previousValue.setValues(this._vf.value);for(var C=1;C<this._buffer.length;C++){this._buffer[C].setValues(this._vf.value);} +this.postMessage('value',this._vf.value);if(!this._vf.isActive){this.postMessage('isActive',true);}}},initialize:function() +{if(!this._initDone) +{this._initDone=true;this._vf.destination=x3dom.fields.SFVec3f.copy(this._vf.initialDestination);this._buffer.length=this._numSupports;this._buffer[0]=x3dom.fields.SFVec3f.copy(this._vf.initialDestination);for(var C=1;C<this._buffer.length;C++){this._buffer[C]=x3dom.fields.SFVec3f.copy(this._vf.initialValue);} +this._previousValue=x3dom.fields.SFVec3f.copy(this._vf.initialValue);this._stepTime=this._vf.duration/this._numSupports;var active=!this._buffer[0].equals(this._buffer[1],this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}}},tick:function(now) +{this.initialize();this._currTime=now;if(!this._bufferEndTime) +{this._bufferEndTime=now;this._value=x3dom.fields.SFVec3f.copy(this._vf.initialValue);this.postMessage('value',this._value);return true;} +var Frac=this.updateBuffer(now);var Output=x3dom.fields.SFVec3f.copy(this._previousValue);var DeltaIn=this._buffer[this._buffer.length-1].subtract(this._previousValue);var DeltaOut=DeltaIn.multiply(this.stepResponse((this._buffer.length-1+Frac)*this._stepTime));Output=Output.add(DeltaOut);for(var C=this._buffer.length-2;C>=0;C--) +{DeltaIn=this._buffer[C].subtract(this._buffer[C+1]);DeltaOut=DeltaIn.multiply(this.stepResponse((C+Frac)*this._stepTime));Output=Output.add(DeltaOut);} +if(!Output.equals(this._value,this._eps)){this._value.setValues(Output);this.postMessage('value',this._value);} +else{this.postMessage('isActive',false);} +return this._vf.isActive;},updateBuffer:function(now) +{var Frac=(now-this._bufferEndTime)/this._stepTime;var C;var NumToShift;var Alpha;if(Frac>=1) +{NumToShift=Math.floor(Frac);Frac-=NumToShift;if(NumToShift<this._buffer.length) +{this._previousValue=x3dom.fields.SFVec3f.copy(this._buffer[this._buffer.length-NumToShift]);for(C=this._buffer.length-1;C>=NumToShift;C--){this._buffer[C]=x3dom.fields.SFVec3f.copy(this._buffer[C-NumToShift]);} +for(C=0;C<NumToShift;C++) +{Alpha=C/NumToShift;this._buffer[C]=this._buffer[NumToShift].multiply(Alpha).add(this._vf.destination.multiply((1-Alpha)));}} +else +{this._previousValue=x3dom.fields.SFVec3f.copy((NumToShift==this._buffer.length)?this._buffer[0]:this._vf.destination);for(C=0;C<this._buffer.length;C++){this._buffer[C]=x3dom.fields.SFVec3f.copy(this._vf.destination);}} +this._bufferEndTime+=NumToShift*this._stepTime;} +return Frac;}}));x3dom.registerNodeType("PositionChaser2D","Followers",defineClass(x3dom.nodeTypes.X3DChaserNode,function(ctx){x3dom.nodeTypes.PositionChaser2D.superClass.call(this,ctx);this.addField_SFVec2f(ctx,'initialDestination',0,0);this.addField_SFVec2f(ctx,'initialValue',0,0);this.addField_SFVec2f(ctx,'value',0,0);this.addField_SFVec2f(ctx,'destination',0,0);this._buffer=new x3dom.fields.MFVec2f();this._previousValue=new x3dom.fields.SFVec2f(0,0);this._value=new x3dom.fields.SFVec2f(0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName.indexOf("destination")>=0) +{this.initialize();this.updateBuffer(this._currTime);if(!this._vf.isActive){this.postMessage('isActive',true);}} +else if(fieldName.indexOf("value")>=0) +{this.initialize();this._previousValue.setValues(this._vf.value);for(var C=1;C<this._buffer.length;C++){this._buffer[C].setValues(this._vf.value);} +this.postMessage('value',this._vf.value);if(!this._vf.isActive){this.postMessage('isActive',true);}}},initialize:function() +{if(!this._initDone) +{this._initDone=true;this._vf.destination=x3dom.fields.SFVec2f.copy(this._vf.initialDestination);this._buffer.length=this._numSupports;this._buffer[0]=x3dom.fields.SFVec2f.copy(this._vf.initialDestination);for(var C=1;C<this._buffer.length;C++){this._buffer[C]=x3dom.fields.SFVec2f.copy(this._vf.initialValue);} +this._previousValue=x3dom.fields.SFVec2f.copy(this._vf.initialValue);this._stepTime=this._vf.duration/this._numSupports;var active=!this._buffer[0].equals(this._buffer[1],this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}}},tick:function(now) +{this.initialize();this._currTime=now;if(!this._bufferEndTime) +{this._bufferEndTime=now;this._value=x3dom.fields.SFVec2f.copy(this._vf.initialValue);this.postMessage('value',this._value);return true;} +var Frac=this.updateBuffer(now);var Output=x3dom.fields.SFVec2f.copy(this._previousValue);var DeltaIn=this._buffer[this._buffer.length-1].subtract(this._previousValue);var DeltaOut=DeltaIn.multiply(this.stepResponse((this._buffer.length-1+Frac)*this._stepTime));Output=Output.add(DeltaOut);for(var C=this._buffer.length-2;C>=0;C--) +{DeltaIn=this._buffer[C].subtract(this._buffer[C+1]);DeltaOut=DeltaIn.multiply(this.stepResponse((C+Frac)*this._stepTime));Output=Output.add(DeltaOut);} +if(!Output.equals(this._value,this._eps)){this._value.setValues(Output);this.postMessage('value',this._value);} +else{this.postMessage('isActive',false);} +return this._vf.isActive;},updateBuffer:function(now) +{var Frac=(now-this._bufferEndTime)/this._stepTime;var C;var NumToShift;var Alpha;if(Frac>=1) +{NumToShift=Math.floor(Frac);Frac-=NumToShift;if(NumToShift<this._buffer.length) +{this._previousValue=x3dom.fields.SFVec2f.copy(this._buffer[this._buffer.length-NumToShift]);for(C=this._buffer.length-1;C>=NumToShift;C--){this._buffer[C]=x3dom.fields.SFVec2f.copy(this._buffer[C-NumToShift]);} +for(C=0;C<NumToShift;C++) +{Alpha=C/NumToShift;this._buffer[C]=this._buffer[NumToShift].multiply(Alpha).add(this._vf.destination.multiply((1-Alpha)));}} +else +{this._previousValue=x3dom.fields.SFVec2f.copy((NumToShift==this._buffer.length)?this._buffer[0]:this._vf.destination);for(C=0;C<this._buffer.length;C++){this._buffer[C]=x3dom.fields.SFVec2f.copy(this._vf.destination);}} +this._bufferEndTime+=NumToShift*this._stepTime;} +return Frac;}}));x3dom.registerNodeType("PositionDamper","Followers",defineClass(x3dom.nodeTypes.X3DDamperNode,function(ctx){x3dom.nodeTypes.PositionDamper.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'initialDestination',0,0,0);this.addField_SFVec3f(ctx,'initialValue',0,0,0);this.addField_SFVec3f(ctx,'value',0,0,0);this.addField_SFVec3f(ctx,'destination',0,0,0);this._value0=new x3dom.fields.SFVec3f(0,0,0);this._value1=new x3dom.fields.SFVec3f(0,0,0);this._value2=new x3dom.fields.SFVec3f(0,0,0);this._value3=new x3dom.fields.SFVec3f(0,0,0);this._value4=new x3dom.fields.SFVec3f(0,0,0);this._value5=new x3dom.fields.SFVec3f(0,0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName==="tolerance") +{this._eps=this._vf.tolerance<0?0.001:this._vf.tolerance;} +else if(fieldName.indexOf("destination")>=0) +{if(!this._value0.equals(this._vf.destination,this._eps)){this._value0=this._vf.destination;if(!this._vf.isActive){this.postMessage('isActive',true);}}} +else if(fieldName.indexOf("value")>=0) +{this._value1.setValues(this._vf.value);this._value2.setValues(this._vf.value);this._value3.setValues(this._vf.value);this._value4.setValues(this._vf.value);this._value5.setValues(this._vf.value);this._lastTick=0;this.postMessage('value',this._value5);if(!this._vf.isActive){this._lastTick=0;this.postMessage('isActive',true);}}},initialize:function() +{this._value0.setValues(this._vf.initialDestination);this._value1.setValues(this._vf.initialValue);this._value2.setValues(this._vf.initialValue);this._value3.setValues(this._vf.initialValue);this._value4.setValues(this._vf.initialValue);this._value5.setValues(this._vf.initialValue);this._lastTick=0;var active=!this._value0.equals(this._value1,this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}},tick:function(now) +{if(!this._lastTick) +{this._lastTick=now;return false;} +var delta=now-this._lastTick;var alpha=Math.exp(-delta/this._vf.tau);this._value1=this._vf.order>0&&this._vf.tau?this._value0.add(this._value1.subtract(this._value0).multiply(alpha)):new x3dom.fields.SFVec3f(this._value0.x,this._value0.y,this._value0.z);this._value2=this._vf.order>1&&this._vf.tau?this._value1.add(this._value2.subtract(this._value1).multiply(alpha)):new x3dom.fields.SFVec3f(this._value1.x,this._value1.y,this._value1.z);this._value3=this._vf.order>2&&this._vf.tau?this._value2.add(this._value3.subtract(this._value2).multiply(alpha)):new x3dom.fields.SFVec3f(this._value2.x,this._value2.y,this._value2.z);this._value4=this._vf.order>3&&this._vf.tau?this._value3.add(this._value4.subtract(this._value3).multiply(alpha)):new x3dom.fields.SFVec3f(this._value3.x,this._value3.y,this._value3.z);this._value5=this._vf.order>4&&this._vf.tau?this._value4.add(this._value5.subtract(this._value4).multiply(alpha)):new x3dom.fields.SFVec3f(this._value4.x,this._value4.y,this._value4.z);var dist=this._value1.subtract(this._value0).length();if(this._vf.order>1) +{var dist2=this._value2.subtract(this._value1).length();if(dist2>dist){dist=dist2;}} +if(this._vf.order>2) +{var dist3=this._value3.subtract(this._value2).length();if(dist3>dist){dist=dist3;}} +if(this._vf.order>3) +{var dist4=this._value4.subtract(this._value3).length();if(dist4>dist){dist=dist4;}} +if(this._vf.order>4) +{var dist5=this._value5.subtract(this._value4).length();if(dist5>dist){dist=dist5;}} +if(dist<=this._eps) +{this._value1.setValues(this._value0);this._value2.setValues(this._value0);this._value3.setValues(this._value0);this._value4.setValues(this._value0);this._value5.setValues(this._value0);this.postMessage('value',this._value0);this.postMessage('isActive',false);this._lastTick=0;return false;} +this.postMessage('value',this._value5);this._lastTick=now;return true;}}));x3dom.registerNodeType("PositionDamper2D","Followers",defineClass(x3dom.nodeTypes.X3DDamperNode,function(ctx){x3dom.nodeTypes.PositionDamper2D.superClass.call(this,ctx);this.addField_SFVec2f(ctx,'initialDestination',0,0);this.addField_SFVec2f(ctx,'initialValue',0,0);this.addField_SFVec2f(ctx,'value',0,0);this.addField_SFVec2f(ctx,'destination',0,0);this._value0=new x3dom.fields.SFVec2f(0,0);this._value1=new x3dom.fields.SFVec2f(0,0);this._value2=new x3dom.fields.SFVec2f(0,0);this._value3=new x3dom.fields.SFVec2f(0,0);this._value4=new x3dom.fields.SFVec2f(0,0);this._value5=new x3dom.fields.SFVec2f(0,0);this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName==="tolerance") +{this._eps=this._vf.tolerance<0?0.001:this._vf.tolerance;} +else if(fieldName.indexOf("destination")>=0) +{if(!this._value0.equals(this._vf.destination,this._eps)){this._value0=this._vf.destination;if(!this._vf.isActive){this.postMessage('isActive',true);}}} +else if(fieldName.indexOf("value")>=0) +{this._value1.setValues(this._vf.value);this._value2.setValues(this._vf.value);this._value3.setValues(this._vf.value);this._value4.setValues(this._vf.value);this._value5.setValues(this._vf.value);this._lastTick=0;this.postMessage('value',this._value5);if(!this._vf.isActive){this._lastTick=0;this.postMessage('isActive',true);}}},initialize:function() +{this._value0.setValues(this._vf.initialDestination);this._value1.setValues(this._vf.initialValue);this._value2.setValues(this._vf.initialValue);this._value3.setValues(this._vf.initialValue);this._value4.setValues(this._vf.initialValue);this._value5.setValues(this._vf.initialValue);this._lastTick=0;var active=!this._value0.equals(this._value1,this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}},tick:function(now) +{if(!this._lastTick) +{this._lastTick=now;return false;} +var delta=now-this._lastTick;var alpha=Math.exp(-delta/this._vf.tau);this._value1=this._vf.order>0&&this._vf.tau?this._value0.add(this._value1.subtract(this._value0).multiply(alpha)):new x3dom.fields.SFVec2f(this._value0.x,this._value0.y,this._value0.z);this._value2=this._vf.order>1&&this._vf.tau?this._value1.add(this._value2.subtract(this._value1).multiply(alpha)):new x3dom.fields.SFVec2f(this._value1.x,this._value1.y,this._value1.z);this._value3=this._vf.order>2&&this._vf.tau?this._value2.add(this._value3.subtract(this._value2).multiply(alpha)):new x3dom.fields.SFVec2f(this._value2.x,this._value2.y,this._value2.z);this._value4=this._vf.order>3&&this._vf.tau?this._value3.add(this._value4.subtract(this._value3).multiply(alpha)):new x3dom.fields.SFVec2f(this._value3.x,this._value3.y,this._value3.z);this._value5=this._vf.order>4&&this._vf.tau?this._value4.add(this._value5.subtract(this._value4).multiply(alpha)):new x3dom.fields.SFVec2f(this._value4.x,this._value4.y,this._value4.z);var dist=this._value1.subtract(this._value0).length();if(this._vf.order>1) +{var dist2=this._value2.subtract(this._value1).length();if(dist2>dist){dist=dist2;}} +if(this._vf.order>2) +{var dist3=this._value3.subtract(this._value2).length();if(dist3>dist){dist=dist3;}} +if(this._vf.order>3) +{var dist4=this._value4.subtract(this._value3).length();if(dist4>dist){dist=dist4;}} +if(this._vf.order>4) +{var dist5=this._value5.subtract(this._value4).length();if(dist5>dist){dist=dist5;}} +if(dist<=this._eps) +{this._value1.setValues(this._value0);this._value2.setValues(this._value0);this._value3.setValues(this._value0);this._value4.setValues(this._value0);this._value5.setValues(this._value0);this.postMessage('value',this._value0);this.postMessage('isActive',false);this._lastTick=0;return false;} +this.postMessage('value',this._value5);this._lastTick=now;return true;}}));x3dom.registerNodeType("ScalarChaser","Followers",defineClass(x3dom.nodeTypes.X3DChaserNode,function(ctx){x3dom.nodeTypes.ScalarChaser.superClass.call(this,ctx);this.addField_SFFloat(ctx,'initialDestination',0);this.addField_SFFloat(ctx,'initialValue',0);this.addField_SFFloat(ctx,'value',0);this.addField_SFFloat(ctx,'destination',0);this._buffer=[];this._previousValue=0;this._value=0;this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName.indexOf("destination")>=0) +{this.initialize();this.updateBuffer(this._currTime);if(!this._vf.isActive){this.postMessage('isActive',true);}} +else if(fieldName.indexOf("value")>=0) +{this.initialize();this._previousValue=this._vf.value;for(var C=1;C<this._buffer.length;C++){this._buffer[C]=this._vf.value;} +this.postMessage('value',this._vf.value);if(!this._vf.isActive){this.postMessage('isActive',true);}}},initialize:function() +{if(!this._initDone) +{this._initDone=true;this._vf.destination=this._vf.initialDestination;this._buffer.length=this._numSupports;this._buffer[0]=this._vf.initialDestination;for(var C=1;C<this._buffer.length;C++){this._buffer[C]=this._vf.initialValue;} +this._previousValue=this._vf.initialValue;this._stepTime=this._vf.duration/this._numSupports;var active=(Math.abs(this._buffer[0]-this._buffer[1])>this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}}},tick:function(now) +{this.initialize();this._currTime=now;if(!this._bufferEndTime) +{this._bufferEndTime=now;this._value=this._vf.initialValue;this.postMessage('value',this._value);return true;} +var Frac=this.updateBuffer(now);var Output=this._previousValue;var DeltaIn=this._buffer[this._buffer.length-1]-this._previousValue;var DeltaOut=DeltaIn*(this.stepResponse((this._buffer.length-1+Frac)*this._stepTime));Output=Output+DeltaOut;for(var C=this._buffer.length-2;C>=0;C--) +{DeltaIn=this._buffer[C]-this._buffer[C+1];DeltaOut=DeltaIn*(this.stepResponse((C+Frac)*this._stepTime));Output=Output+DeltaOut;} +if(Math.abs(Output-this._value)>this._eps){this._value=Output;this.postMessage('value',this._value);} +else{this.postMessage('isActive',false);} +return this._vf.isActive;},updateBuffer:function(now) +{var Frac=(now-this._bufferEndTime)/this._stepTime;var C;var NumToShift;var Alpha;if(Frac>=1) +{NumToShift=Math.floor(Frac);Frac-=NumToShift;if(NumToShift<this._buffer.length) +{this._previousValue=this._buffer[this._buffer.length-NumToShift];for(C=this._buffer.length-1;C>=NumToShift;C--){this._buffer[C]=this._buffer[C-NumToShift];} +for(C=0;C<NumToShift;C++) +{Alpha=C/NumToShift;this._buffer[C]=this._buffer[NumToShift]*Alpha+this._vf.destination*(1-Alpha);}} +else +{this._previousValue=(NumToShift==this._buffer.length)?this._buffer[0]:this._vf.destination;for(C=0;C<this._buffer.length;C++){this._buffer[C]=this._vf.destination;}} +this._bufferEndTime+=NumToShift*this._stepTime;} +return Frac;}}));x3dom.registerNodeType("ScalarDamper","Followers",defineClass(x3dom.nodeTypes.X3DDamperNode,function(ctx){x3dom.nodeTypes.ScalarDamper.superClass.call(this,ctx);this.addField_SFFloat(ctx,'initialDestination',0);this.addField_SFFloat(ctx,'initialValue',0);this.addField_SFFloat(ctx,'value',0);this.addField_SFFloat(ctx,'destination',0);this._value0=0;this._value1=0;this._value2=0;this._value3=0;this._value4=0;this._value5=0;this.initialize();},{fieldChanged:function(fieldName) +{if(fieldName==="tolerance") +{this._eps=this._vf.tolerance<0?0.001:this._vf.tolerance;} +else if(fieldName.indexOf("destination")>=0) +{if(Math.abs(this._value0-this._vf.destination)>this._eps){this._value0=this._vf.destination;if(!this._vf.isActive){this.postMessage('isActive',true);}}} +else if(fieldName.indexOf("value")>=0) +{this._value1=this._vf.value;this._value2=this._vf.value;this._value3=this._vf.value;this._value4=this._vf.value;this._value5=this._vf.value;this._lastTick=0;this.postMessage('value',this._value5);if(!this._vf.isActive){this._lastTick=0;this.postMessage('isActive',true);}}},initialize:function() +{this._value0=this._vf.initialDestination;this._value1=this._vf.initialValue;this._value2=this._vf.initialValue;this._value3=this._vf.initialValue;this._value4=this._vf.initialValue;this._value5=this._vf.initialValue;this._lastTick=0;var active=(Math.abs(this._value0-this._value1)>this._eps);if(this._vf.isActive!==active){this.postMessage('isActive',active);}},tick:function(now) +{if(!this._lastTick) +{this._lastTick=now;return false;} +var delta=now-this._lastTick;var alpha=Math.exp(-delta/this._vf.tau);this._value1=this._vf.order>0&&this._vf.tau?this._value0+alpha*(this._value1-this._value0):this._value0;this._value2=this._vf.order>1&&this._vf.tau?this._value1+alpha*(this._value2-this._value1):this._value1;this._value3=this._vf.order>2&&this._vf.tau?this._value2+alpha*(this._value3-this._value2):this._value2;this._value4=this._vf.order>3&&this._vf.tau?this._value3+alpha*(this._value4-this._value3):this._value3;this._value5=this._vf.order>4&&this._vf.tau?this._value4+alpha*(this._value5-this._value4):this._value4;var dist=Math.abs(this._value1-this._value0);if(this._vf.order>1) +{var dist2=Math.abs(this._value2-this._value1);if(dist2>dist){dist=dist2;}} +if(this._vf.order>2) +{var dist3=Math.abs(this._value3-this._value2);if(dist3>dist){dist=dist3;}} +if(this._vf.order>3) +{var dist4=Math.abs(this._value4-this._value3);if(dist4>dist){dist=dist4;}} +if(this._vf.order>4) +{var dist5=Math.abs(this._value5-this._value4);if(dist5>dist){dist=dist5;}} +if(dist<=this._eps) +{this._value1=this._value0;this._value2=this._value0;this._value3=this._value0;this._value4=this._value0;this._value5=this._value0;this.postMessage('value',this._value0);this.postMessage('isActive',false);this._lastTick=0;return false;} +this.postMessage('value',this._value5);this._lastTick=now;return true;}}));x3dom.registerNodeType("CoordinateDamper","Followers",defineClass(x3dom.nodeTypes.X3DDamperNode,function(ctx){x3dom.nodeTypes.CoordinateDamper.superClass.call(this,ctx);this.addField_MFVec3f(ctx,'initialDestination',[]);this.addField_MFVec3f(ctx,'initialValue',[]);this.addField_MFVec3f(ctx,'value',[]);this.addField_MFVec3f(ctx,'destination',[]);x3dom.debug.logWarning("CoordinateDamper NYI");}));x3dom.registerNodeType("TexCoordDamper2D","Followers",defineClass(x3dom.nodeTypes.X3DDamperNode,function(ctx){x3dom.nodeTypes.TexCoordDamper2D.superClass.call(this,ctx);this.addField_MFVec2f(ctx,'initialDestination',[]);this.addField_MFVec2f(ctx,'initialValue',[]);this.addField_MFVec2f(ctx,'value',[]);this.addField_MFVec2f(ctx,'destination',[]);x3dom.debug.logWarning("TexCoordDamper2D NYI");}));x3dom.registerNodeType("X3DInterpolatorNode","Interpolation",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DInterpolatorNode.superClass.call(this,ctx);this.addField_MFFloat(ctx,'key',[]);this.addField_SFFloat(ctx,'set_fraction',0);},{linearInterp:function(time,interp){if(time<=this._vf.key[0]) +return this._vf.keyValue[0];else if(time>=this._vf.key[this._vf.key.length-1]) +return this._vf.keyValue[this._vf.key.length-1];for(var i=0;i<this._vf.key.length-1;++i){if((this._vf.key[i]<time)&&(time<=this._vf.key[i+1])) +return interp(this._vf.keyValue[i],this._vf.keyValue[i+1],(time-this._vf.key[i])/(this._vf.key[i+1]-this._vf.key[i]));} +return this._vf.keyValue[0];}}));x3dom.registerNodeType("OrientationInterpolator","Interpolation",defineClass(x3dom.nodeTypes.X3DInterpolatorNode,function(ctx){x3dom.nodeTypes.OrientationInterpolator.superClass.call(this,ctx);this.addField_MFRotation(ctx,'keyValue',[]);},{fieldChanged:function(fieldName) +{if(fieldName==="set_fraction") +{var value=this.linearInterp(this._vf.set_fraction,function(a,b,t){return a.slerp(b,t);});this.postMessage('value_changed',value);}}}));x3dom.registerNodeType("PositionInterpolator","Interpolation",defineClass(x3dom.nodeTypes.X3DInterpolatorNode,function(ctx){x3dom.nodeTypes.PositionInterpolator.superClass.call(this,ctx);this.addField_MFVec3f(ctx,'keyValue',[]);},{fieldChanged:function(fieldName) +{if(fieldName==="set_fraction") +{var value=this.linearInterp(this._vf.set_fraction,function(a,b,t){return a.multiply(1.0-t).add(b.multiply(t));});this.postMessage('value_changed',value);}}}));x3dom.registerNodeType("NormalInterpolator","Interpolation",defineClass(x3dom.nodeTypes.X3DInterpolatorNode,function(ctx){x3dom.nodeTypes.NormalInterpolator.superClass.call(this,ctx);this.addField_MFVec3f(ctx,'keyValue',[]);},{fieldChanged:function(fieldName) +{if(fieldName==="set_fraction") +{var value=this.linearInterp(this._vf.set_fraction,function(a,b,t){return a.multiply(1.0-t).add(b.multiply(t)).normalize();});this.postMessage('value_changed',value);}}}));x3dom.registerNodeType("ColorInterpolator","Interpolation",defineClass(x3dom.nodeTypes.X3DInterpolatorNode,function(ctx){x3dom.nodeTypes.ColorInterpolator.superClass.call(this,ctx);this.addField_MFColor(ctx,'keyValue',[]);},{fieldChanged:function(fieldName) +{if(fieldName==="set_fraction") +{var value=this.linearInterp(this._vf.set_fraction,function(a,b,t){return a.multiply(1.0-t).add(b.multiply(t));});this.postMessage('value_changed',value);}}}));x3dom.registerNodeType("ScalarInterpolator","Interpolation",defineClass(x3dom.nodeTypes.X3DInterpolatorNode,function(ctx){x3dom.nodeTypes.ScalarInterpolator.superClass.call(this,ctx);this.addField_MFFloat(ctx,'keyValue',[]);},{fieldChanged:function(fieldName) +{if(fieldName==="set_fraction") +{var value=this.linearInterp(this._vf.set_fraction,function(a,b,t){return(1.0-t)*a+t*b;});this.postMessage('value_changed',value);}}}));x3dom.registerNodeType("CoordinateInterpolator","Interpolation",defineClass(x3dom.nodeTypes.X3DInterpolatorNode,function(ctx){x3dom.nodeTypes.CoordinateInterpolator.superClass.call(this,ctx);this.addField_MFVec3f(ctx,'keyValue',[]);if(ctx&&ctx.xmlNode.hasAttribute('keyValue')){this._vf.keyValue=[];var arr=x3dom.fields.MFVec3f.parse(ctx.xmlNode.getAttribute('keyValue'));var key=this._vf.key.length>0?this._vf.key.length:1;var len=arr.length/key;for(var i=0;i<key;i++){var val=new x3dom.fields.MFVec3f();for(var j=0;j<len;j++){val.push(arr[i*len+j]);} +this._vf.keyValue.push(val);}}},{fieldChanged:function(fieldName) +{if(fieldName==="set_fraction") +{var value=this.linearInterp(this._vf.set_fraction,function(a,b,t){var val=new x3dom.fields.MFVec3f();for(var i=0;i<a.length;i++) +val.push(a[i].multiply(1.0-t).add(b[i].multiply(t)));return val;});this.postMessage('value_changed',value);}}}));x3dom.registerNodeType("TimeSensor","Time",defineClass(x3dom.nodeTypes.X3DSensorNode,function(ctx){x3dom.nodeTypes.TimeSensor.superClass.call(this,ctx);if(ctx) +ctx.doc._nodeBag.timer.push(this);else +x3dom.debug.logWarning("TimeSensor: No runtime context found!");this.addField_SFTime(ctx,'cycleInterval',1);this.addField_SFBool(ctx,'loop',false);this.addField_SFTime(ctx,'startTime',0);this.addField_SFTime(ctx,'stopTime',0);this.addField_SFTime(ctx,'pauseTime',0);this.addField_SFTime(ctx,'resumeTime',0);this.addField_SFTime(ctx,'cycleTime',0);this.addField_SFTime(ctx,'elapsedTime',0);this.addField_SFFloat(ctx,'fraction_changed',0);this.addField_SFBool(ctx,'isActive',false);this.addField_SFBool(ctx,'isPaused',false);this.addField_SFTime(ctx,'time',0);this.addField_SFBool(ctx,'first',true);this.addField_SFFloat(ctx,'firstCycle',0.0);this._prevCycle=-1;this._lastTime=0;this._cycleStopTime=0;this._activatedTime=0;if(this._vf.startTime>0){this._updateCycleStopTime();} +this._backupStartTime=this._vf.startTime;this._backupStopTime=this._vf.stopTime;this._backupCycleInterval=this._vf.cycleInterval;},{tick:function(time) +{if(!this._vf.enabled){this._lastTime=time;return false;} +var isActive=(this._vf.cycleInterval>0&&time>=this._vf.startTime&&(time<this._vf.stopTime||this._vf.stopTime<=this._vf.startTime)&&(this._vf.loop==true||(this._vf.loop==false&&time<this._cycleStopTime)));if(isActive&&!this._vf.isActive){this.postMessage('isActive',true);this._activatedTime=time;} +if(isActive||this._vf.isActive){this.postMessage('elapsedTime',time-this._activatedTime);var isPaused=(time>=this._vf.pauseTime&&this._vf.pauseTime>this._vf.resumeTime);if(isPaused&&!this._vf.isPaused){this.postMessage('isPaused',true);this.postMessage('pauseTime',time);}else if(!isPaused&&this._vf.isPaused){this.postMessage('isPaused',false);this.postMessage('resumeTime',time);} +if(!isPaused){var cycleFrac=this._getCycleAt(time);var cycle=Math.floor(cycleFrac);var cycleTime=this._vf.startTime+cycle*this._vf.cycleInterval;var adjustTime=0;if(this._vf.stopTime>this._vf.startTime&&this._lastTime<this._vf.stopTime&&time>=this._vf.stopTime) +adjustTime=this._vf.stopTime;else if(this._lastTime<cycleTime&&time>=cycleTime) +adjustTime=cycleTime;if(adjustTime>0){time=adjustTime;cycleFrac=this._getCycleAt(time);cycle=Math.floor(cycleFrac);} +var fraction=cycleFrac-cycle;if(fraction<x3dom.fields.Eps){fraction=(this._lastTime<this._vf.startTime?0.0:1.0);this.postMessage('cycleTime',time);} +this.postMessage('fraction_changed',fraction);this.postMessage('time',time);}} +if(!isActive&&this._vf.isActive) +this.postMessage('isActive',false);this._lastTime=time;return true;},fieldChanged:function(fieldName) +{if(fieldName=="enabled"){if(!this._vf.enabled&&this._vf.isActive){this.postMessage('isActive',false);}} +else if(fieldName=="startTime"){if(this._vf.isActive){this._vf.startTime=this._backupStartTime;return;} +this._backupStartTime=this._vf.startTime;this._updateCycleStopTime();} +else if(fieldName=="stopTime"){if(this._vf.isActive&&this._vf.stopTime<=this._vf.startTime){this._vf.stopTime=this._backupStopTime;return;} +this._backupStopTime=this._vf.stopTime;} +else if(fieldName=="cycleInterval"){if(this._vf.isActive){this._vf.cycleInterval=this._backupCycleInterval;return;} +this._backupCycleInterval=this._vf.cycleInterval;} +else if(fieldName=="loop"){this._updateCycleStopTime();}},parentRemoved:function(parent) +{if(this._parentNodes.length===0){var doc=this.findX3DDoc();for(var i=0,n=doc._nodeBag.timer.length;i<n;i++){if(doc._nodeBag.timer[i]===this){doc._nodeBag.timer.splice(i,1);}}}},_getCycleAt:function(time) +{return Math.max(0.0,time-this._vf.startTime)/this._vf.cycleInterval;},_updateCycleStopTime:function() +{if(this._vf.loop==false){var now=new Date().getTime()/1000;var cycleToStop=Math.floor(this._getCycleAt(now))+1;this._cycleStopTime=this._vf.startTime+cycleToStop*this._vf.cycleInterval;} +else{this._cycleStopTime=0;}}}));x3dom.registerNodeType("X3DTimeDependentNode","Time",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DTimeDependentNode.superClass.call(this,ctx);this.addField_SFBool(ctx,'loop',false);}));x3dom.registerNodeType("Anchor","Networking",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Anchor.superClass.call(this,ctx);this.addField_MFString(ctx,'url',[]);this.addField_MFString(ctx,'parameter',[]);this.addField_SFString(ctx,'description',"");},{doIntersect:function(line){var isect=false;for(var i=0;i<this._childNodes.length;i++){if(this._childNodes[i]){isect=this._childNodes[i].doIntersect(line)||isect;}} +return isect;},handleTouch:function(){var url=this._vf.url.length?this._vf.url[0]:"";var aPos=url.search("#");var anchor="";if(aPos>=0) +anchor=url.slice(aPos+1);var param=this._vf.parameter.length?this._vf.parameter[0]:"";var tPos=param.search("target=");var target="";if(tPos>=0) +target=param.slice(tPos+7);x3dom.debug.logInfo("Anchor url="+url+", target="+target+", #viewpoint="+anchor);if(target.length==0||target=="_blank"){window.open(this._nameSpace.getURL(url),target);} +else{window.location=this._nameSpace.getURL(url);}}}));x3dom.registerNodeType("Inline","Networking",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Inline.superClass.call(this,ctx);this.addField_MFString(ctx,'url',[]);this.addField_SFBool(ctx,'load',true);this.addField_MFString(ctx,'nameSpaceName',[]);this.addField_SFBool(ctx,'mapDEFToID',false);this.initDone=false;this.count=0;this.numRetries=x3dom.nodeTypes.Inline.MaximumRetries;},{fieldChanged:function(fieldName) +{if(fieldName=="url"){if(this._vf.nameSpaceName.length!=0){var node=this._xmlNode;if(node&&node.hasChildNodes()) +{while(node.childNodes.length>=1) +{node.removeChild(node.firstChild);}}} +this.loadInline();} +else if(fieldName=="render"){this.invalidateVolume();}},nodeChanged:function() +{if(!this.initDone){this.initDone=true;this.loadInline();}},fireEvents:function(eventType) +{if(this._xmlNode&&(this._xmlNode['on'+eventType]||this._xmlNode.hasAttribute('on'+eventType)||this._listeners[eventType])) +{var event={target:this._xmlNode,type:eventType,error:(eventType=="error")?"XMLHttpRequest Error":"",cancelBubble:false,stopPropagation:function(){this.cancelBubble=true;}};try{var attrib=this._xmlNode["on"+eventType];if(typeof(attrib)==="function"){attrib.call(this._xmlNode,event);} +else{var funcStr=this._xmlNode.getAttribute("on"+eventType);var func=new Function('event',funcStr);func.call(this._xmlNode,event);} +var list=this._listeners[eventType];if(list){for(var i=0;i<list.length;i++){list[i].call(this._xmlNode,event);}}} +catch(ex){x3dom.debug.logException(ex);}}},loadInline:function() +{var that=this;var xhr=new window.XMLHttpRequest();if(xhr.overrideMimeType) +xhr.overrideMimeType('text/xml');xhr.onreadystatechange=function() +{if(xhr.readyState!=4){return xhr;} +if(xhr.status===x3dom.nodeTypes.Inline.AwaitTranscoding&&that.count<that.numRetries){that.count++;var refreshTime=+xhr.getResponseHeader("Refresh")||5;x3dom.debug.logInfo('Statuscode '+xhr.status+' and send new request in '+refreshTime+' sec.');window.setTimeout(function(){that._nameSpace.doc.downloadCount-=1;that.loadInline();},refreshTime*1000);return xhr;} +else if((xhr.status!==200)&&(xhr.status!==0)){that.fireEvents("error");x3dom.debug.logError('XHR status: '+xhr.status+' - XMLHttpRequest requires web server running!');that._nameSpace.doc.downloadCount-=1;that.count=0;return xhr;} +else if((xhr.status==200)||(xhr.status==0)){that.count=0;} +x3dom.debug.logInfo('Inline: downloading '+that._vf.url[0]+' done.');var inlScene=null,newScene=null,nameSpace=null,xml=null;if(navigator.appName!="Microsoft Internet Explorer") +xml=xhr.responseXML;else +xml=new DOMParser().parseFromString(xhr.responseText,"text/xml");if(xml!==undefined&&xml!==null) +{inlScene=xml.getElementsByTagName('Scene')[0]||xml.getElementsByTagName('scene')[0];} +else{that.fireEvents("error");} +if(inlScene) +{var nsName=(that._vf.nameSpaceName.length!=0)?that._vf.nameSpaceName.toString().replace(' ',''):"";nameSpace=new x3dom.NodeNameSpace(nsName,that._nameSpace.doc);var url=that._vf.url.length?that._vf.url[0]:"";if((url[0]==='/')||(url.indexOf(":")>=0)) +nameSpace.setBaseURL(url);else +nameSpace.setBaseURL(that._nameSpace.baseURL+url);newScene=nameSpace.setupTree(inlScene);that._nameSpace.addSpace(nameSpace);if(that._vf.nameSpaceName.length!=0) +{Array.forEach(inlScene.childNodes,function(childDomNode) +{if(childDomNode instanceof Element) +{setNamespace(that._vf.nameSpaceName,childDomNode,that._vf.mapDEFToID);that._xmlNode.appendChild(childDomNode);}});}} +else{if(xml&&xml.localName) +x3dom.debug.logError('No Scene in '+xml.localName);else +x3dom.debug.logError('No Scene in resource');} +var global=x3dom.getGlobal();if(that._childNodes.length>0&&that._childNodes[0]&&that._childNodes[0]._nameSpace) +that._nameSpace.removeSpace(that._childNodes[0]._nameSpace);while(that._childNodes.length!==0) +global['_remover']=that.removeChild(that._childNodes[0]);delete global['_remover'];if(newScene) +{that.addChild(newScene);that.invalidateVolume();that._nameSpace.doc.downloadCount-=1;that._nameSpace.doc.needRender=true;x3dom.debug.logInfo('Inline: added '+that._vf.url[0]+' to scene.');var theScene=that._nameSpace.doc._scene;if(theScene){theScene.invalidateVolume();window.setTimeout(function(){that.invalidateVolume();theScene.updateVolume();that._nameSpace.doc.needRender=true;},1000);} +that.fireEvents("load");} +newScene=null;nameSpace=null;inlScene=null;xml=null;return xhr;};if(this._vf.url.length&&this._vf.url[0].length) +{var xhrURI=this._nameSpace.getURL(this._vf.url[0]);if(!(xhrURI.substr(0,5)==="blob:")) +{xhrURI=encodeURI(xhrURI);} +xhr.open('GET',xhrURI,true);this._nameSpace.doc.downloadCount+=1;try{xhr.send(null);} +catch(ex){this.fireEvents("error");x3dom.debug.logError(this._vf.url[0]+": "+ex);}}}}));x3dom.nodeTypes.Inline.AwaitTranscoding=202;x3dom.nodeTypes.Inline.MaximumRetries=15;function setNamespace(prefix,childDomNode,mapDEFToID) +{if(childDomNode instanceof Element&&childDomNode.__setAttribute!==undefined){if(childDomNode.hasAttribute('id')){childDomNode.__setAttribute('id',prefix.toString().replace(' ','')+'__'+childDomNode.getAttribute('id'));}else if(childDomNode.hasAttribute('DEF')&&mapDEFToID){childDomNode.__setAttribute('id',prefix.toString().replace(' ','')+'__'+childDomNode.getAttribute('DEF'));if(!childDomNode.id) +childDomNode.id=childDomNode.__getAttribute('id');}} +if(childDomNode.hasChildNodes()){Array.forEach(childDomNode.childNodes,function(children){setNamespace(prefix,children,mapDEFToID);});}} +x3dom.registerNodeType("MultiPart","Networking",defineClass(x3dom.nodeTypes.Inline,function(ctx){x3dom.nodeTypes.MultiPart.superClass.call(this,ctx);this.addField_MFString(ctx,'urlIDMap',[]);this._idMap=null;this._oldPixels=null;this._inlineNamespace=null;this._highlightedParts=[];},{fieldChanged:function(fieldName) +{if(fieldName=="url"){if(this._vf.nameSpaceName.length!=0){var node=this._xmlNode;if(node&&node.hasChildNodes()) +{while(node.childNodes.length>=1) +{node.removeChild(node.firstChild);}}} +this.loadInline();} +else if(fieldName=="render"){this.invalidateVolume();}},nodeChanged:function() +{if(!this.initDone){this.initDone=true;this.loadIDMap();this.appendAPI();this.appendEventListeners();}},appendEventListeners:function() +{var that=this;this._xmlNode._shadowObjectID=-1 +this._xmlNode.addEventListener("mousedown",function(e){if(!that._nameSpace.doc._viewarea._isMoving){e.partID=that._idMap.mapping[e.shadowObjectId].name;this.dispatchEvent(new CustomEvent("partclick",{detail:e}));}},false);this._xmlNode.addEventListener("mouseout",function(e){if(!that._nameSpace.doc._viewarea._isMoving){if(e.shadowObjectId==-1){e.partID=that._idMap.mapping[this._shadowObjectID].name;this._shadowObjectID=-1;var event=new CustomEvent("partout",{detail:e});this.dispatchEvent(event);}}},false);this._xmlNode.addEventListener("mousemove",function(e){if(!that._nameSpace.doc._viewarea._isMoving){e.partID=that._idMap.mapping[e.shadowObjectId].name +this.dispatchEvent(new CustomEvent("partmove",{detail:e}));if(e.shadowObjectId!=this._shadowObjectID){var tmp=e.shadowObjectId;if(this._shadowObjectID!=-1){e.partID=that._idMap.mapping[this._shadowObjectID].name;this.dispatchEvent(new CustomEvent("partout",{detail:e}));} +this._shadowObjectID=e.shadowObjectId=tmp;e.partID=that._idMap.mapping[e.shadowObjectId].name;this.dispatchEvent(new CustomEvent("partover",{detail:e}));}}},false);},loadIDMap:function() +{if(this._vf.urlIDMap.length&&this._vf.urlIDMap[0].length) +{var that=this;var idMapURI=this._nameSpace.getURL(this._vf.urlIDMap[0]);var xhr=new XMLHttpRequest();xhr.open("GET",idMapURI,true);xhr.onload=function() +{that._idMap=JSON.parse(this.responseText);that._nameSpace.doc._scene._shadowIdMap=eval("("+this.response+")");that.loadInline();};xhr.send(null);}},createImageData:function() +{var diffuseColor,transparency,rgba;var size=x3dom.Utils.nextHighestPowerOfTwo(Math.sqrt(this._idMap.numberOfIDs));var imageData=size+" "+size+" 4";for(var i=0;i<size*size;i++) +{if(i<this._idMap.mapping.length) +{var appName=this._idMap.mapping[i].appearance;for(var a=0;a<this._idMap.appearance.length;a++) +{if(this._idMap.appearance[a].name==appName) +{diffuseColor=this._idMap.appearance[a].material.diffuseColor;transparency=this._idMap.appearance[a].material.transparency;rgba=x3dom.fields.SFColorRGBA.parse(diffuseColor+" "+transparency);imageData+=" "+rgba.toUint();}}} +else +{imageData+=" 255";}} +return imageData;},createVisibilityData:function() +{var size=x3dom.Utils.nextHighestPowerOfTwo(Math.sqrt(this._idMap.numberOfIDs));var visibilityData=size+" "+size+" 1";for(var i=0;i<size*size;i++) +{if(i<this._idMap.mapping.length) +{visibilityData+=" 255";} +else +{visibilityData+=" 0";}} +return visibilityData;},replaceMaterials:function(inlScene) +{var css;var firstMat=true;if(inlScene&&inlScene.hasChildNodes()) +{var shapes=inlScene.getElementsByTagName("Shape");for(var s=0;s<shapes.length;s++) +{var appearances=shapes[s].getElementsByTagName("Appearance");if(appearances.length) +{for(var a=0;a<appearances.length;a++) +{var materials=appearances[a].getElementsByTagName("Material");if(materials.length) +{if(firstMat){firstMat=false;css=document.createElement("CommonSurfaceShader");css.setAttribute("DEF","MultiMaterial");var sstDA=document.createElement("SurfaceShaderTexture");sstDA.setAttribute("containerField","multiDiffuseAlphaTexture");var ptDA=document.createElement("PixelTexture");ptDA.setAttribute("id","MultiMaterial_ColorMap");ptDA.setAttribute("image",this.createImageData());var sstV=document.createElement("SurfaceShaderTexture");sstV.setAttribute("containerField","multiVisibilityTexture");var ptV=document.createElement("PixelTexture");ptV.setAttribute("id","MultiMaterial_VisibilityMap");ptV.setAttribute("image",this.createVisibilityData());sstDA.appendChild(ptDA);sstV.appendChild(ptV);css.appendChild(sstDA);css.appendChild(sstV);} +else +{css=document.createElement("CommonSurfaceShader");css.setAttribute("USE","MultiMaterial");} +materials[0].parentNode.replaceChild(css,materials[0]);} +else +{console.log("Add Material");}}} +else +{console.log("Add Appearance + Material");}}}},appendAPI:function() +{var multiPart=this;this._xmlNode.getParts=function(selector) +{var i,m;var selection=[] +if(selector==undefined||selector.length==0){for(m=0;m<multiPart._idMap.mapping.length;m++){selection.push(m);}} +else +{for(i=0;i<selector.length;i++){for(m=0;m<multiPart._idMap.mapping.length;m++){if(selector[i].id==multiPart._idMap.mapping[m].name||selector[i].app==multiPart._idMap.mapping[m].appearance){selection.push(m);}}}} +var Parts=function(ids,colorMap,visibilityMap) +{var parts=this;this.ids=ids;this.colorMap=colorMap;this.visibilityMap=visibilityMap;this.setColor=function(color){var i,x,y;var colorRGBA=x3dom.fields.SFColorRGBA.parse(color);if(ids.length&&ids.length>1) +{var pixels=parts.colorMap.getPixels();for(i=0;i<parts.ids.length;i++){if(multiPart._highlightedParts[parts.ids[i]]){multiPart._highlightedParts[parts.ids[i]]=colorRGBA;}else{pixels[parts.ids[i]]=colorRGBA;}} +parts.colorMap.setPixels(pixels);} +else +{if(multiPart._highlightedParts[parts.ids[0]]){multiPart._highlightedParts[parts.ids[0]]=colorRGBA;}else{x=parts.ids[0]%parts.colorMap.getWidth();y=Math.floor(parts.ids[0]/parts.colorMap.getHeight());parts.colorMap.setPixel(x,y,colorRGBA);}}};this.setTransparency=function(transparency){var i,x,y;if(ids.length&&ids.length>1) +{var pixels=parts.colorMap.getPixels();for(i=0;i<parts.ids.length;i++){if(multiPart._highlightedParts[parts.ids[i]]){multiPart._highlightedParts[parts.ids[i]].a=transparency;}else{pixels[parts.ids[i]].a=transparency;}} +parts.colorMap.setPixels(pixels);} +else +{if(multiPart._highlightedParts[parts.ids[0]]){multiPart._highlightedParts[parts.ids[0]].a=transparency;}else{x=parts.ids[0]%parts.colorMap.getWidth();y=Math.floor(parts.ids[0]/parts.colorMap.getHeight());var pixel=parts.colorMap.getPixel(x,y);pixel.a=transparency;parts.colorMap.setPixel(x,y,pixel);}}};this.setVisibility=function(visibility){var i,x,y;if(ids.length&&ids.length>1) +{var pixels=parts.visibilityMap.getPixels();for(i=0;i<parts.ids.length;i++){pixels[parts.ids[i]].r=(visibility)?1:0;} +parts.visibilityMap.setPixels(pixels);} +else +{x=parts.ids[0]%parts.colorMap.getWidth();y=Math.floor(parts.ids[0]/parts.colorMap.getHeight());var pixel=parts.visibilityMap.getPixel(x,y);pixel.r=(visibility)?1:0;parts.visibilityMap.setPixel(x,y,pixel);}};this.highlight=function(color){var i,x,y;var colorRGBA=x3dom.fields.SFColorRGBA.parse(color);if(ids.length&&ids.length>1) +{var pixels=parts.colorMap.getPixels();for(i=0;i<parts.ids.length;i++){if(multiPart._highlightedParts[parts.ids[i]]==undefined){multiPart._highlightedParts[parts.ids[i]]=pixels[parts.ids[i]] +pixels[parts.ids[i]]=colorRGBA;}} +parts.colorMap.setPixels(pixels);} +else +{if(multiPart._highlightedParts[parts.ids[0]]==undefined){x=parts.ids[0]%parts.colorMap.getWidth();y=Math.floor(parts.ids[0]/parts.colorMap.getHeight());multiPart._highlightedParts[parts.ids[0]]=parts.colorMap.getPixel(x,y);parts.colorMap.setPixel(x,y,colorRGBA);}}};this.unhighlight=function(){var i,x,y;if(ids.length&&ids.length>1) +{var pixels=parts.colorMap.getPixels();for(i=0;i<parts.ids.length;i++){if(multiPart._highlightedParts[parts.ids[i]]){pixels[parts.ids[i]]=multiPart._highlightedParts[parts.ids[i]];multiPart._highlightedParts[parts.ids[i]]=undefined;}} +parts.colorMap.setPixels(pixels);} +else +{if(multiPart._highlightedParts[parts.ids[0]]){x=parts.ids[0]%parts.colorMap.getWidth();y=Math.floor(parts.ids[0]/parts.colorMap.getHeight());var pixel=multiPart._highlightedParts[parts.ids[0]];multiPart._highlightedParts[parts.ids[0]]=undefined;parts.colorMap.setPixel(x,y,pixel);}}};};var colorMap=multiPart._inlineNamespace.defMap["MultiMaterial_ColorMap"];var visibilityMap=multiPart._inlineNamespace.defMap["MultiMaterial_VisibilityMap"];return new Parts(selection,colorMap,visibilityMap);}},loadInline:function() +{var that=this;var xhr=new window.XMLHttpRequest();if(xhr.overrideMimeType) +xhr.overrideMimeType('text/xml');xhr.onreadystatechange=function() +{if(xhr.readyState!=4){return xhr;} +if(xhr.status===x3dom.nodeTypes.Inline.AwaitTranscoding&&that.count<that.numRetries){that.count++;var refreshTime=+xhr.getResponseHeader("Refresh")||5;x3dom.debug.logInfo('Statuscode '+xhr.status+' and send new request in '+refreshTime+' sec.');window.setTimeout(function(){that._nameSpace.doc.downloadCount-=1;that.loadInline();},refreshTime*1000);return xhr;} +else if((xhr.status!==200)&&(xhr.status!==0)){that.fireEvents("error");x3dom.debug.logError('XHR status: '+xhr.status+' - XMLHttpRequest requires web server running!');that._nameSpace.doc.downloadCount-=1;that.count=0;return xhr;} +else if((xhr.status==200)||(xhr.status==0)){that.count=0;} +x3dom.debug.logInfo('Inline: downloading '+that._vf.url[0]+' done.');var inlScene=null,newScene=null,nameSpace=null,xml=null;if(navigator.appName!="Microsoft Internet Explorer") +xml=xhr.responseXML;else +xml=new DOMParser().parseFromString(xhr.responseText,"text/xml");if(xml!==undefined&&xml!==null) +{inlScene=xml.getElementsByTagName('Scene')[0]||xml.getElementsByTagName('scene')[0];} +else{that.fireEvents("error");} +if(inlScene) +{var nsName=(that._vf.nameSpaceName.length!=0)?that._vf.nameSpaceName.toString().replace(' ',''):"";that._inlineNamespace=new x3dom.NodeNameSpace(nsName,that._nameSpace.doc);var url=that._vf.url.length?that._vf.url[0]:"";if((url[0]==='/')||(url.indexOf(":")>=0)) +{that._inlineNamespace.setBaseURL(url);} +else +{that._inlineNamespace.setBaseURL(that._nameSpace.baseURL+url);} +that.replaceMaterials(inlScene);newScene=that._inlineNamespace.setupTree(inlScene);that._nameSpace.addSpace(that._inlineNamespace);if(that._vf.nameSpaceName.length!=0) +{Array.forEach(inlScene.childNodes,function(childDomNode) +{if(childDomNode instanceof Element) +{setNamespace(that._vf.nameSpaceName,childDomNode,that._vf.mapDEFToID);that._xmlNode.appendChild(childDomNode);}});}} +else{if(xml&&xml.localName){x3dom.debug.logError('No Scene in '+xml.localName);}else{x3dom.debug.logError('No Scene in resource');}} +var global=x3dom.getGlobal();if(that._childNodes.length>0&&that._childNodes[0]&&that._childNodes[0]._nameSpace){that._nameSpace.removeSpace(that._childNodes[0]._nameSpace);} +while(that._childNodes.length!==0){global['_remover']=that.removeChild(that._childNodes[0]);} +delete global['_remover'];if(newScene) +{that.addChild(newScene);that.invalidateVolume();that._nameSpace.doc.downloadCount-=1;that._nameSpace.doc.needRender=true;x3dom.debug.logInfo('Inline: added '+that._vf.url[0]+' to scene.');var theScene=that._nameSpace.doc._scene;if(theScene){theScene.invalidateVolume();window.setTimeout(function(){that.invalidateVolume();theScene.updateVolume();that._nameSpace.doc.needRender=true;},1000);} +that.fireEvents("load");} +newScene=null;inlScene=null;xml=null;return xhr;};if(this._vf.url.length&&this._vf.url[0].length) +{var xhrURI=this._nameSpace.getURL(this._vf.url[0]);if(!(xhrURI.substr(0,5)==="blob:")) +{xhrURI=encodeURI(xhrURI);} +xhr.open('GET',xhrURI,true);this._nameSpace.doc.downloadCount+=1;try{xhr.send(null);} +catch(ex){this.fireEvents("error");x3dom.debug.logError(this._vf.url[0]+": "+ex);}}}}));x3dom.registerNodeType("X3DBackgroundNode","EnvironmentalEffects",defineClass(x3dom.nodeTypes.X3DBindableNode,function(ctx){x3dom.nodeTypes.X3DBackgroundNode.superClass.call(this,ctx);var trans=(ctx&&ctx.autoGen)?1:0;this.addField_SFBool(ctx,'withCredentials',false);this.addField_MFColor(ctx,'groundColor',[]);this.addField_MFFloat(ctx,'groundAngle',[]);this.addField_MFColor(ctx,'skyColor',[new x3dom.fields.SFColor(0,0,0)]);this.addField_MFFloat(ctx,'skyAngle',[]);this.addField_SFFloat(ctx,'transparency',trans);this._dirty=true;},{getSkyColor:function(){return new x3dom.fields.SFColor(0,0,0);},getTransparency:function(){return 0;},getTexUrl:function(){return[];}}));x3dom.registerNodeType("X3DFogNode","EnvironmentalEffects",defineClass(x3dom.nodeTypes.X3DBindableNode,function(ctx){x3dom.nodeTypes.X3DFogNode.superClass.call(this,ctx);this.addField_SFColor(ctx,'color',1,1,1);this.addField_SFString(ctx,'fogType',"LINEAR");this.addField_SFFloat(ctx,'visibilityRange',0);},{}));x3dom.registerNodeType("Fog","EnvironmentalEffects",defineClass(x3dom.nodeTypes.X3DFogNode,function(ctx){x3dom.nodeTypes.Fog.superClass.call(this,ctx);},{}));x3dom.registerNodeType("Background","EnvironmentalEffects",defineClass(x3dom.nodeTypes.X3DBackgroundNode,function(ctx){x3dom.nodeTypes.Background.superClass.call(this,ctx);this.addField_MFString(ctx,'backUrl',[]);this.addField_MFString(ctx,'bottomUrl',[]);this.addField_MFString(ctx,'frontUrl',[]);this.addField_MFString(ctx,'leftUrl',[]);this.addField_MFString(ctx,'rightUrl',[]);this.addField_MFString(ctx,'topUrl',[]);},{fieldChanged:function(fieldName) +{if(fieldName.indexOf("Url")>0||fieldName=="transparency"||fieldName.search("sky")>=0||fieldName.search("ground")>=0){this._dirty=true;} +else if(fieldName.indexOf("bind")>=0){this.bind(this._vf.bind);}},getSkyColor:function(){return this._vf.skyColor;},getGroundColor:function(){return this._vf.groundColor;},getTransparency:function(){return this._vf.transparency;},getTexUrl:function(){return[this._nameSpace.getURL(this._vf.backUrl[0]),this._nameSpace.getURL(this._vf.frontUrl[0]),this._nameSpace.getURL(this._vf.bottomUrl[0]),this._nameSpace.getURL(this._vf.topUrl[0]),this._nameSpace.getURL(this._vf.leftUrl[0]),this._nameSpace.getURL(this._vf.rightUrl[0])];}}));x3dom.registerNodeType("X3DEnvironmentNode","EnvironmentalEffects",defineClass(x3dom.nodeTypes.X3DBindableNode,function(ctx){x3dom.nodeTypes.X3DEnvironmentNode.superClass.call(this,ctx);}));x3dom.registerNodeType("Environment","EnvironmentalEffects",defineClass(x3dom.nodeTypes.X3DEnvironmentNode,function(ctx){x3dom.nodeTypes.Environment.superClass.call(this,ctx);this.addField_SFBool(ctx,'sortTrans',true);this.addField_SFBool(ctx,'shadowExcludeTransparentObjects',false);this.addField_SFString(ctx,'gammaCorrectionDefault',"linear");this.addField_SFBool(ctx,'frustumCulling',true);this.addField_SFBool(ctx,'smallFeatureCulling',false);this.addField_SFFloat(ctx,'smallFeatureThreshold',1.0);this.addField_SFBool(ctx,'occlusionCulling',false);this.addField_SFFloat(ctx,'occlusionVisibilityThreshold',0.0);this.addField_SFBool(ctx,'lowPriorityCulling',false);this.addField_SFFloat(ctx,'lowPriorityThreshold',1.0);this.addField_SFBool(ctx,'tessellationDetailCulling',false);this.addField_SFFloat(ctx,'tessellationErrorThreshold',0.0);this.addField_SFBool(ctx,'enableARC',false);this.addField_SFFloat(ctx,'minFrameRate',1.0);this.addField_SFFloat(ctx,'maxFrameRate',62.5);this.addField_SFFloat(ctx,'userDataFactor',-1);this.addField_SFFloat(ctx,'smallFeatureFactor',-1);this.addField_SFFloat(ctx,'occlusionVisibilityFactor',-1);this.addField_SFFloat(ctx,'lowPriorityFactor',-1);this.addField_SFFloat(ctx,'tessellationErrorFactor',-1);this._validGammaCorrectionTypes=["none","fastlinear","linear"];this.checkSanity();},{checkSanity:function() +{var checkParam=function(flag,value,defaultOn,defaultOff) +{if(flag&&(value==defaultOff)) +return defaultOn;if(!flag&&(value!=defaultOff)) +return defaultOff;return value;};this._smallFeatureThreshold=checkParam(this._vf.smallFeatureCulling,this._vf.smallFeatureThreshold,10,0);this._lowPriorityThreshold=checkParam(this._vf.lowPriorityCulling,this._vf.lowPriorityThreshold,0.5,1);this._occlusionVisibilityThreshold=checkParam(this._vf.occlusionCulling,this._vf.occlusionVisibilityThreshold,1,0);this._tessellationErrorThreshold=checkParam(this._vf.tessellationDetailCulling,this._vf.tessellationErrorThreshold,1,0);var checkGamma=function(field,that){field=field.toLowerCase();if(that._validGammaCorrectionTypes.indexOf(field)>-1){return field;} +else{x3dom.debug.logWarning(field+" gammaCorrectionDefault may only be linear (default), fastLinear, or none");return that._validGammaCorrectionTypes[0];}};this._vf.gammaCorrectionDefault=checkGamma(this._vf.gammaCorrectionDefault,this);}}));x3dom.registerNodeType("X3DViewpointNode","Navigation",defineClass(x3dom.nodeTypes.X3DBindableNode,function(ctx){x3dom.nodeTypes.X3DViewpointNode.superClass.call(this,ctx);if(ctx&&ctx.xmlNode){var domNode=ctx.xmlNode;if(!domNode.resetView&&!domNode.getFieldOfView&&!domNode.getNear&&!domNode.getFar) +{domNode.resetView=function(){var that=this._x3domNode;that.resetView();that._nameSpace.doc.needRender=true;};domNode.getFieldOfView=function(){return this._x3domNode.getFieldOfView();};domNode.getNear=function(){return this._x3domNode.getNear();};domNode.getFar=function(){return this._x3domNode.getFar();};}}},{activate:function(prev){var viewarea=this._nameSpace.doc._viewarea;if(prev){viewarea.animateTo(this,prev._autoGen?null:prev);} +viewarea._needNavigationMatrixUpdate=true;x3dom.nodeTypes.X3DBindableNode.prototype.activate.call(this,prev);},deactivate:function(prev){x3dom.nodeTypes.X3DBindableNode.prototype.deactivate.call(this,prev);},getTransformation:function(){return this.getCurrentTransform();},getCenterOfRotation:function(){return new x3dom.fields.SFVec3f(0,0,0);},setCenterOfRotation:function(cor){this._vf.centerOfRotation.setValues(cor);},getFieldOfView:function(){return 1.57079633;},setView:function(newView){var mat=this.getCurrentTransform();this._viewMatrix=newView.mult(mat);},setViewAbsolute:function(newView) +{this._viewMatrix=newView},setProjectionMatrix:function(matrix) +{},resetView:function(){},getNear:function(){return 0.1;},getFar:function(){return 10000;},getImgPlaneHeightAtDistOne:function(){return 2.0;},getViewMatrix:function(){return null;},getProjectionMatrix:function(aspect){return null;}}));x3dom.registerNodeType("Viewpoint","Navigation",defineClass(x3dom.nodeTypes.X3DViewpointNode,function(ctx){x3dom.nodeTypes.Viewpoint.superClass.call(this,ctx);this.addField_SFFloat(ctx,'fieldOfView',0.785398);this.addField_SFVec3f(ctx,'position',0,0,10);this.addField_SFRotation(ctx,'orientation',0,0,0,1);this.addField_SFVec3f(ctx,'centerOfRotation',0,0,0);this.addField_SFFloat(ctx,'zNear',-1);this.addField_SFFloat(ctx,'zFar',-1);this._viewMatrix=x3dom.fields.SFMatrix4f.translation(this._vf.position).mult(this._vf.orientation.toMatrix()).inverse();this._projMatrix=null;this._lastAspect=1.0;this._zRatio=10000;this._zNear=this._vf.zNear;this._zFar=this._vf.zFar;this._imgPlaneHeightAtDistOne=2.0*Math.tan(this._vf.fieldOfView/2.0);},{fieldChanged:function(fieldName){if(fieldName=="position"||fieldName=="orientation"){this.resetView();} +else if(fieldName=="fieldOfView"||fieldName=="zNear"||fieldName=="zFar"){this._projMatrix=null;this._zNear=this._vf.zNear;this._zFar=this._vf.zFar;this._imgPlaneHeightAtDistOne=2.0*Math.tan(this._vf.fieldOfView/2.0);} +else if(fieldName.indexOf("bind")>=0){this.bind(this._vf.bind);}},setProjectionMatrix:function(matrix) +{this._projMatrix=matrix;},getCenterOfRotation:function(){return this._vf.centerOfRotation;},getViewMatrix:function(){return this._viewMatrix;},getFieldOfView:function(){return this._vf.fieldOfView;},resetView:function(){this._viewMatrix=x3dom.fields.SFMatrix4f.translation(this._vf.position).mult(this._vf.orientation.toMatrix()).inverse();},getNear:function(){return this._zNear;},getFar:function(){return this._zFar;},getImgPlaneHeightAtDistOne:function(){return this._imgPlaneHeightAtDistOne;},getProjectionMatrix:function(aspect) +{var fovy=this._vf.fieldOfView;var zfar=this._vf.zFar;var znear=this._vf.zNear;if(znear<=0||zfar<=0) +{var nearScale=0.8,farScale=1.2;var viewarea=this._nameSpace.doc._viewarea;var scene=viewarea._scene;var min=x3dom.fields.SFVec3f.copy(scene._lastMin);var max=x3dom.fields.SFVec3f.copy(scene._lastMax);var dia=max.subtract(min);var sRad=dia.length()/2;var mat=viewarea.getViewMatrix().inverse();var vp=mat.e3();var translation=new x3dom.fields.SFVec3f(0,0,0),scaleFactor=new x3dom.fields.SFVec3f(1,1,1);var rotation=new x3dom.fields.Quaternion(0,0,1,0),scaleOrientation=new x3dom.fields.Quaternion(0,0,1,0);mat.getTransform(translation,rotation,scaleFactor,scaleOrientation);var minScal=scaleFactor.x,maxScal=scaleFactor.x;if(maxScal<scaleFactor.y)maxScal=scaleFactor.y;if(minScal>scaleFactor.y)minScal=scaleFactor.y;if(maxScal<scaleFactor.z)maxScal=scaleFactor.z;if(minScal>scaleFactor.z)minScal=scaleFactor.z;if(maxScal>1) +nearScale/=maxScal;else if(minScal>x3dom.fields.Eps&&minScal<1) +farScale/=minScal;var sCenter=min.add(dia.multiply(0.5));var vDist=(vp.subtract(sCenter)).length();if(sRad){if(vDist>sRad) +znear=(vDist-sRad)*nearScale;else +znear=0;zfar=(vDist+sRad)*farScale;} +else{znear=0.1;zfar=100000;} +var zNearLimit=zfar/this._zRatio;znear=Math.max(znear,Math.max(x3dom.fields.Eps,zNearLimit));if(zfar>this._vf.zNear&&this._vf.zNear>0) +znear=this._vf.zNear;if(this._vf.zFar>znear) +zfar=this._vf.zFar;if(zfar<=znear) +zfar=znear+1;} +if(this._projMatrix==null) +{this._projMatrix=x3dom.fields.SFMatrix4f.perspective(fovy,aspect,znear,zfar);} +else if(this._zNear!=znear||this._zFar!=zfar) +{var div=znear-zfar;this._projMatrix._22=(znear+zfar)/div;this._projMatrix._23=2*znear*zfar/div;} +else if(this._lastAspect!=aspect) +{this._projMatrix._00=(1/Math.tan(fovy/2))/aspect;this._lastAspect=aspect;} +this._zNear=znear;this._zFar=zfar;return this._projMatrix;}}));x3dom.registerNodeType("OrthoViewpoint","Navigation",defineClass(x3dom.nodeTypes.X3DViewpointNode,function(ctx){x3dom.nodeTypes.OrthoViewpoint.superClass.call(this,ctx);this.addField_MFFloat(ctx,'fieldOfView',[-1,-1,1,1]);this.addField_SFVec3f(ctx,'position',0,0,10);this.addField_SFRotation(ctx,'orientation',0,0,0,1);this.addField_SFVec3f(ctx,'centerOfRotation',0,0,0);this.addField_SFFloat(ctx,'zNear',0.1);this.addField_SFFloat(ctx,'zFar',10000);this._viewMatrix=null;this._projMatrix=null;this._lastAspect=1.0;this.resetView();},{fieldChanged:function(fieldName){if(fieldName=="position"||fieldName=="orientation"){this.resetView();} +else if(fieldName=="fieldOfView"||fieldName=="zNear"||fieldName=="zFar"){this._projMatrix=null;this.resetView();} +else if(fieldName.indexOf("bind")>=0){this.bind(this._vf.bind);}},getCenterOfRotation:function(){return this._vf.centerOfRotation;},getViewMatrix:function(){return this._viewMatrix;},resetView:function(){var offset=x3dom.fields.SFMatrix4f.translation(new x3dom.fields.SFVec3f((this._vf.fieldOfView[0]+this._vf.fieldOfView[2])/2,(this._vf.fieldOfView[1]+this._vf.fieldOfView[3])/2,0));this._viewMatrix=x3dom.fields.SFMatrix4f.translation(this._vf.position).mult(this._vf.orientation.toMatrix());this._viewMatrix=this._viewMatrix.mult(offset).inverse();},getNear:function(){return this._vf.zNear;},getFar:function(){return this._vf.zFar;},getProjectionMatrix:function(aspect) +{if(this._projMatrix==null||this._lastAspect!=aspect) +{var near=this.getNear();var far=this.getFar();var left=this._vf.fieldOfView[0];var bottom=this._vf.fieldOfView[1];var right=this._vf.fieldOfView[2];var top=this._vf.fieldOfView[3];this._projMatrix=x3dom.fields.SFMatrix4f.ortho(left,right,bottom,top,near,far,aspect);} +this._lastAspect=aspect;return this._projMatrix;}}));x3dom.registerNodeType("Viewfrustum","Navigation",defineClass(x3dom.nodeTypes.X3DViewpointNode,function(ctx){x3dom.nodeTypes.Viewfrustum.superClass.call(this,ctx);this.addField_SFMatrix4f(ctx,'modelview',1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);this.addField_SFMatrix4f(ctx,'projection',1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);this._viewMatrix=this._vf.modelview.transpose().inverse();this._projMatrix=this._vf.projection.transpose();this._centerOfRotation=new x3dom.fields.SFVec3f(0,0,0);},{fieldChanged:function(fieldName){if(fieldName=="modelview"){this.resetView();} +else if(fieldName=="projection"){this._projMatrix=this._vf.projection.transpose();} +else if(fieldName.indexOf("bind")>=0){this.bind(this._vf.bind);}},getCenterOfRotation:function(){return this._centerOfRotation;},setCenterOfRotation:function(cor){this._centerOfRotation.setValues(cor);},getViewMatrix:function(){return this._viewMatrix;},getFieldOfView:function(){return(2.0*Math.atan(1.0/this._projMatrix._11));},getImgPlaneHeightAtDistOne:function(){return 2.0/this._projMatrix._11;},resetView:function(){this._viewMatrix=this._vf.modelview.transpose().inverse();this._centerOfRotation=new x3dom.fields.SFVec3f(0,0,0);},getProjectionMatrix:function(aspect){return this._projMatrix;}}));x3dom.registerNodeType("X3DNavigationInfoNode","Navigation",defineClass(x3dom.nodeTypes.X3DBindableNode,function(ctx){x3dom.nodeTypes.X3DNavigationInfoNode.superClass.call(this,ctx);}));x3dom.registerNodeType("NavigationInfo","Navigation",defineClass(x3dom.nodeTypes.X3DNavigationInfoNode,function(ctx){x3dom.nodeTypes.NavigationInfo.superClass.call(this,ctx);this.addField_SFBool(ctx,'headlight',true);this.addField_MFString(ctx,'type',["EXAMINE","ANY"]);this.addField_MFFloat(ctx,'typeParams',[-0.4,60,0.05,2.8]);this.addField_SFString(ctx,'explorationMode','all');this.addField_MFFloat(ctx,'avatarSize',[0.25,1.6,0.75]);this.addField_SFFloat(ctx,'visibilityLimit',0.0);this.addField_SFFloat(ctx,'speed',1.0);this.addField_SFTime(ctx,'transitionTime',1.0);this.addField_MFString(ctx,'transitionType',["LINEAR"]);this._validTypes=["none","examine","turntable","fly","freefly","lookat","lookaround","walk","game","helicopter","any"];this._heliUpdated=false;var type=this.checkType(this.getType());x3dom.debug.logInfo("NavType: "+type);},{fieldChanged:function(fieldName){if(fieldName=="typeParams"){this._heliUpdated=false;} +else if(fieldName=="type"){var type=this.checkType(this.getType());switch(type){case'game':this._nameSpace.doc._viewarea.initMouseState();break;case'helicopter':this._heliUpdated=false;break;case"turntable":this._nameSpace.doc._viewarea.initMouseState();this._nameSpace.doc._viewarea.initTurnTable(this);break;default:break;} +this._vf.type[0]=type;x3dom.debug.logInfo("Switch to "+type+" mode.");}},setType:function(type,viewarea){var navType=this.checkType(type.toLowerCase());var oldType=this.checkType(this.getType());switch(navType){case'game':if(oldType!==navType){if(viewarea) +viewarea.initMouseState();else +this._nameSpace.doc._viewarea.initMouseState();} +break;case'helicopter':if(oldType!==navType){this._heliUpdated=false;} +break;case"turntable":if(oldType!==navType){if(viewarea){viewarea.initMouseState();viewarea.initTurnTable(this);} +else{this._nameSpace.doc._viewarea.initMouseState();this._nameSpace.doc._viewarea.initTurnTable(this);}} +break;default:break;} +this._vf.type[0]=navType;x3dom.debug.logInfo("Switch to "+navType+" mode.");},getType:function(){var type=this._vf.type[0].toLowerCase();if(type.length<=1) +type="none";else if(type=="any") +type="examine";return type;},getTypeParams:function(){var length=this._vf.typeParams.length;var theta=(length>=1)?this._vf.typeParams[0]:-0.4;var height=(length>=2)?this._vf.typeParams[1]:60.0;var minAngle=(length>=3)?this._vf.typeParams[2]:x3dom.fields.Eps;var maxAngle=(length>=4)?this._vf.typeParams[3]:Math.PI-x3dom.fields.Eps;var params=[theta,height,minAngle,maxAngle];if(length>=5) +{params.push(this._vf.typeParams[4]);} +return params;},setTypeParams:function(params){for(var i=0;i<params.length;i++){this._vf.typeParams[i]=params[i];}},checkType:function(type){if(this._validTypes.indexOf(type)>-1){return type;} +else{x3dom.debug.logWarning(type+" is no valid navigation type, use one of "+ +this._validTypes.toString());return"examine";}},getExplorationMode:function(){switch(this._vf.explorationMode.toLowerCase()){case"all":return 7;case"rotate":return 1;case"zoom":return 2;case"pan":return 4;case"none":return 0;default:return 7;}}}));x3dom.registerNodeType("Billboard","Navigation",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Billboard.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'axisOfRotation',0,1,0);this._eye=new x3dom.fields.SFVec3f(0,0,0);this._eyeViewUp=new x3dom.fields.SFVec3f(0,0,0);this._eyeLook=new x3dom.fields.SFVec3f(0,0,0);},{collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();planeMask=drawableCollection.cull(transform,this.graphState(),singlePath,planeMask);if(planeMask<=0){return;} +singlePath=false;var vol=this.getVolume();var min=x3dom.fields.SFVec3f.MAX();var max=x3dom.fields.SFVec3f.MIN();vol.getBounds(min,max);var mat_view=drawableCollection.viewMatrix;var center=new x3dom.fields.SFVec3f(0,0,0);center=mat_view.inverse().multMatrixPnt(center);var mat_view_model=mat_view.mult(transform);this._eye=transform.inverse().multMatrixPnt(center);this._eyeViewUp=new x3dom.fields.SFVec3f(mat_view_model._10,mat_view_model._11,mat_view_model._12);this._eyeLook=new x3dom.fields.SFVec3f(mat_view_model._20,mat_view_model._21,mat_view_model._22);var rotMat=x3dom.fields.SFMatrix4f.identity();var mid=max.add(min).multiply(0.5);var billboard_to_viewer=this._eye.subtract(mid);if(this._vf.axisOfRotation.equals(new x3dom.fields.SFVec3f(0,0,0),x3dom.fields.Eps)){var rot1=x3dom.fields.Quaternion.rotateFromTo(billboard_to_viewer,new x3dom.fields.SFVec3f(0,0,1));rotMat=rot1.toMatrix().transpose();var yAxis=rotMat.multMatrixPnt(new x3dom.fields.SFVec3f(0,1,0)).normalize();var zAxis=rotMat.multMatrixPnt(new x3dom.fields.SFVec3f(0,0,1)).normalize();if(!this._eyeViewUp.equals(new x3dom.fields.SFVec3f(0,0,0),x3dom.fields.Eps)){var rot2=x3dom.fields.Quaternion.rotateFromTo(this._eyeLook,zAxis);var rotatedyAxis=rot2.toMatrix().transpose().multMatrixVec(yAxis);var rot3=x3dom.fields.Quaternion.rotateFromTo(this._eyeViewUp,rotatedyAxis);rotMat=rot2.toMatrix().transpose().mult(rotMat);rotMat=rot3.toMatrix().transpose().mult(rotMat);}} +else{var normalPlane=this._vf.axisOfRotation.cross(billboard_to_viewer).normalize();if(this._eye.z<0){normalPlane=normalPlane.multiply(-1);} +var degreesToRotate=Math.asin(normalPlane.dot(new x3dom.fields.SFVec3f(0,0,1)));if(this._eye.z<0){degreesToRotate+=Math.PI;} +rotMat=x3dom.fields.SFMatrix4f.parseRotation(this._vf.axisOfRotation.x+", "+this._vf.axisOfRotation.y+", "+ +this._vf.axisOfRotation.z+", "+degreesToRotate*(-1));} +var childTransform=this.transformMatrix(transform.mult(rotMat));for(var i=0,i_n=this._childNodes.length;i<i_n;i++) +{var cnode=this._childNodes[i];if(cnode){cnode.collectDrawableObjects(childTransform,drawableCollection,singlePath,invalidateCache,planeMask);}}}}));x3dom.registerNodeType("Collision","Navigation",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.Collision.superClass.call(this,ctx);this.addField_SFBool(ctx,"enabled",true);this.addField_SFNode("proxy",x3dom.nodeTypes.X3DGroupingNode);this.addField_SFTime("collideTime",0);this.addField_SFBool("isActive",true);},{collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();planeMask=drawableCollection.cull(transform,this.graphState(),singlePath,planeMask);if(planeMask<=0){return;} +var cnode,childTransform;if(singlePath){if(!this._graph.globalMatrix){this._graph.globalMatrix=this.transformMatrix(transform);} +childTransform=this._graph.globalMatrix;} +else{childTransform=this.transformMatrix(transform);} +for(var i=0,n=this._childNodes.length;i<n;i++) +{if((cnode=this._childNodes[i])&&(cnode!==this._cf.proxy.node)){cnode.collectDrawableObjects(childTransform,drawableCollection,singlePath,invalidateCache,planeMask);}}}}));x3dom.registerNodeType("X3DLODNode","Navigation",defineClass(x3dom.nodeTypes.X3DGroupingNode,function(ctx){x3dom.nodeTypes.X3DLODNode.superClass.call(this,ctx);this.addField_SFBool(ctx,"forceTransitions",false);this.addField_SFVec3f(ctx,"center",0,0,0);this._eye=new x3dom.fields.SFVec3f(0,0,0);},{collectDrawableObjects:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{if(singlePath&&(this._parentNodes.length>1)) +singlePath=false;if(singlePath&&(invalidateCache=invalidateCache||this.cacheInvalid())) +this.invalidateCache();planeMask=drawableCollection.cull(transform,this.graphState(),singlePath,planeMask);if(planeMask<=0){return;} +singlePath=false;this.visitChildren(transform,drawableCollection,singlePath,invalidateCache,planeMask);},visitChildren:function(transform,drawableCollection,singlePath,invalidateCache,planeMask){}}));x3dom.registerNodeType("LOD","Navigation",defineClass(x3dom.nodeTypes.X3DLODNode,function(ctx){x3dom.nodeTypes.LOD.superClass.call(this,ctx);this.addField_MFFloat(ctx,"range",[]);this._lastRangePos=-1;},{visitChildren:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{var i=0,n=this._childNodes.length;var vol=this.getVolume();var min=x3dom.fields.SFVec3f.MAX();var max=x3dom.fields.SFVec3f.MIN();vol.getBounds(min,max);var mat_view=drawableCollection.viewMatrix;var center=new x3dom.fields.SFVec3f(0,0,0);center=mat_view.inverse().multMatrixPnt(center);this._eye=transform.inverse().multMatrixPnt(center);var mid=max.add(min).multiply(0.5).add(this._vf.center);var len=mid.subtract(this._eye).length();while(i<this._vf.range.length&&len>this._vf.range[i]){i++;} +if(i&&i>=n){i=n-1;} +this._lastRangePos=i;var cnode=this._childNodes[i];if(n&&cnode) +{var childTransform=this.transformMatrix(transform);cnode.collectDrawableObjects(childTransform,drawableCollection,singlePath,invalidateCache,planeMask);}},getVolume:function() +{var vol=this._graph.volume;if(!this.volumeValid()&&this._vf.render) +{var child,childVol;if(this._lastRangePos>=0){child=this._childNodes[this._lastRangePos];childVol=(child&&child._vf.render===true)?child.getVolume():null;if(childVol&&childVol.isValid()) +vol.extendBounds(childVol.min,childVol.max);} +else{for(var i=0,n=this._childNodes.length;i<n;i++) +{if(!(child=this._childNodes[i])||child._vf.render!==true) +continue;childVol=child.getVolume();if(childVol&&childVol.isValid()) +vol.extendBounds(childVol.min,childVol.max);}}} +return vol;},nodeChanged:function(){this.invalidateVolume();},fieldChanged:function(fieldName){if(fieldName=="render"||fieldName=="center"||fieldName=="range"){this.invalidateVolume();}}}));x3dom.registerNodeType("DynamicLOD","Navigation",defineClass(x3dom.nodeTypes.X3DLODNode,function(ctx){x3dom.nodeTypes.DynamicLOD.superClass.call(this,ctx);this.addField_SFFloat(ctx,'subScale',0.5);this.addField_SFVec2f(ctx,'size',2,2);this.addField_SFVec2f(ctx,'subdivision',1,1);this.addField_SFNode('root',x3dom.nodeTypes.X3DShapeNode);this.addField_SFString(ctx,'urlHead',"http://r");this.addField_SFString(ctx,'urlCenter',".ortho.tiles.virtualearth.net/tiles/h");this.addField_SFString(ctx,'urlTail',".png?g=-1");this.rootGeometry=new x3dom.nodeTypes.Plane(ctx);this.level=0;this.quadrant=4;this.cell="";},{nodeChanged:function() +{var root=this._cf.root.node;if(root==null||root._cf.geometry.node!=null) +return;this.rootGeometry._vf.size.setValues(this._vf.size);this.rootGeometry._vf.subdivision.setValues(this._vf.subdivision);this.rootGeometry._vf.center.setValues(this._vf.center);this.rootGeometry.fieldChanged("subdivision");this._cf.root.node.addChild(this.rootGeometry);this.rootGeometry.nodeChanged();this._cf.root.node.nodeChanged();this._nameSpace.doc.needRender=true;},visitChildren:function(transform,drawableCollection,singlePath,invalidateCache,planeMask) +{var root=this._cf.root.node;if(root==null) +return;var mat_view=drawableCollection.viewMatrix;var center=new x3dom.fields.SFVec3f(0,0,0);center=mat_view.inverse().multMatrixPnt(center);this._eye=transform.inverse().multMatrixPnt(center);var l,len=this._vf.center.subtract(this._eye).length();if(len>x3dom.fields.Eps&&len*this._vf.subScale<=this._vf.size.length()){if(this._childNodes.length<=1){var offset=new Array(new x3dom.fields.SFVec3f(-0.25*this._vf.size.x,0.25*this._vf.size.y,0),new x3dom.fields.SFVec3f(0.25*this._vf.size.x,0.25*this._vf.size.y,0),new x3dom.fields.SFVec3f(-0.25*this._vf.size.x,-0.25*this._vf.size.y,0),new x3dom.fields.SFVec3f(0.25*this._vf.size.x,-0.25*this._vf.size.y,0));for(l=0;l<4;l++){var node=new x3dom.nodeTypes.DynamicLOD();node._nameSpace=this._nameSpace;node._eye.setValues(this._eye);node.level=this.level+1;node.quadrant=l;node.cell=this.cell+l;node._vf.urlHead=this._vf.urlHead;node._vf.urlCenter=this._vf.urlCenter;node._vf.urlTail=this._vf.urlTail;node._vf.center=this._vf.center.add(offset[l]);node._vf.size=this._vf.size.multiply(0.5);node._vf.subdivision.setValues(this._vf.subdivision);var app=new x3dom.nodeTypes.Appearance();var tex=new x3dom.nodeTypes.ImageTexture();tex._nameSpace=this._nameSpace;tex._vf.url[0]=this._vf.urlHead+node.quadrant+this._vf.urlCenter+node.cell+this._vf.urlTail;app.addChild(tex);tex.nodeChanged();var shape=new x3dom.nodeTypes.Shape();shape._nameSpace=this._nameSpace;shape.addChild(app);app.nodeChanged();node.addChild(shape,"root");shape.nodeChanged();this.addChild(node);node.nodeChanged();}} +else{for(l=1;l<this._childNodes.length;l++){this._childNodes[l].collectDrawableObjects(transform,drawableCollection,singlePath,invalidateCache,planeMask);}}} +else{root.collectDrawableObjects(transform,drawableCollection,singlePath,invalidateCache,planeMask);}},getVolume:function(){var vol=this._graph.volume;if(!vol.isValid()){vol.min.setValues(this._vf.center);vol.min.x-=0.5*this._vf.size.x;vol.min.y-=0.5*this._vf.size.y;vol.min.z-=x3dom.fields.Eps;vol.max.setValues(this._vf.center);vol.max.x+=0.5*this._vf.size.x;vol.max.y+=0.5*this._vf.size.y;vol.max.z+=x3dom.fields.Eps;} +return vol;}}));x3dom.registerNodeType("X3DFontStyleNode","Text",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.X3DFontStyleNode.superClass.call(this,ctx);}));x3dom.registerNodeType("FontStyle","Text",defineClass(x3dom.nodeTypes.X3DFontStyleNode,function(ctx){x3dom.nodeTypes.FontStyle.superClass.call(this,ctx);this.addField_MFString(ctx,'family',['SERIF']);this.addField_SFBool(ctx,'horizontal',true);this.addField_MFString(ctx,'justify',['BEGIN']);this.addField_SFString(ctx,'language',"");this.addField_SFBool(ctx,'leftToRight',true);this.addField_SFFloat(ctx,'size',1.0);this.addField_SFFloat(ctx,'spacing',1.0);this.addField_SFString(ctx,'style',"PLAIN");this.addField_SFBool(ctx,'topToBottom',true);},{fieldChanged:function(fieldName){if(fieldName=='family'||fieldName=='horizontal'||fieldName=='justify'||fieldName=='language'||fieldName=='leftToRight'||fieldName=='size'||fieldName=='spacing'||fieldName=='style'||fieldName=='topToBottom'){Array.forEach(this._parentNodes,function(node){node.fieldChanged(fieldName);});}}}));x3dom.nodeTypes.FontStyle.defaultNode=function(){if(!x3dom.nodeTypes.FontStyle._defaultNode){x3dom.nodeTypes.FontStyle._defaultNode=new x3dom.nodeTypes.FontStyle();x3dom.nodeTypes.FontStyle._defaultNode.nodeChanged();} +return x3dom.nodeTypes.FontStyle._defaultNode;};x3dom.registerNodeType("Text","Text",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.Text.superClass.call(this,ctx);this.addField_MFString(ctx,'string',[]);this.addField_MFFloat(ctx,'length',[]);this.addField_SFFloat(ctx,'maxExtent',0.0);this.addField_SFNode('fontStyle',x3dom.nodeTypes.X3DFontStyleNode);this._mesh._positions[0]=[];this._mesh._normals[0]=[0,0,1,0,0,1,0,0,1,0,0,1];this._mesh._texCoords[0]=[0,0,1,0,1,1,0,1];this._mesh._colors[0]=[];this._mesh._indices[0]=[0,1,2,2,3,0];this._mesh._invalidate=true;this._mesh._numFaces=2;this._mesh._numCoords=4;},{nodeChanged:function(){if(!this._cf.fontStyle.node){this.addChild(x3dom.nodeTypes.FontStyle.defaultNode());} +this.invalidateVolume();},fieldChanged:function(fieldName){if(fieldName=='string'||fieldName=='length'||fieldName=='maxExtent'){this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node.setAllDirty();});}}}));x3dom.registerNodeType("X3DSoundNode","Sound",defineClass(x3dom.nodeTypes.X3DChildNode,function(ctx){x3dom.nodeTypes.X3DSoundNode.superClass.call(this,ctx);}));x3dom.registerNodeType("Sound","Sound",defineClass(x3dom.nodeTypes.X3DSoundNode,function(ctx){x3dom.nodeTypes.Sound.superClass.call(this,ctx);this.addField_SFNode('source',x3dom.nodeTypes.X3DSoundSourceNode);},{nodeChanged:function() +{if(this._cf.source.node||!this._xmlNode){return;} +x3dom.debug.logInfo("No AudioClip child node given, searching for <audio> elements...");try{Array.forEach(this._xmlNode.childNodes,function(childDomNode){if(childDomNode.nodeType===1) +{x3dom.debug.logInfo("### Found <"+childDomNode.nodeName+"> tag.");if(childDomNode.localName.toLowerCase()==="audio") +{var loop=childDomNode.getAttribute("loop");loop=loop?(loop.toLowerCase()==="loop"):false;var newNode=childDomNode.cloneNode(false);childDomNode.parentNode.removeChild(childDomNode);childDomNode=null;if(navigator.appName!="Microsoft Internet Explorer"){document.body.appendChild(newNode);} +var startAudio=function(){newNode.play();};var audioDone=function(){if(loop){newNode.play();}};newNode.addEventListener("canplaythrough",startAudio,true);newNode.addEventListener("ended",audioDone,true);}}});} +catch(e){x3dom.debug.logException(e);}}}));x3dom.registerNodeType("X3DSoundSourceNode","Sound",defineClass(x3dom.nodeTypes.X3DTimeDependentNode,function(ctx){x3dom.nodeTypes.X3DSoundSourceNode.superClass.call(this,ctx);}));x3dom.registerNodeType("AudioClip","Sound",defineClass(x3dom.nodeTypes.X3DSoundSourceNode,function(ctx){x3dom.nodeTypes.AudioClip.superClass.call(this,ctx);this.addField_MFString(ctx,'url',[]);this.addField_SFBool(ctx,'enabled',true);this.addField_SFBool(ctx,'loop',false);this._preventAutoPlay=true;this._audio=null;},{nodeChanged:function() +{this._audio=document.createElement('audio');if(navigator.appName!="Microsoft Internet Explorer"){document.body.appendChild(this._audio);} +for(var i=0;i<this._vf.url.length;i++) +{var audioUrl=this._nameSpace.getURL(this._vf.url[i]);x3dom.debug.logInfo('Adding sound file: '+audioUrl);var src=document.createElement('source');src.setAttribute('src',audioUrl);this._audio.appendChild(src);} +var that=this;var startAudio=function() +{if(that._vf.enabled===true) +{that._audio.play();}};var audioDone=function() +{if(that._vf.enabled===true&&that._vf.loop===true) +{that._audio.play();}};var preventAutoPlay=function() +{if(that._preventAutoPlay) +{that._audio.pause();that._preventAutoPlay=false;}};this._audio.addEventListener("canplaythrough",startAudio,true);this._audio.addEventListener("ended",audioDone,true);this._audio.addEventListener("play",preventAutoPlay,true);},fieldChanged:function(fieldName) +{if(fieldName==="enabled") +{if(this._vf.enabled===true) +{this._audio.play();} +else +{this._audio.pause();}} +else if(fieldName==="loop") +{if(this._vf.enabled===true&&this._vf.loop===true) +{this._audio.play();}} +else if(fieldName==="url") +{this._audio.pause();while(this._audio.hasChildNodes()) +{this._audio.removeChild(this._audio.firstChild);} +for(var i=0;i<this._vf.url.length;i++) +{var audioUrl=this._nameSpace.getURL(this._vf.url[i]);x3dom.debug.logInfo('Adding sound file: '+audioUrl);var src=document.createElement('source');src.setAttribute('src',audioUrl);this._audio.appendChild(src);}}},shutdown:function(){if(this._audio){this._audio.pause();while(this._audio.hasChildNodes()){this._audio.removeChild(this._audio.firstChild);} +document.body.removeChild(this._audio);this._audio=null;}}}));x3dom.registerNodeType("X3DTextureTransformNode","Texturing",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.X3DTextureTransformNode.superClass.call(this,ctx);}));x3dom.registerNodeType("TextureTransform","Texturing",defineClass(x3dom.nodeTypes.X3DTextureTransformNode,function(ctx){x3dom.nodeTypes.TextureTransform.superClass.call(this,ctx);this.addField_SFVec2f(ctx,'center',0,0);this.addField_SFFloat(ctx,'rotation',0);this.addField_SFVec2f(ctx,'scale',1,1);this.addField_SFVec2f(ctx,'translation',0,0);var negCenter=new x3dom.fields.SFVec3f(-this._vf.center.x,-this._vf.center.y,1);var posCenter=new x3dom.fields.SFVec3f(this._vf.center.x,this._vf.center.y,0);var trans3=new x3dom.fields.SFVec3f(this._vf.translation.x,this._vf.translation.y,0);var scale3=new x3dom.fields.SFVec3f(this._vf.scale.x,this._vf.scale.y,0);this._trafo=x3dom.fields.SFMatrix4f.translation(negCenter).mult(x3dom.fields.SFMatrix4f.scale(scale3)).mult(x3dom.fields.SFMatrix4f.rotationZ(this._vf.rotation)).mult(x3dom.fields.SFMatrix4f.translation(posCenter.add(trans3)));},{fieldChanged:function(fieldName){if(fieldName=='center'||fieldName=='rotation'||fieldName=='scale'||fieldName=='translation'){var negCenter=new x3dom.fields.SFVec3f(-this._vf.center.x,-this._vf.center.y,1);var posCenter=new x3dom.fields.SFVec3f(this._vf.center.x,this._vf.center.y,0);var trans3=new x3dom.fields.SFVec3f(this._vf.translation.x,this._vf.translation.y,0);var scale3=new x3dom.fields.SFVec3f(this._vf.scale.x,this._vf.scale.y,0);this._trafo=x3dom.fields.SFMatrix4f.translation(negCenter).mult(x3dom.fields.SFMatrix4f.scale(scale3)).mult(x3dom.fields.SFMatrix4f.rotationZ(this._vf.rotation)).mult(x3dom.fields.SFMatrix4f.translation(posCenter.add(trans3)));}},texTransformMatrix:function(){return this._trafo;}}));x3dom.registerNodeType("TextureProperties","Texturing",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.TextureProperties.superClass.call(this,ctx);this.addField_SFFloat(ctx,'anisotropicDegree',1.0);this.addField_SFColorRGBA(ctx,'borderColor',0,0,0,0);this.addField_SFInt32(ctx,'borderWidth',0);this.addField_SFString(ctx,'boundaryModeS',"REPEAT");this.addField_SFString(ctx,'boundaryModeT',"REPEAT");this.addField_SFString(ctx,'boundaryModeR',"REPEAT");this.addField_SFString(ctx,'magnificationFilter',"FASTEST");this.addField_SFString(ctx,'minificationFilter',"FASTEST");this.addField_SFString(ctx,'textureCompression',"FASTEST");this.addField_SFFloat(ctx,'texturePriority',0);this.addField_SFBool(ctx,'generateMipMaps',false);},{fieldChanged:function(fieldName) +{if(this._vf.hasOwnProperty(fieldName)){Array.forEach(this._parentNodes,function(texture){Array.forEach(texture._parentNodes,function(app){Array.forEach(app._parentNodes,function(shape){shape._dirty.texture=true;});});});this._nameSpace.doc.needRender=true;}}}));x3dom.registerNodeType("X3DTextureNode","Texturing",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.X3DTextureNode.superClass.call(this,ctx);this.addField_SFInt32(ctx,'origChannelCount',0);this.addField_MFString(ctx,'url',[]);this.addField_SFBool(ctx,'repeatS',true);this.addField_SFBool(ctx,'repeatT',true);this.addField_SFBool(ctx,'scale',true);this.addField_SFBool(ctx,'withCredentials',false);this.addField_SFNode('textureProperties',x3dom.nodeTypes.TextureProperties);this._needPerFrameUpdate=false;this._isCanvas=false;this._type="diffuseMap";this._blending=(this._vf.origChannelCount==1||this._vf.origChannelCount==2);},{invalidateGLObject:function() +{Array.forEach(this._parentNodes,function(app){Array.forEach(app._parentNodes,function(shape){if(x3dom.isa(shape,x3dom.nodeTypes.X3DShapeNode)){shape._dirty.texture=true;} +else{Array.forEach(shape._parentNodes,function(realShape){if(x3dom.isa(realShape,x3dom.nodeTypes.X3DShapeNode)){realShape._dirty.texture=true;}else{Array.forEach(realShape._parentNodes,function(realShape2){if(x3dom.isa(realShape2,x3dom.nodeTypes.X3DShapeNode)){realShape2._dirty.texture=true;}});}});}});});this._nameSpace.doc.needRender=true;},parentAdded:function(parent) +{Array.forEach(parent._parentNodes,function(shape){if(x3dom.isa(shape,x3dom.nodeTypes.Shape)){shape._dirty.texture=true;} +else{Array.forEach(shape._parentNodes,function(realShape){realShape._dirty.texture=true;});}});},parentRemoved:function(parent) +{Array.forEach(parent._parentNodes,function(shape){if(x3dom.isa(shape,x3dom.nodeTypes.Shape)){shape._dirty.texture=true;} +else{Array.forEach(shape._parentNodes,function(realShape){realShape._dirty.texture=true;});}});},fieldChanged:function(fieldName) +{if(fieldName=="url"||fieldName=="origChannelCount"||fieldName=="repeatS"||fieldName=="repeatT"||fieldName=="scale"||fieldName=="withCredentials") +{var that=this;Array.forEach(this._parentNodes,function(app){if(x3dom.isa(app,x3dom.nodeTypes.X3DAppearanceNode)){app.nodeChanged();Array.forEach(app._parentNodes,function(shape){shape._dirty.texture=true;});} +else if(x3dom.isa(app,x3dom.nodeTypes.ImageGeometry)){var cf=null;if(that._xmlNode&&that._xmlNode.hasAttribute('containerField')){cf=that._xmlNode.getAttribute('containerField');app._dirty[cf]=true;}} +else if(x3dom.nodeTypes.X3DVolumeDataNode!==undefined){if(x3dom.isa(app,x3dom.nodeTypes.X3DVolumeRenderStyleNode)){if(that._xmlNode&&that._xmlNode.hasAttribute('containerField')){Array.forEach(app._parentNodes,function(shape){shape._dirty.texture=true;});}}else if(x3dom.isa(app,x3dom.nodeTypes.X3DVolumeDataNode)){if(that._xmlNode&&that._xmlNode.hasAttribute('containerField')){app._dirty.texture=true;}}}});}},getTexture:function(pos){if(pos===0){return this;} +return null;},size:function(){return 1;}}));x3dom.registerNodeType("MultiTexture","Texturing",defineClass(x3dom.nodeTypes.X3DTextureNode,function(ctx){x3dom.nodeTypes.MultiTexture.superClass.call(this,ctx);this.addField_MFNode('texture',x3dom.nodeTypes.X3DTextureNode);},{getTexture:function(pos){if(pos>=0&&pos<this._cf.texture.nodes.length){return this._cf.texture.nodes[pos];} +return null;},getTextures:function(){return this._cf.texture.nodes;},size:function(){return this._cf.texture.nodes.length;}}));x3dom.registerNodeType("Texture","Texturing",defineClass(x3dom.nodeTypes.X3DTextureNode,function(ctx){x3dom.nodeTypes.Texture.superClass.call(this,ctx);this.addField_SFBool(ctx,'hideChildren',true);this._video=null;this._intervalID=0;this._canvas=null;},{nodeChanged:function() +{if(this._vf.url.length||!this._xmlNode){return;} +x3dom.debug.logInfo("No Texture URL given, searching for <img> elements...");var that=this;try{Array.forEach(this._xmlNode.childNodes,function(childDomNode){if(childDomNode.nodeType===1){var url=childDomNode.getAttribute("src");if(url){that._vf.url.push(url);x3dom.debug.logInfo(that._vf.url[that._vf.url.length-1]);if(childDomNode.localName.toLowerCase()==="video"){that._needPerFrameUpdate=true;that._video=document.createElement('video');that._video.setAttribute('preload','auto');that._video.setAttribute('muted','muted');var p=document.getElementsByTagName('body')[0];p.appendChild(that._video);that._video.style.display="none";that._video.style.visibility="hidden";}} +else if(childDomNode.localName.toLowerCase()==="canvas"){that._needPerFrameUpdate=true;that._isCanvas=true;that._canvas=childDomNode;} +if(childDomNode.style&&that._vf.hideChildren){childDomNode.style.display="none";childDomNode.style.visibility="hidden";} +x3dom.debug.logInfo("### Found <"+childDomNode.nodeName+"> tag.");}});} +catch(e){x3dom.debug.logException(e);}},shutdown:function(){if(this._video){this._video.pause();while(this._video.hasChildNodes()){this._video.removeChild(this._video.firstChild);} +document.body.removeChild(this._video);this._video=null;}}}));x3dom.registerNodeType("RenderedTexture","Texturing",defineClass(x3dom.nodeTypes.X3DTextureNode,function(ctx){x3dom.nodeTypes.RenderedTexture.superClass.call(this,ctx);if(ctx) +ctx.doc._nodeBag.renderTextures.push(this);else +x3dom.debug.logWarning("RenderedTexture: No runtime context found!");this.addField_SFNode('viewpoint',x3dom.nodeTypes.X3DViewpointNode);this.addField_SFNode('background',x3dom.nodeTypes.X3DBackgroundNode);this.addField_SFNode('fog',x3dom.nodeTypes.X3DFogNode);this.addField_SFNode('scene',x3dom.nodeTypes.X3DNode);this.addField_MFNode('excludeNodes',x3dom.nodeTypes.X3DNode);this.addField_MFInt32(ctx,'dimensions',[128,128,4]);this.addField_SFString(ctx,'update','NONE');this.addField_SFBool(ctx,'showNormals',false);this.addField_SFString(ctx,'stereoMode','NONE');this.addField_SFFloat(ctx,'interpupillaryDistance',0.064);this.hScreenSize=0.14976;this.vScreenSize=0.09356;this.vScreenCenter=this.vScreenSize/2;this.eyeToScreenDistance=0.041;this.lensSeparationDistance=0.0635;this.distortionK=[1.0,0.22,0.24,0.0];this.lensCenter=1-2*this.lensSeparationDistance/this.hScreenSize;x3dom.debug.assert(this._vf.dimensions.length>=3,"RenderedTexture.dimensions requires at least 3 entries.");this._clearParents=true;this._needRenderUpdate=true;},{nodeChanged:function() +{this._clearParents=true;this._needRenderUpdate=true;},fieldChanged:function(fieldName) +{switch(fieldName) +{case"excludeNodes":this._clearParents=true;break;case"update":if(this._vf.update.toUpperCase()=="NEXT_FRAME_ONLY"||this._vf.update.toUpperCase()=="ALWAYS"){this._needRenderUpdate=true;} +break;default:break;}},getViewMatrix:function() +{if(this._clearParents&&this._cf.excludeNodes.nodes.length){var that=this;Array.forEach(this._cf.excludeNodes.nodes,function(node){for(var i=0,n=node._parentNodes.length;i<n;i++){if(node._parentNodes[i]===that){node._parentNodes.splice(i,1);node.parentRemoved(that);}}});this._clearParents=false;} +var locScene=this._cf.scene.node;var scene=this._nameSpace.doc._scene;var vbP=scene.getViewpoint();var view=this._cf.viewpoint.node;var ret_mat=null;if(view===null||view===vbP){ret_mat=this._nameSpace.doc._viewarea.getViewMatrix();} +else if(locScene&&locScene!==scene){ret_mat=view.getViewMatrix()} +else{var mat_viewpoint=view.getCurrentTransform();ret_mat=view.getViewMatrix().mult(mat_viewpoint.inverse());} +var stereoMode=this._vf.stereoMode.toUpperCase();if(stereoMode!="NONE"){var d=this._vf.interpupillaryDistance/2;if(stereoMode=="RIGHT_EYE"){d=-d;} +var modifier=new x3dom.fields.SFMatrix4f(1,0,0,d,0,1,0,0,0,0,1,0,0,0,0,1);ret_mat=modifier.mult(ret_mat);} +return ret_mat;},getProjectionMatrix:function() +{var doc=this._nameSpace.doc;var vbP=doc._scene.getViewpoint();var view=this._cf.viewpoint.node;var ret_mat=null;var f,w=this._vf.dimensions[0],h=this._vf.dimensions[1];var stereoMode=this._vf.stereoMode.toUpperCase();var stereo=(stereoMode!="NONE");if(view===null||view===vbP){ret_mat=x3dom.fields.SFMatrix4f.copy(doc._viewarea.getProjectionMatrix());if(stereo){f=2*Math.atan(this.vScreenSize/(2*this.eyeToScreenDistance));f=1/Math.tan(f/2);} +else{f=1/Math.tan(vbP._vf.fieldOfView/2);} +ret_mat._00=f/(w/h);ret_mat._11=f;} +else{ret_mat=view.getProjectionMatrix(w/h);} +if(stereo){var hp=this.lensCenter;if(stereoMode=="RIGHT_EYE"){hp=-hp;} +var modifier=new x3dom.fields.SFMatrix4f(1,0,0,hp,0,1,0,0,0,0,1,0,0,0,0,1);ret_mat=modifier.mult(ret_mat);} +return ret_mat;},getWCtoCCMatrix:function() +{var view=this.getViewMatrix();var proj=this.getProjectionMatrix();return proj.mult(view);},parentRemoved:function(parent) +{if(this._parentNodes.length===0){var doc=this.findX3DDoc();for(var i=0,n=doc._nodeBag.renderTextures.length;i<n;i++){if(doc._nodeBag.renderTextures[i]===this){doc._nodeBag.renderTextures.splice(i,1);}}} +if(this._cf.scene.node){this._cf.scene.node.parentRemoved(this);}},requirePingPong:function() +{return false;}}));x3dom.registerNodeType("RefinementTexture","Texturing",defineClass(x3dom.nodeTypes.RenderedTexture,function(ctx){x3dom.nodeTypes.RefinementTexture.superClass.call(this,ctx);this.addField_SFString(ctx,'stamp0',"gpuii/stamps/0.gif");this.addField_SFString(ctx,'stamp1',"gpuii/stamps/1.gif");this.addField_SFBool(ctx,'autoRefinement',true);this.addField_SFString(ctx,'format','jpg');this.addField_SFInt32(ctx,'iterations',7);this.addField_SFInt32(ctx,'maxLevel',this._vf.iterations);if(this._vf.iterations%2===0){var temp=this._vf.stamp0;this._vf.stamp0=this._vf.stamp1;this._vf.stamp1=temp;} +this._vf.iterations=(this._vf.iterations>11)?11:this._vf.iterations;this._vf.iterations=(this._vf.iterations<3)?3:this._vf.iterations;this._vf.maxLevel=(this._vf.maxLevel>11)?11:this._vf.maxLevel;this._vf.maxLevel=(this._vf.maxLevel<3)?3:this._vf.maxLevel;this._vf.maxLevel=(this._vf.maxLevel>this._vf.iterations)?this._vf.iterations:this._vf.maxLevel;var repeatConfig=[{x:4,y:8},{x:8,y:8},{x:8,y:16},{x:16,y:16},{x:16,y:32},{x:32,y:32},{x:32,y:64},{x:64,y:64},{x:64,y:128}];this._repeat=new x3dom.fields.SFVec2f(this._vf.dimensions[0]/repeatConfig[this._vf.iterations-3].x,this._vf.dimensions[1]/repeatConfig[this._vf.iterations-3].y);this._renderedImage=0;this._currLoadLevel=0;this._loadLevel=1;},{nextLevel:function(){if(this._loadLevel<this._vf.maxLevel){this._loadLevel++;this._nameSpace.doc.needRender=true;}},requirePingPong:function(){return(this._currLoadLevel<=this._vf.maxLevel&&this._renderedImage<this._loadLevel);}}));x3dom.registerNodeType("PixelTexture","Texturing",defineClass(x3dom.nodeTypes.X3DTextureNode,function(ctx){x3dom.nodeTypes.PixelTexture.superClass.call(this,ctx);this.addField_SFImage(ctx,'image',0,0,0);},{fieldChanged:function(fieldName) +{if(fieldName=="image"){this.invalidateGLObject();}},getWidth:function(){return this._vf.image.width;},getHeight:function(){return this._vf.image.height;},getComponents:function(){return this._vf.image.comp;},setPixel:function(x,y,color){this._vf.image.setPixel(x,y,color);this.invalidateGLObject();},getPixel:function(x,y){return this._vf.image.getPixel(x,y);},setPixels:function(pixels){this._vf.image.setPixels(pixels);this.invalidateGLObject();},getPixels:function(){return this._vf.image.getPixels();}}));x3dom.registerNodeType("ImageTexture","Texturing",defineClass(x3dom.nodeTypes.Texture,function(ctx){x3dom.nodeTypes.ImageTexture.superClass.call(this,ctx);}));x3dom.registerNodeType("MovieTexture","Texturing",defineClass(x3dom.nodeTypes.Texture,function(ctx){x3dom.nodeTypes.MovieTexture.superClass.call(this,ctx);this.addField_SFBool(ctx,'loop',false);this.addField_SFFloat(ctx,'speed',1.0);this.addField_SFTime(ctx,'pauseTime',0);this.addField_SFFloat(ctx,'pitch',1.0);this.addField_SFTime(ctx,'resumeTime',0);this.addField_SFTime(ctx,'startTime',0);this.addField_SFTime(ctx,'stopTime',0);}));x3dom.registerNodeType("X3DTextureCoordinateNode","Texturing",defineClass(x3dom.nodeTypes.X3DGeometricPropertyNode,function(ctx){x3dom.nodeTypes.X3DTextureCoordinateNode.superClass.call(this,ctx);},{fieldChanged:function(fieldName){if(fieldName==="texCoord"||fieldName==="point"||fieldName==="parameter"||fieldName==="mode") +{Array.forEach(this._parentNodes,function(node){node.fieldChanged("texCoord");});}},parentAdded:function(parent){if(parent._mesh&&parent._cf.texCoord.node!==this){parent.fieldChanged("texCoord");}}}));x3dom.registerNodeType("TextureCoordinate","Texturing",defineClass(x3dom.nodeTypes.X3DTextureCoordinateNode,function(ctx){x3dom.nodeTypes.TextureCoordinate.superClass.call(this,ctx);this.addField_MFVec2f(ctx,'point',[]);}));x3dom.registerNodeType("TextureCoordinateGenerator","Texturing",defineClass(x3dom.nodeTypes.X3DTextureCoordinateNode,function(ctx){x3dom.nodeTypes.TextureCoordinateGenerator.superClass.call(this,ctx);this.addField_SFString(ctx,'mode',"SPHERE");this.addField_MFFloat(ctx,'parameter',[]);}));x3dom.registerNodeType("MultiTextureCoordinate","Texturing",defineClass(x3dom.nodeTypes.X3DTextureCoordinateNode,function(ctx){x3dom.nodeTypes.MultiTextureCoordinate.superClass.call(this,ctx);this.addField_MFNode('texCoord',x3dom.nodeTypes.X3DTextureCoordinateNode);}));x3dom.registerNodeType("ImageTextureAtlas","Texturing",defineClass(x3dom.nodeTypes.Texture,function(ctx){x3dom.nodeTypes.ImageTextureAtlas.superClass.call(this,ctx);this.addField_SFInt32(ctx,'numberOfSlices',0);this.addField_SFInt32(ctx,'slicesOverX',0);this.addField_SFInt32(ctx,'slicesOverY',0);}));x3dom.registerNodeType("X3DEnvironmentTextureNode","CubeMapTexturing",defineClass(x3dom.nodeTypes.X3DTextureNode,function(ctx){x3dom.nodeTypes.X3DEnvironmentTextureNode.superClass.call(this,ctx);},{getTexUrl:function(){return[];},getTexSize:function(){return-1;}}));x3dom.registerNodeType("ComposedCubeMapTexture","CubeMapTexturing",defineClass(x3dom.nodeTypes.X3DEnvironmentTextureNode,function(ctx){x3dom.nodeTypes.ComposedCubeMapTexture.superClass.call(this,ctx);this.addField_SFNode('back',x3dom.nodeTypes.Texture);this.addField_SFNode('front',x3dom.nodeTypes.Texture);this.addField_SFNode('bottom',x3dom.nodeTypes.Texture);this.addField_SFNode('top',x3dom.nodeTypes.Texture);this.addField_SFNode('left',x3dom.nodeTypes.Texture);this.addField_SFNode('right',x3dom.nodeTypes.Texture);this._type="cubeMap";},{getTexUrl:function(){return[this._nameSpace.getURL(this._cf.back.node._vf.url[0]),this._nameSpace.getURL(this._cf.front.node._vf.url[0]),this._nameSpace.getURL(this._cf.bottom.node._vf.url[0]),this._nameSpace.getURL(this._cf.top.node._vf.url[0]),this._nameSpace.getURL(this._cf.left.node._vf.url[0]),this._nameSpace.getURL(this._cf.right.node._vf.url[0])];}}));x3dom.registerNodeType("GeneratedCubeMapTexture","CubeMapTexturing",defineClass(x3dom.nodeTypes.X3DEnvironmentTextureNode,function(ctx){x3dom.nodeTypes.GeneratedCubeMapTexture.superClass.call(this,ctx);this.addField_SFInt32(ctx,'size',128);this.addField_SFString(ctx,'update','NONE');this._type="cubeMap";x3dom.debug.logWarning("GeneratedCubeMapTexture NYI");},{getTexSize:function(){return this._vf.size;}}));x3dom.registerNodeType("Uniform","Shaders",defineClass(x3dom.nodeTypes.Field,function(ctx){x3dom.nodeTypes.Uniform.superClass.call(this,ctx);}));x3dom.registerNodeType("SurfaceShaderTexture","Shaders",defineClass(x3dom.nodeTypes.X3DTextureNode,function(ctx){x3dom.nodeTypes.SurfaceShaderTexture.superClass.call(this,ctx);this.addField_SFInt32(ctx,'textureCoordinatesId',0);this.addField_SFString(ctx,'channelMask',"DEFAULT");this.addField_SFBool(ctx,'isSRGB',false);this.addField_SFNode('texture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('textureTransform',x3dom.nodeTypes.X3DTextureTransformNode);}));x3dom.registerNodeType("X3DShaderNode","Shaders",defineClass(x3dom.nodeTypes.X3DAppearanceChildNode,function(ctx){x3dom.nodeTypes.X3DShaderNode.superClass.call(this,ctx);this.addField_SFString(ctx,'language',"");}));x3dom.registerNodeType("CommonSurfaceShader","Shaders",defineClass(x3dom.nodeTypes.X3DShaderNode,function(ctx){x3dom.nodeTypes.CommonSurfaceShader.superClass.call(this,ctx);this.addField_SFInt32(ctx,'tangentTextureCoordinatesId',-1);this.addField_SFInt32(ctx,'binormalTextureCoordinatesId',-1);this.addField_SFVec3f(ctx,'emissiveFactor',0,0,0);this.addField_SFInt32(ctx,'emissiveTextureId',-1);this.addField_SFInt32(ctx,'emissiveTextureCoordinatesId',0);this.addField_SFString(ctx,'emissiveTextureChannelMask','rgb');this.addField_SFVec3f(ctx,'ambientFactor',0.2,0.2,0.2);this.addField_SFInt32(ctx,'ambientTextureId',-1);this.addField_SFInt32(ctx,'ambientTextureCoordinatesId',0);this.addField_SFString(ctx,'ambientTextureChannelMask','rgb');this.addField_SFVec3f(ctx,'diffuseFactor',0.8,0.8,0.8);this.addField_SFInt32(ctx,'diffuseTextureId',-1);this.addField_SFInt32(ctx,'diffuseTextureCoordinatesId',0);this.addField_SFString(ctx,'diffuseTextureChannelMask','rgb');this.addField_SFVec3f(ctx,'specularFactor',0,0,0);this.addField_SFInt32(ctx,'specularTextureId',-1);this.addField_SFInt32(ctx,'specularTextureCoordinatesId',0);this.addField_SFString(ctx,'specularTextureChannelMask','rgb');this.addField_SFFloat(ctx,'shininessFactor',0.2);this.addField_SFInt32(ctx,'shininessTextureId',-1);this.addField_SFInt32(ctx,'shininessTextureCoordinatesId',0);this.addField_SFString(ctx,'shininessTextureChannelMask','a');this.addField_SFString(ctx,'normalFormat','UNORM');this.addField_SFString(ctx,'normalSpace','TANGENT');this.addField_SFInt32(ctx,'normalTextureId',-1);this.addField_SFInt32(ctx,'normalTextureCoordinatesId',0);this.addField_SFString(ctx,'normalTextureChannelMask','rgb');this.addField_SFVec3f(ctx,'reflectionFactor',0,0,0);this.addField_SFInt32(ctx,'reflectionTextureId',-1);this.addField_SFInt32(ctx,'reflectionTextureCoordinatesId',0);this.addField_SFString(ctx,'reflectionTextureChannelMask','rgb');this.addField_SFVec3f(ctx,'transmissionFactor',0,0,0);this.addField_SFInt32(ctx,'transmissionTextureId',-1);this.addField_SFInt32(ctx,'transmissionTextureCoordinatesId',0);this.addField_SFString(ctx,'transmissionTextureChannelMask','rgb');this.addField_SFVec3f(ctx,'environmentFactor',1,1,1);this.addField_SFInt32(ctx,'environmentTextureId',-1);this.addField_SFInt32(ctx,'environmentTextureCoordinatesId',0);this.addField_SFString(ctx,'environmentTextureChannelMask','rgb');this.addField_SFFloat(ctx,'relativeIndexOfRefraction',1);this.addField_SFFloat(ctx,'fresnelBlend',0);this.addField_SFString(ctx,'displacementAxis','y');this.addField_SFFloat(ctx,'displacementFactor',255.0);this.addField_SFInt32(ctx,'displacementTextureId',-1);this.addField_SFInt32(ctx,'displacementTextureCoordinatesId',0);this.addField_SFNode('emissiveTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('ambientTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('diffuseTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('specularTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('shininessTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('normalTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('reflectionTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('transmissionTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('environmentTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('displacementTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('diffuseDisplacementTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('multiDiffuseAlphaTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('multiVisibilityTexture',x3dom.nodeTypes.X3DTextureNode);this.addField_SFVec3f(ctx,'normalScale',2,2,2);this.addField_SFVec3f(ctx,'normalBias',-1,-1,-1);this.addField_SFFloat(ctx,'alphaFactor',1);this.addField_SFBool(ctx,'invertAlphaTexture',false);this.addField_SFInt32(ctx,'alphaTextureId',-1);this.addField_SFInt32(ctx,'alphaTextureCoordinatesId',0);this.addField_SFString(ctx,'alphaTextureChannelMask','a');this.addField_SFNode('alphaTexture',x3dom.nodeTypes.X3DTextureNode);this._dirty={};},{getDiffuseMap:function() +{if(this._cf.diffuseTexture.node){if(x3dom.isa(this._cf.diffuseTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.diffuseTexture.node._cf.texture.node._type="diffuseMap";return this._cf.diffuseTexture.node._cf.texture.node;}else{this._cf.diffuseTexture.node._type="diffuseMap";return this._cf.diffuseTexture.node;}}else{return null;}},getNormalMap:function() +{if(this._cf.normalTexture.node){if(x3dom.isa(this._cf.normalTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.normalTexture.node._cf.texture.node._type="normalMap";return this._cf.normalTexture.node._cf.texture.node;}else{this._cf.normalTexture.node._type="normalMap";return this._cf.normalTexture.node;}}else{return null;}},getAmbientMap:function() +{if(this._cf.ambientTexture.node){if(x3dom.isa(this._cf.ambientTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.ambientTexture.node._cf.texture.node._type="ambientMap";return this._cf.ambientTexture.node._cf.texture.node;}else{this._cf.ambientTexture.node._type="ambientMap";return this._cf.ambientTexture.node;}}else{return null;}},getSpecularMap:function() +{if(this._cf.specularTexture.node){if(x3dom.isa(this._cf.specularTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.specularTexture.node._cf.texture.node._type="specularMap";return this._cf.specularTexture.node._cf.texture.node;}else{this._cf.specularTexture.node._type="specularMap";return this._cf.specularTexture.node;}}else{return null;}},getShininessMap:function() +{if(this._cf.shininessTexture.node){if(x3dom.isa(this._cf.shininessTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.shininessTexture.node._cf.texture.node._type="shininessMap";return this._cf.shininessTexture.node._cf.texture.node;}else{this._cf.shininessTexture.node._type="shininessMap";return this._cf.shininessTexture.node;}}else{return null;}},getAlphaMap:function() +{if(this._cf.alphaTexture.node){if(x3dom.isa(this._cf.alphaTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.alphaTexture.node._cf.texture.node._type="alphaMap";return this._cf.alphaTexture.node._cf.texture.node;}else{this._cf.alphaTexture.node._type="alphaMap";return this._cf.alphaTexture.node;}}else{return null;}},getDisplacementMap:function() +{if(this._cf.displacementTexture.node){if(x3dom.isa(this._cf.displacementTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.displacementTexture.node._cf.texture.node._type="displacementMap";return this._cf.displacementTexture.node._cf.texture.node;}else{this._cf.displacementTexture.node._type="displacementMap";return this._cf.displacementTexture.node;}}else{return null;}},getDiffuseDisplacementMap:function() +{if(this._cf.diffuseDisplacementTexture.node){if(x3dom.isa(this._cf.diffuseDisplacementTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.diffuseDisplacementTexture.node._cf.texture.node._type="diffuseDisplacementMap";return this._cf.diffuseDisplacementTexture.node._cf.texture.node;}else{this._cf.diffuseDisplacementTexture.node._type="diffuseDisplacementMap";return this._cf.diffuseDisplacementTexture.node;}}else{return null;}},getMultiDiffuseAlphaMap:function() +{if(this._cf.multiDiffuseAlphaTexture.node){if(x3dom.isa(this._cf.multiDiffuseAlphaTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.multiDiffuseAlphaTexture.node._cf.texture.node._type="multiDiffuseAlphaMap";return this._cf.multiDiffuseAlphaTexture.node._cf.texture.node;}else{this._cf.multiDiffuseAlphaTexture.node._type="multiDiffuseAlphaMap";return this._cf.multiDiffuseAlphaTexture.node;}}else{return null;}},getMultiVisibilityMap:function() +{if(this._cf.multiVisibilityTexture.node){if(x3dom.isa(this._cf.multiVisibilityTexture.node,x3dom.nodeTypes.SurfaceShaderTexture)){this._cf.multiVisibilityTexture.node._cf.texture.node._type="multiVisibilityMap";return this._cf.multiVisibilityTexture.node._cf.texture.node;}else{this._cf.multiVisibilityTexture.node._type="multiVisibilityMap";return this._cf.multiVisibilityTexture.node;}}else{return null;}},getTextures:function() +{var textures=[];var diff=this.getDiffuseMap();if(diff)textures.push(diff);var norm=this.getNormalMap();if(norm)textures.push(norm);var spec=this.getSpecularMap();if(spec)textures.push(spec);var shin=this.getShininessMap();if(shin)textures.push(shin);var displacement=this.getDisplacementMap();if(displacement)textures.push(displacement);var diffuseDisplacement=this.getDiffuseDisplacementMap();if(diffuseDisplacement)textures.push(diffuseDisplacement);var multiDiffuseAlpha=this.getMultiDiffuseAlphaMap();if(multiDiffuseAlpha)textures.push(multiDiffuseAlpha);var multiVisibility=this.getMultiVisibilityMap();if(multiVisibility)textures.push(multiVisibility);return textures;}}));x3dom.registerNodeType("ComposedShader","Shaders",defineClass(x3dom.nodeTypes.X3DShaderNode,function(ctx){x3dom.nodeTypes.ComposedShader.superClass.call(this,ctx);this.addField_MFNode('fields',x3dom.nodeTypes.Field);this.addField_MFNode('parts',x3dom.nodeTypes.ShaderPart);this._vertex=null;this._fragment=null;this._id=null;if(!x3dom.nodeTypes.ComposedShader.ShaderInfoMsgShown){x3dom.debug.logInfo("Current ComposedShader node implementation limitations:\n"+"Vertex attributes (if given in the standard X3D fields 'coord', 'color', "+"'normal', 'texCoord'), matrices and texture are provided as follows...\n"+"(see also <a href='http://x3dom.org/x3dom/doc/help/composedShader.html'>"+"http://x3dom.org/x3dom/doc/help/composedShader.html</a>)\n"+" attribute vec3 position;\n"+" attribute vec3 normal;\n"+" attribute vec2 texcoord;\n"+" attribute vec3 color;\n"+" uniform mat4 modelViewProjectionMatrix;\n"+" uniform mat4 modelViewMatrix;\n"+" uniform mat4 normalMatrix;\n"+" uniform mat4 viewMatrix;\n"+" uniform sampler2D tex;\n");x3dom.nodeTypes.ComposedShader.ShaderInfoMsgShown=true;}},{nodeChanged:function() +{var i,n=this._cf.parts.nodes.length;for(i=0;i<n;i++) +{if(this._cf.parts.nodes[i]._vf.type.toLowerCase()=='vertex'){this._vertex=this._cf.parts.nodes[i];this._id=this._cf.parts.nodes[i]._id;} +else if(this._cf.parts.nodes[i]._vf.type.toLowerCase()=='fragment'){this._fragment=this._cf.parts.nodes[i];this._id+=" - "+this._cf.parts.nodes[i]._id;}} +var ctx={};n=this._cf.fields.nodes.length;for(i=0;i<n;i++) +{var fieldName=this._cf.fields.nodes[i]._vf.name;ctx.xmlNode=this._cf.fields.nodes[i]._xmlNode;var needNode=false;if(ctx.xmlNode===undefined||ctx.xmlNode===null){ctx.xmlNode=document.createElement("field");needNode=true;} +ctx.xmlNode.setAttribute(fieldName,this._cf.fields.nodes[i]._vf.value);var funcName="this.addField_"+this._cf.fields.nodes[i]._vf.type+"(ctx, name);";var func=new Function('ctx','name',funcName);func.call(this,ctx,fieldName);if(needNode){ctx.xmlNode=null;}} +Array.forEach(this._parentNodes,function(app){Array.forEach(app._parentNodes,function(shape){if(shape._cleanupGLObjects) +shape._cleanupGLObjects();shape.setAllDirty();});});},fieldChanged:function(fieldName) +{var i,n=this._cf.fields.nodes.length;for(i=0;i<n;i++) +{var field=this._cf.fields.nodes[i]._vf.name;if(field===fieldName) +{var msg=this._cf.fields.nodes[i]._vf.value;try{this._vf[field].setValueByStr(msg);} +catch(exc1){try{switch((typeof(this._vf[field])).toString()){case"number":this._vf[field]=+msg;break;case"boolean":this._vf[field]=(msg.toLowerCase()==="true");break;case"string":this._vf[field]=msg;break;}} +catch(exc2){x3dom.debug.logError("setValueByStr() NYI for "+typeof(this._vf[field]));}} +break;}} +if(field==='url') +{Array.forEach(this._parentNodes,function(app){Array.forEach(app._parentNodes,function(shape){shape._dirty.shader=true;});});}},parentAdded:function(parent) +{parent.nodeChanged();}}));x3dom.nodeTypes.ComposedShader.ShaderInfoMsgShown=false;x3dom.registerNodeType("ShaderPart","Shaders",defineClass(x3dom.nodeTypes.X3DNode,function(ctx){x3dom.nodeTypes.ShaderPart.superClass.call(this,ctx);this.addField_MFString(ctx,'url',[]);this.addField_SFString(ctx,'type',"VERTEX");this._id=(ctx&&ctx.xmlNode&&ctx.xmlNode.id!="")?ctx.xmlNode.id:++x3dom.nodeTypes.Shape.shaderPartID;x3dom.debug.assert(this._vf.type.toLowerCase()=='vertex'||this._vf.type.toLowerCase()=='fragment');},{nodeChanged:function() +{var ctx={};ctx.xmlNode=this._xmlNode;if(ctx.xmlNode!==undefined&&ctx.xmlNode!==null) +{var that=this;if(that._vf.url.length&&that._vf.url[0].indexOf('\n')==-1) +{var xhr=new XMLHttpRequest();xhr.open("GET",encodeURI(that._nameSpace.getURL(that._vf.url[0])),false);xhr.onload=function(){that._vf.url=new x3dom.fields.MFString([]);that._vf.url.push(xhr.response);};xhr.onerror=function(){x3dom.debug.logError("Could not load file '"+that._vf.url[0]+"'.");};xhr.send(null);} +else +{if(that._vf.url.length){that._vf.url=new x3dom.fields.MFString([]);} +try{that._vf.url.push(ctx.xmlNode.childNodes[1].nodeValue);ctx.xmlNode.removeChild(ctx.xmlNode.childNodes[1]);} +catch(e){Array.forEach(ctx.xmlNode.childNodes,function(childDomNode){if(childDomNode.nodeType===3){that._vf.url.push(childDomNode.nodeValue);} +else if(childDomNode.nodeType===4){that._vf.url.push(childDomNode.data);} +childDomNode.parentNode.removeChild(childDomNode);});}}} +Array.forEach(this._parentNodes,function(shader){shader.nodeChanged();});},fieldChanged:function(fieldName) +{if(fieldName==="url"){Array.forEach(this._parentNodes,function(shader){shader.fieldChanged("url");});}},parentAdded:function(parent) +{parent.nodeChanged();}}));x3dom.registerNodeType("X3DVertexAttributeNode","Shaders",defineClass(x3dom.nodeTypes.X3DGeometricPropertyNode,function(ctx){x3dom.nodeTypes.X3DVertexAttributeNode.superClass.call(this,ctx);this.addField_SFString(ctx,'name',"");}));x3dom.registerNodeType("FloatVertexAttribute","Shaders",defineClass(x3dom.nodeTypes.X3DVertexAttributeNode,function(ctx){x3dom.nodeTypes.FloatVertexAttribute.superClass.call(this,ctx);this.addField_SFInt32(ctx,'numComponents',4);this.addField_MFFloat(ctx,'value',[]);}));x3dom.registerNodeType("X3DSpatialGeometryNode","Geometry3D",defineClass(x3dom.nodeTypes.X3DGeometryNode,function(ctx){x3dom.nodeTypes.X3DSpatialGeometryNode.superClass.call(this,ctx);}));x3dom.registerNodeType("Plane","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.Plane.superClass.call(this,ctx);this.addField_SFVec2f(ctx,'size',2,2);this.addField_SFVec2f(ctx,'subdivision',1,1);this.addField_SFVec3f(ctx,'center',0,0,0);this.addField_MFString(ctx,'primType',['TRIANGLES']);if(this._vf.primType.length) +this._mesh._primType=this._vf.primType[0];var sx=this._vf.size.x,sy=this._vf.size.y;var subx=this._vf.subdivision.x,suby=this._vf.subdivision.y;var geoCacheID='Plane_'+sx+'-'+sy+'-'+subx+'-'+suby+'-'+ +this._vf.center.x+'-'+this._vf.center.y+'-'+this._vf.center.z;if(ctx&&this._vf.useGeoCache&&x3dom.geoCache[geoCacheID]!==undefined){this._mesh=x3dom.geoCache[geoCacheID];} +else{var x=0,y=0;var xstep=sx/subx;var ystep=sy/suby;sx/=2;sy/=2;for(y=0;y<=suby;y++){for(x=0;x<=subx;x++){this._mesh._positions[0].push(this._vf.center.x+x*xstep-sx);this._mesh._positions[0].push(this._vf.center.y+y*ystep-sy);this._mesh._positions[0].push(this._vf.center.z);this._mesh._normals[0].push(0);this._mesh._normals[0].push(0);this._mesh._normals[0].push(1);this._mesh._texCoords[0].push(x/subx);this._mesh._texCoords[0].push(y/suby);}} +for(y=1;y<=suby;y++){for(x=0;x<subx;x++){this._mesh._indices[0].push((y-1)*(subx+1)+x);this._mesh._indices[0].push((y-1)*(subx+1)+x+1);this._mesh._indices[0].push(y*(subx+1)+x);this._mesh._indices[0].push(y*(subx+1)+x);this._mesh._indices[0].push((y-1)*(subx+1)+x+1);this._mesh._indices[0].push(y*(subx+1)+x+1);}} +this._mesh._invalidate=true;this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;x3dom.geoCache[geoCacheID]=this._mesh;}},{fieldChanged:function(fieldName){if(fieldName=="size"||fieldName=="center"){this._mesh._positions[0]=[];var sx=this._vf.size.x,sy=this._vf.size.y;var subx=this._vf.subdivision.x,suby=this._vf.subdivision.y;var x=0,y=0;var xstep=sx/subx;var ystep=sy/suby;sx/=2;sy/=2;for(y=0;y<=suby;y++){for(x=0;x<=subx;x++){this._mesh._positions[0].push(this._vf.center.x+x*xstep-sx);this._mesh._positions[0].push(this._vf.center.y+y*ystep-sy);this._mesh._positions[0].push(this._vf.center.z);}} +this.invalidateVolume();this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName=="subdivision"){this._mesh._positions[0]=[];this._mesh._indices[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];var sx=this._vf.size.x,sy=this._vf.size.y;var subx=this._vf.subdivision.x,suby=this._vf.subdivision.y;var x=0,y=0;var xstep=sx/subx;var ystep=sy/suby;sx/=2;sy/=2;for(y=0;y<=suby;y++){for(x=0;x<=subx;x++){this._mesh._positions[0].push(this._vf.center.x+x*xstep-sx);this._mesh._positions[0].push(this._vf.center.y+y*ystep-sy);this._mesh._positions[0].push(this._vf.center.z);this._mesh._normals[0].push(0);this._mesh._normals[0].push(0);this._mesh._normals[0].push(1);this._mesh._texCoords[0].push(x/subx);this._mesh._texCoords[0].push(y/suby);}} +for(y=1;y<=suby;y++){for(x=0;x<subx;x++){this._mesh._indices[0].push((y-1)*(subx+1)+x);this._mesh._indices[0].push((y-1)*(subx+1)+x+1);this._mesh._indices[0].push(y*(subx+1)+x);this._mesh._indices[0].push(y*(subx+1)+x);this._mesh._indices[0].push((y-1)*(subx+1)+x+1);this._mesh._indices[0].push(y*(subx+1)+x+1);}} +this.invalidateVolume();this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node.setAllDirty();node.invalidateVolume();});}}}));x3dom.registerNodeType("Box","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.Box.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'size',2,2,2);this.addField_SFBool(ctx,'hasHelperColors',false);var sx=this._vf.size.x,sy=this._vf.size.y,sz=this._vf.size.z;var geoCacheID='Box_'+sx+'-'+sy+'-'+sz;if(this._vf.useGeoCache&&x3dom.geoCache[geoCacheID]!==undefined) +{this._mesh=x3dom.geoCache[geoCacheID];} +else +{sx/=2;sy/=2;sz/=2;this._mesh._positions[0]=[-sx,-sy,-sz,-sx,sy,-sz,sx,sy,-sz,sx,-sy,-sz,-sx,-sy,sz,-sx,sy,sz,sx,sy,sz,sx,-sy,sz,-sx,-sy,-sz,-sx,-sy,sz,-sx,sy,sz,-sx,sy,-sz,sx,-sy,-sz,sx,-sy,sz,sx,sy,sz,sx,sy,-sz,-sx,sy,-sz,-sx,sy,sz,sx,sy,sz,sx,sy,-sz,-sx,-sy,-sz,-sx,-sy,sz,sx,-sy,sz,sx,-sy,-sz];this._mesh._normals[0]=[0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0];this._mesh._texCoords[0]=[1,0,1,1,0,1,0,0,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,0];if(this._vf.hasHelperColors){this._mesh._colors[0]=[0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0];} +this._mesh._indices[0]=[0,1,2,2,3,0,4,7,5,5,7,6,8,9,10,10,11,8,12,14,13,14,12,15,16,17,18,18,19,16,20,22,21,22,20,23];this._mesh._invalidate=true;this._mesh._numFaces=12;this._mesh._numCoords=24;x3dom.geoCache[geoCacheID]=this._mesh;}},{fieldChanged:function(fieldName) +{if(fieldName==="size"){var sx=this._vf.size.x/2,sy=this._vf.size.y/2,sz=this._vf.size.z/2;this._mesh._positions[0]=[-sx,-sy,-sz,-sx,sy,-sz,sx,sy,-sz,sx,-sy,-sz,-sx,-sy,sz,-sx,sy,sz,sx,sy,sz,sx,-sy,sz,-sx,-sy,-sz,-sx,-sy,sz,-sx,sy,sz,-sx,sy,-sz,sx,-sy,-sz,sx,-sy,sz,sx,sy,sz,sx,sy,-sz,-sx,sy,-sz,-sx,sy,sz,sx,sy,sz,sx,sy,-sz,-sx,-sy,-sz,-sx,-sy,sz,sx,-sy,sz,sx,-sy,-sz];this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName==="hasHelperColors"){if(this._vf.hasHelperColors){this._mesh._colors[0]=[0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0];} +else{this._mesh._colors[0]=[];} +Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});}}}));x3dom.registerNodeType("Sphere","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.Sphere.superClass.call(this,ctx);this.addField_SFFloat(ctx,'radius',ctx?1:10000);this.addField_SFVec2f(ctx,'subdivision',24,24);var qfactor=1.0;var r=this._vf.radius;var subx=this._vf.subdivision.x,suby=this._vf.subdivision.y;var geoCacheID='Sphere_'+r+'-'+subx+'-'+suby;if(this._vf.useGeoCache&&x3dom.geoCache[geoCacheID]!==undefined){this._mesh=x3dom.geoCache[geoCacheID];} +else{if(ctx){qfactor=ctx.doc.properties.getProperty("PrimitiveQuality","Medium");} +if(!x3dom.Utils.isNumber(qfactor)){switch(qfactor.toLowerCase()){case"low":qfactor=0.3;break;case"medium":qfactor=0.5;break;case"high":qfactor=1.0;break;}}else{qfactor=parseFloat(qfactor);} +this._quality=qfactor;var latNumber,longNumber;var latitudeBands=Math.floor(subx*qfactor);var longitudeBands=Math.floor(suby*qfactor);var theta,sinTheta,cosTheta;var phi,sinPhi,cosPhi;var x,y,z,u,v;for(latNumber=0;latNumber<=latitudeBands;latNumber++){theta=(latNumber*Math.PI)/latitudeBands;sinTheta=Math.sin(theta);cosTheta=Math.cos(theta);for(longNumber=0;longNumber<=longitudeBands;longNumber++){phi=(longNumber*2.0*Math.PI)/longitudeBands;sinPhi=Math.sin(phi);cosPhi=Math.cos(phi);x=-cosPhi*sinTheta;y=-cosTheta;z=-sinPhi*sinTheta;u=0.25-(longNumber/longitudeBands);v=latNumber/latitudeBands;this._mesh._positions[0].push(r*x);this._mesh._positions[0].push(r*y);this._mesh._positions[0].push(r*z);this._mesh._normals[0].push(x);this._mesh._normals[0].push(y);this._mesh._normals[0].push(z);this._mesh._texCoords[0].push(u);this._mesh._texCoords[0].push(v);}} +var first,second;for(latNumber=0;latNumber<latitudeBands;latNumber++){for(longNumber=0;longNumber<longitudeBands;longNumber++){first=(latNumber*(longitudeBands+1))+longNumber;second=first+longitudeBands+1;this._mesh._indices[0].push(first);this._mesh._indices[0].push(second);this._mesh._indices[0].push(first+1);this._mesh._indices[0].push(second);this._mesh._indices[0].push(second+1);this._mesh._indices[0].push(first+1);}} +this._mesh._invalidate=true;this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;x3dom.geoCache[geoCacheID]=this._mesh;}},{fieldChanged:function(fieldName){if(fieldName==="radius"){this._mesh._positions[0]=[];var r=this._vf.radius;var subx=this._vf.subdivision.x,suby=this._vf.subdivision.y;var qfactor=this._quality;var latNumber,longNumber;var latitudeBands=Math.floor(subx*qfactor);var longitudeBands=Math.floor(suby*qfactor);var theta,sinTheta,cosTheta;var phi,sinPhi,cosPhi;var x,y,z;for(latNumber=0;latNumber<=latitudeBands;latNumber++){theta=(latNumber*Math.PI)/latitudeBands;sinTheta=Math.sin(theta);cosTheta=Math.cos(theta);for(longNumber=0;longNumber<=longitudeBands;longNumber++){phi=(longNumber*2.0*Math.PI)/longitudeBands;sinPhi=Math.sin(phi);cosPhi=Math.cos(phi);x=-cosPhi*sinTheta;y=-cosTheta;z=-sinPhi*sinTheta;this._mesh._positions[0].push(r*x);this._mesh._positions[0].push(r*y);this._mesh._positions[0].push(r*z);}} +this.invalidateVolume();this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName==="subdivision"){this._mesh._positions[0]=[];this._mesh._indices[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];var r=this._vf.radius;var subx=this._vf.subdivision.x,suby=this._vf.subdivision.y;var qfactor=this._quality;var latNumber,longNumber;var latitudeBands=Math.floor(subx*qfactor);var longitudeBands=Math.floor(suby*qfactor);var theta,sinTheta,cosTheta;var phi,sinPhi,cosPhi;var x,y,z,u,v;for(latNumber=0;latNumber<=latitudeBands;latNumber++){theta=(latNumber*Math.PI)/latitudeBands;sinTheta=Math.sin(theta);cosTheta=Math.cos(theta);for(longNumber=0;longNumber<=longitudeBands;longNumber++){phi=(longNumber*2.0*Math.PI)/longitudeBands;sinPhi=Math.sin(phi);cosPhi=Math.cos(phi);x=-cosPhi*sinTheta;y=-cosTheta;z=-sinPhi*sinTheta;u=0.25-(longNumber/longitudeBands);v=latNumber/latitudeBands;this._mesh._positions[0].push(r*x);this._mesh._positions[0].push(r*y);this._mesh._positions[0].push(r*z);this._mesh._normals[0].push(x);this._mesh._normals[0].push(y);this._mesh._normals[0].push(z);this._mesh._texCoords[0].push(u);this._mesh._texCoords[0].push(v);}} +var first,second;for(latNumber=0;latNumber<latitudeBands;latNumber++){for(longNumber=0;longNumber<longitudeBands;longNumber++){first=(latNumber*(longitudeBands+1))+longNumber;second=first+longitudeBands+1;this._mesh._indices[0].push(first);this._mesh._indices[0].push(second);this._mesh._indices[0].push(first+1);this._mesh._indices[0].push(second);this._mesh._indices[0].push(second+1);this._mesh._indices[0].push(first+1);}} +this.invalidateVolume();this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node.setAllDirty();node.invalidateVolume();});}}}));x3dom.registerNodeType("Torus","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.Torus.superClass.call(this,ctx);var twoPi=2.0*Math.PI;this.addField_SFFloat(ctx,'innerRadius',0.5);this.addField_SFFloat(ctx,'outerRadius',1.0);this.addField_SFFloat(ctx,'angle',twoPi);this.addField_SFBool(ctx,'caps',true);this.addField_SFVec2f(ctx,'subdivision',24,24);this.addField_SFBool(ctx,'insideOutsideRadius',false);if(this._vf.angle<0) +this._vf.angle=0;else if(this._vf.angle>twoPi) +this._vf.angle=twoPi;this._origCCW=this._vf.ccw;var innerRadius=this._vf.innerRadius;var outerRadius=this._vf.outerRadius;if(this._vf.insideOutsideRadius==true) +{if(innerRadius>outerRadius){var tmp=innerRadius;innerRadius=outerRadius;outerRadius=tmp;} +var rad=(outerRadius-innerRadius)/2;outerRadius=innerRadius+rad;innerRadius=rad;this._vf.ccw=!this._origCCW;} +var rings=this._vf.subdivision.x,sides=this._vf.subdivision.y;rings=Math.max(3,Math.round((this._vf.angle/twoPi)*rings));var geoCacheID='Torus_'+innerRadius+'_'+outerRadius+'_'+this._vf.angle+'_'+ +this._vf.subdivision+'-'+this._vf.caps;if(this._vf.useGeoCache&&x3dom.geoCache[geoCacheID]!==undefined) +{this._mesh=x3dom.geoCache[geoCacheID];} +else +{var ringDelta=this._vf.angle/rings;var sideDelta=twoPi/sides;var a,b,theta,phi;var cosTheta,sinTheta,cosPhi,sinPhi,dist;for(a=0,theta=0;a<=rings;a++,theta+=ringDelta) +{cosTheta=Math.cos(theta);sinTheta=Math.sin(theta);for(b=0,phi=0;b<=sides;b++,phi+=sideDelta) +{cosPhi=Math.cos(phi);sinPhi=Math.sin(phi);dist=outerRadius+innerRadius*cosPhi;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(cosTheta*dist,innerRadius*sinPhi,-sinTheta*dist);this._mesh._normals[0].push(cosTheta*cosPhi,sinPhi,-sinTheta*cosPhi);} +else{this._mesh._positions[0].push(cosTheta*dist,-sinTheta*dist,innerRadius*sinPhi);this._mesh._normals[0].push(cosTheta*cosPhi,-sinTheta*cosPhi,sinPhi);} +this._mesh._texCoords[0].push(-a/rings,b/sides);}} +for(a=0;a<sides;a++) +{for(b=0;b<rings;b++) +{this._mesh._indices[0].push(b*(sides+1)+a);this._mesh._indices[0].push(b*(sides+1)+a+1);this._mesh._indices[0].push((b+1)*(sides+1)+a);this._mesh._indices[0].push(b*(sides+1)+a+1);this._mesh._indices[0].push((b+1)*(sides+1)+a+1);this._mesh._indices[0].push((b+1)*(sides+1)+a);}} +if(this._vf.angle<twoPi&&this._vf.caps==true) +{var origPos=this._mesh._positions[0].length/3;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(outerRadius,0,0);this._mesh._normals[0].push(0,0,1);} +else{this._mesh._positions[0].push(outerRadius,0,0);this._mesh._normals[0].push(0,1,0);} +this._mesh._texCoords[0].push(0.5,0.5);for(b=0,phi=0;b<=sides;b++,phi+=sideDelta) +{cosPhi=Math.cos(phi);sinPhi=Math.sin(phi);dist=outerRadius+innerRadius*cosPhi;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(dist,sinPhi*innerRadius,0);this._mesh._normals[0].push(0,0,1);} +else{this._mesh._positions[0].push(dist,0,sinPhi*innerRadius);this._mesh._normals[0].push(0,1,0);} +this._mesh._texCoords[0].push((1+cosPhi)*0.5,(1-sinPhi)*0.5);if(b>0){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+b);this._mesh._indices[0].push(origPos+b-1);} +if(b==sides){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+1);this._mesh._indices[0].push(origPos+b);}} +cosTheta=Math.cos(this._vf.angle);sinTheta=Math.sin(this._vf.angle);origPos=this._mesh._positions[0].length/3;var nx=-sinTheta,ny=-cosTheta;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(cosTheta*outerRadius,0,-sinTheta*outerRadius);this._mesh._normals[0].push(nx,0,ny);} +else{this._mesh._positions[0].push(cosTheta*outerRadius,-sinTheta*outerRadius,0);this._mesh._normals[0].push(nx,ny,0);} +this._mesh._texCoords[0].push(0.5,0.5);for(b=0,phi=0;b<=sides;b++,phi+=sideDelta) +{cosPhi=Math.cos(phi);sinPhi=Math.sin(phi);dist=outerRadius+innerRadius*cosPhi;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(cosTheta*dist,sinPhi*innerRadius,-sinTheta*dist);this._mesh._normals[0].push(nx,0,ny);} +else{this._mesh._positions[0].push(cosTheta*dist,-sinTheta*dist,sinPhi*innerRadius);this._mesh._normals[0].push(nx,ny,0);} +this._mesh._texCoords[0].push(1-(1+cosPhi)*0.5,(1-sinPhi)*0.5);if(b>0){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+b-1);this._mesh._indices[0].push(origPos+b);} +if(b==sides){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+b);this._mesh._indices[0].push(origPos+1);}}} +this._mesh._invalidate=true;this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;x3dom.geoCache[geoCacheID]=this._mesh;}},{fieldChanged:function(fieldName) +{if(fieldName=="innerRadius"||fieldName=="outerRadius"||fieldName=="subdivision"||fieldName=="angle"||fieldName=="insideOutsideRadius"||fieldName=="caps") +{var twoPi=2.0*Math.PI;if(this._vf.angle<0) +this._vf.angle=0;else if(this._vf.angle>twoPi) +this._vf.angle=twoPi;var innerRadius=this._vf.innerRadius;var outerRadius=this._vf.outerRadius;if(this._vf.insideOutsideRadius==true) +{if(innerRadius>outerRadius){var tmp=innerRadius;innerRadius=outerRadius;outerRadius=tmp;} +var rad=(outerRadius-innerRadius)/2;outerRadius=innerRadius+rad;innerRadius=rad;this._vf.ccw=!this._origCCW;} +else +this._vf.ccw=this._origCCW;var rings=this._vf.subdivision.x,sides=this._vf.subdivision.y;rings=Math.max(3,Math.round((this._vf.angle/twoPi)*rings));var ringDelta=this._vf.angle/rings;var sideDelta=twoPi/sides;var a,b,theta,phi;var cosTheta,sinTheta,cosPhi,sinPhi,dist;this._mesh._positions[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];this._mesh._indices[0]=[];for(a=0,theta=0;a<=rings;a++,theta+=ringDelta) +{cosTheta=Math.cos(theta);sinTheta=Math.sin(theta);for(b=0,phi=0;b<=sides;b++,phi+=sideDelta) +{cosPhi=Math.cos(phi);sinPhi=Math.sin(phi);dist=outerRadius+innerRadius*cosPhi;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(cosTheta*dist,innerRadius*sinPhi,-sinTheta*dist);this._mesh._normals[0].push(cosTheta*cosPhi,sinPhi,-sinTheta*cosPhi);} +else{this._mesh._positions[0].push(cosTheta*dist,-sinTheta*dist,innerRadius*sinPhi);this._mesh._normals[0].push(cosTheta*cosPhi,-sinTheta*cosPhi,sinPhi);} +this._mesh._texCoords[0].push(-a/rings,b/sides);}} +for(a=0;a<sides;a++) +{for(b=0;b<rings;b++) +{this._mesh._indices[0].push(b*(sides+1)+a);this._mesh._indices[0].push(b*(sides+1)+a+1);this._mesh._indices[0].push((b+1)*(sides+1)+a);this._mesh._indices[0].push(b*(sides+1)+a+1);this._mesh._indices[0].push((b+1)*(sides+1)+a+1);this._mesh._indices[0].push((b+1)*(sides+1)+a);}} +if(this._vf.angle<twoPi&&this._vf.caps==true) +{var origPos=this._mesh._positions[0].length/3;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(outerRadius,0,0);this._mesh._normals[0].push(0,0,1);} +else{this._mesh._positions[0].push(outerRadius,0,0);this._mesh._normals[0].push(0,1,0);} +this._mesh._texCoords[0].push(0.5,0.5);for(b=0,phi=0;b<=sides;b++,phi+=sideDelta) +{cosPhi=Math.cos(phi);sinPhi=Math.sin(phi);dist=outerRadius+innerRadius*cosPhi;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(dist,sinPhi*innerRadius,0);this._mesh._normals[0].push(0,0,1);} +else{this._mesh._positions[0].push(dist,0,sinPhi*innerRadius);this._mesh._normals[0].push(0,1,0);} +this._mesh._texCoords[0].push((1+cosPhi)*0.5,(1-sinPhi)*0.5);if(b>0){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+b);this._mesh._indices[0].push(origPos+b-1);} +if(b==sides){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+1);this._mesh._indices[0].push(origPos+b);}} +cosTheta=Math.cos(this._vf.angle);sinTheta=Math.sin(this._vf.angle);origPos=this._mesh._positions[0].length/3;var nx=-sinTheta,ny=-cosTheta;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(cosTheta*outerRadius,0,-sinTheta*outerRadius);this._mesh._normals[0].push(nx,0,ny);} +else{this._mesh._positions[0].push(cosTheta*outerRadius,-sinTheta*outerRadius,0);this._mesh._normals[0].push(nx,ny,0);} +this._mesh._texCoords[0].push(0.5,0.5);for(b=0,phi=0;b<=sides;b++,phi+=sideDelta) +{cosPhi=Math.cos(phi);sinPhi=Math.sin(phi);dist=outerRadius+innerRadius*cosPhi;if(this._vf.insideOutsideRadius){this._mesh._positions[0].push(cosTheta*dist,sinPhi*innerRadius,-sinTheta*dist);this._mesh._normals[0].push(nx,0,ny);} +else{this._mesh._positions[0].push(cosTheta*dist,-sinTheta*dist,sinPhi*innerRadius);this._mesh._normals[0].push(nx,ny,0);} +this._mesh._texCoords[0].push(1-(1+cosPhi)*0.5,(1-sinPhi)*0.5);if(b>0){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+b-1);this._mesh._indices[0].push(origPos+b);} +if(b==sides){this._mesh._indices[0].push(origPos);this._mesh._indices[0].push(origPos+b);this._mesh._indices[0].push(origPos+1);}}} +this.invalidateVolume();this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node.setAllDirty();node.invalidateVolume();});}}}));x3dom.registerNodeType("Cone","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.Cone.superClass.call(this,ctx);this.addField_SFFloat(ctx,'bottomRadius',1.0);this.addField_SFFloat(ctx,'topRadius',0);this.addField_SFFloat(ctx,'height',2.0);this.addField_SFBool(ctx,'bottom',true);this.addField_SFBool(ctx,'side',true);this.addField_SFBool(ctx,'top',true);this.addField_SFFloat(ctx,'subdivision',32);var geoCacheID='Cone_'+this._vf.bottomRadius+'_'+this._vf.height+'_'+this._vf.top+'_'+ +this._vf.bottom+'_'+this._vf.side+'_'+this._vf.topRadius+'_'+this._vf.subdivision;if(this._vf.useGeoCache&&x3dom.geoCache[geoCacheID]!==undefined){this._mesh=x3dom.geoCache[geoCacheID];} +else{var bottomRadius=this._vf.bottomRadius,height=this._vf.height;var topRadius=this._vf.topRadius,sides=this._vf.subdivision;var beta,x,z;var delta=2.0*Math.PI/sides;var incl=(bottomRadius-topRadius)/height;var nlen=1.0/Math.sqrt(1.0+incl*incl);var j=0,k=0;var h,base;if(this._vf.side&&height>0){var px=0,pz=0;for(j=0,k=0;j<=sides;j++){beta=j*delta;x=Math.sin(beta);z=-Math.cos(beta);if(topRadius>x3dom.fields.Eps){px=x*topRadius;pz=z*topRadius;} +this._mesh._positions[0].push(px,height/2,pz);this._mesh._normals[0].push(x/nlen,incl/nlen,z/nlen);this._mesh._texCoords[0].push(1.0-j/sides,1);this._mesh._positions[0].push(x*bottomRadius,-height/2,z*bottomRadius);this._mesh._normals[0].push(x/nlen,incl/nlen,z/nlen);this._mesh._texCoords[0].push(1.0-j/sides,0);if(j>0){this._mesh._indices[0].push(k);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+3);k+=2;}}} +if(this._vf.bottom&&bottomRadius>0){base=this._mesh._positions[0].length/3;for(j=sides-1;j>=0;j--){beta=j*delta;x=bottomRadius*Math.sin(beta);z=-bottomRadius*Math.cos(beta);this._mesh._positions[0].push(x,-height/2,z);this._mesh._normals[0].push(0,-1,0);this._mesh._texCoords[0].push(x/bottomRadius/2+0.5,z/bottomRadius/2+0.5);} +h=base+1;for(j=2;j<sides;j++){this._mesh._indices[0].push(h);this._mesh._indices[0].push(base);h=base+j;this._mesh._indices[0].push(h);}} +if(this._vf.top&&topRadius>x3dom.fields.Eps){base=this._mesh._positions[0].length/3;for(j=sides-1;j>=0;j--){beta=j*delta;x=topRadius*Math.sin(beta);z=-topRadius*Math.cos(beta);this._mesh._positions[0].push(x,height/2,z);this._mesh._normals[0].push(0,1,0);this._mesh._texCoords[0].push(x/topRadius/2+0.5,1.0-z/topRadius/2+0.5);} +h=base+1;for(j=2;j<sides;j++){this._mesh._indices[0].push(base);this._mesh._indices[0].push(h);h=base+j;this._mesh._indices[0].push(h);}} +this._mesh._invalidate=true;this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;x3dom.geoCache[geoCacheID]=this._mesh;}},{fieldChanged:function(fieldName) +{if(fieldName=="bottomRadius"||fieldName=="topRadius"||fieldName=="height"||fieldName=="subdivision"||fieldName=="bottom"||fieldName=="top"||fieldName=="side") +{this._mesh._positions[0]=[];this._mesh._indices[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];var bottomRadius=this._vf.bottomRadius,height=this._vf.height;var topRadius=this._vf.topRadius,sides=this._vf.subdivision;var beta,x,z;var delta=2.0*Math.PI/sides;var incl=(bottomRadius-topRadius)/height;var nlen=1.0/Math.sqrt(1.0+incl*incl);var j=0,k=0;var h,base;if(this._vf.side&&height>0) +{var px=0,pz=0;for(j=0,k=0;j<=sides;j++){beta=j*delta;x=Math.sin(beta);z=-Math.cos(beta);if(topRadius>x3dom.fields.Eps){px=x*topRadius;pz=z*topRadius;} +this._mesh._positions[0].push(px,height/2,pz);this._mesh._normals[0].push(x/nlen,incl/nlen,z/nlen);this._mesh._texCoords[0].push(1.0-j/sides,1);this._mesh._positions[0].push(x*bottomRadius,-height/2,z*bottomRadius);this._mesh._normals[0].push(x/nlen,incl/nlen,z/nlen);this._mesh._texCoords[0].push(1.0-j/sides,0);if(j>0){this._mesh._indices[0].push(k);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+3);k+=2;}}} +if(this._vf.bottom&&bottomRadius>0) +{base=this._mesh._positions[0].length/3;for(j=sides-1;j>=0;j--){beta=j*delta;x=bottomRadius*Math.sin(beta);z=-bottomRadius*Math.cos(beta);this._mesh._positions[0].push(x,-height/2,z);this._mesh._normals[0].push(0,-1,0);this._mesh._texCoords[0].push(x/bottomRadius/2+0.5,z/bottomRadius/2+0.5);} +h=base+1;for(j=2;j<sides;j++){this._mesh._indices[0].push(h);this._mesh._indices[0].push(base);h=base+j;this._mesh._indices[0].push(h);}} +if(this._vf.top&&topRadius>x3dom.fields.Eps) +{base=this._mesh._positions[0].length/3;for(j=sides-1;j>=0;j--){beta=j*delta;x=topRadius*Math.sin(beta);z=-topRadius*Math.cos(beta);this._mesh._positions[0].push(x,height/2,z);this._mesh._normals[0].push(0,1,0);this._mesh._texCoords[0].push(x/topRadius/2+0.5,1.0-z/topRadius/2+0.5);} +h=base+1;for(j=2;j<sides;j++){this._mesh._indices[0].push(base);this._mesh._indices[0].push(h);h=base+j;this._mesh._indices[0].push(h);}} +this.invalidateVolume();this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node.setAllDirty();node.invalidateVolume();});}}}));x3dom.registerNodeType("Cylinder","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.Cylinder.superClass.call(this,ctx);this.addField_SFFloat(ctx,'radius',1.0);this.addField_SFFloat(ctx,'height',2.0);this.addField_SFBool(ctx,'bottom',true);this.addField_SFBool(ctx,'top',true);this.addField_SFFloat(ctx,'subdivision',32);this.addField_SFBool(ctx,'side',true);var sides=this._vf.subdivision;var geoCacheID='Cylinder_'+this._vf.radius+'_'+this._vf.height+'_'+this._vf.bottom+'_'+this._vf.top+'_'+ +this._vf.side+'_'+this._vf.subdivision;if(this._vf.useGeoCache&&x3dom.geoCache[geoCacheID]!==undefined) +{this._mesh=x3dom.geoCache[geoCacheID];} +else +{var radius=this._vf.radius;var height=this._vf.height/2;var beta,x,z;var delta=2.0*Math.PI/sides;var j,k;if(this._vf.side) +{for(j=0,k=0;j<=sides;j++) +{beta=j*delta;x=Math.sin(beta);z=-Math.cos(beta);this._mesh._positions[0].push(x*radius,-height,z*radius);this._mesh._normals[0].push(x,0,z);this._mesh._texCoords[0].push(1.0-j/sides,0);this._mesh._positions[0].push(x*radius,height,z*radius);this._mesh._normals[0].push(x,0,z);this._mesh._texCoords[0].push(1.0-j/sides,1);if(j>0) +{this._mesh._indices[0].push(k);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+3);k+=2;}}} +if(radius>0) +{var h,base=this._mesh._positions[0].length/3;if(this._vf.top) +{for(j=sides-1;j>=0;j--) +{beta=j*delta;x=radius*Math.sin(beta);z=-radius*Math.cos(beta);this._mesh._positions[0].push(x,height,z);this._mesh._normals[0].push(0,1,0);this._mesh._texCoords[0].push(x/radius/2+0.5,-z/radius/2+0.5);} +h=base+1;for(j=2;j<sides;j++) +{this._mesh._indices[0].push(base);this._mesh._indices[0].push(h);h=base+j;this._mesh._indices[0].push(h);} +base=this._mesh._positions[0].length/3;} +if(this._vf.bottom) +{for(j=sides-1;j>=0;j--) +{beta=j*delta;x=radius*Math.sin(beta);z=-radius*Math.cos(beta);this._mesh._positions[0].push(x,-height,z);this._mesh._normals[0].push(0,-1,0);this._mesh._texCoords[0].push(x/radius/2+0.5,z/radius/2+0.5);} +h=base+1;for(j=2;j<sides;j++) +{this._mesh._indices[0].push(h);this._mesh._indices[0].push(base);h=base+j;this._mesh._indices[0].push(h);}}} +this._mesh._invalidate=true;this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;x3dom.geoCache[geoCacheID]=this._mesh;}},{fieldChanged:function(fieldName){if(fieldName==="radius"||fieldName==="height") +{this._mesh._positions[0]=[];var radius=this._vf.radius,height=this._vf.height/2;var sides=this._vf.subdivision;var beta,x,z,j;var delta=2.0*Math.PI/sides;if(this._vf.side) +{for(j=0;j<=sides;j++) +{beta=j*delta;x=Math.sin(beta);z=-Math.cos(beta);this._mesh._positions[0].push(x*radius,-height,z*radius);this._mesh._positions[0].push(x*radius,height,z*radius);}} +if(radius>0) +{var h,base=this._mesh._positions[0].length/3;if(this._vf.top) +{for(j=sides-1;j>=0;j--) +{beta=j*delta;x=radius*Math.sin(beta);z=-radius*Math.cos(beta);this._mesh._positions[0].push(x,height,z);}}} +if(this._vf.bottom) +{for(j=sides-1;j>=0;j--) +{beta=j*delta;x=radius*Math.sin(beta);z=-radius*Math.cos(beta);this._mesh._positions[0].push(x,-height,z);}} +this.invalidateVolume();this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node.invalidateVolume();});} +else if(fieldName==="subdivision"||fieldName==="bottom"||fieldName==="top"||fieldName==="side") +{this._mesh._positions[0]=[];this._mesh._indices[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];var radius=this._vf.radius,height=this._vf.height/2;var sides=this._vf.subdivision;var beta,x,z,j;var delta=2.0*Math.PI/sides;var k=0;if(this._vf.side) +{for(j=0,k=0;j<=sides;j++) +{beta=j*delta;x=Math.sin(beta);z=-Math.cos(beta);this._mesh._positions[0].push(x*radius,-height,z*radius);this._mesh._normals[0].push(x,0,z);this._mesh._texCoords[0].push(1.0-j/sides,0);this._mesh._positions[0].push(x*radius,height,z*radius);this._mesh._normals[0].push(x,0,z);this._mesh._texCoords[0].push(1.0-j/sides,1);if(j>0) +{this._mesh._indices[0].push(k+0);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+2);this._mesh._indices[0].push(k+1);this._mesh._indices[0].push(k+3);k+=2;}}} +if(radius>0) +{var h,base=this._mesh._positions[0].length/3;if(this._vf.top) +{for(j=sides-1;j>=0;j--) +{beta=j*delta;x=radius*Math.sin(beta);z=-radius*Math.cos(beta);this._mesh._positions[0].push(x,height,z);this._mesh._normals[0].push(0,1,0);this._mesh._texCoords[0].push(x/radius/2+0.5,-z/radius/2+0.5);} +h=base+1;for(j=2;j<sides;j++) +{this._mesh._indices[0].push(base);this._mesh._indices[0].push(h);h=base+j;this._mesh._indices[0].push(h);} +base=this._mesh._positions[0].length/3;} +if(this._vf.bottom) +{for(j=sides-1;j>=0;j--) +{beta=j*delta;x=radius*Math.sin(beta);z=-radius*Math.cos(beta);this._mesh._positions[0].push(x,-height,z);this._mesh._normals[0].push(0,-1,0);this._mesh._texCoords[0].push(x/radius/2+0.5,z/radius/2+0.5);} +h=base+1;for(j=2;j<sides;j++) +{this._mesh._indices[0].push(h);this._mesh._indices[0].push(base);h=base+j;this._mesh._indices[0].push(h);}}} +this.invalidateVolume();this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;Array.forEach(this._parentNodes,function(node){node.setAllDirty();node.invalidateVolume();});}}}));x3dom.registerNodeType("ExternalGeometry","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.ExternalGeometry.superClass.call(this,ctx);this.addField_SFString(ctx,'url',"");this._mesh._invalidate=false;this._mesh._numCoords=0;this._mesh._numFaces=0;},{updateRenderData:function(shape,shaderProgram,gl,viewarea,context){var that=this;var xhr;if(this._vf['url']==""){return;} +if(x3dom.BinaryContainerLoader.outOfMemory){return;} +shape._webgl.internalDownloadCount=1;shape._nameSpace.doc.downloadCount=1;xhr=new XMLHttpRequest();xhr.open("GET",encodeURI(this._vf['url']),true);xhr.responseType="arraybuffer";xhr.send(null);xhr.onerror=function(){x3dom.debug.logError("Unable to load SRC data from URL \""+encodeURI(that._vf['url'])+"\"");};xhr.onload=function(){shape._webgl.internalDownloadCount=0;shape._nameSpace.doc.downloadCount=0;var responseBeginUint32=new Uint32Array(xhr.response,0,12);var srcHeaderSize,srcBodySize,srcBodyOffset;var srcHeaderView,srcBodyView;var srcHeaderObj;if(xhr.status==200&&responseBeginUint32.length>=3){srcHeaderSize=responseBeginUint32[2];srcBodyOffset=srcHeaderSize+12;srcBodySize=xhr.response.byteLength-srcBodyOffset;if(srcHeaderSize>0&&srcBodySize>=0) +{srcHeaderView=new Uint8Array(xhr.response,12,srcHeaderSize);srcBodyView=new Uint8Array(xhr.response,srcBodyOffset,srcBodySize);try +{srcHeaderObj=JSON.parse(String.fromCharCode.apply(null,srcHeaderView));} +catch(exc) +{x3dom.debug.logError("Unable to parse SRC header: "+exc);return;} +that._updateRenderDataFromSRC(shape,shaderProgram,gl,srcHeaderObj,srcBodyView);} +else +{x3dom.debug.logError("Invalid SRC data, loaded from URL \""+ +encodeURI(that._vf['url'])+"\"");return;}} +else +{x3dom.debug.logError("Unable to load SRC data from URL \""+encodeURI(that._vf['url'])+"\"");}};},_updateRenderDataFromSRC:function(shape,shaderProgram,gl,srcHeaderObj,srcBodyView) +{var INDEX_BUFFER_IDX=0;var POSITION_BUFFER_IDX=1;var NORMAL_BUFFER_IDX=2;var TEXCOORD_BUFFER_IDX=3;var COLOR_BUFFER_IDX=4;var ID_BUFFER_IDX=5;var MAX_NUM_BUFFERS_PER_DRAW=6;var indexViews=srcHeaderObj["accessors"]["indexViews"];var indexViewID,indexView;var attributeViews=srcHeaderObj["accessors"]["attributeViews"];var attributes;var attributeID,attributeView;var x3domTypeID,x3domShortTypeID,numComponents;var meshes=srcHeaderObj["meshes"];var mesh,meshID;var meshIdx,bufferOffset;var viewIDsToGLBufferIDs={};var indexViewBufferIDs={};for(indexViewID in indexViews) +{indexView=indexViews[indexViewID];indexViewBufferIDs[indexView["bufferView"]]=true;} +this._createGLBuffersFromSRCChunks(gl,srcHeaderObj["bufferChunks"],srcHeaderObj["bufferViews"],srcBodyView,indexViewBufferIDs,viewIDsToGLBufferIDs);for(indexViewID in indexViews) +{indexView=indexViews[indexViewID];if(indexView["componentType"]!=gl.UNSIGNED_SHORT) +{x3dom.debug.logWarning("SRC index componentType "+indexView["componentType"]+" is not UNSIGNED_SHORT. "+"Ignoring given value and assuming UNSIGNED_SHORT indices.");} +shape._webgl.indexType=gl.UNSIGNED_SHORT;} +meshIdx=0;bufferOffset=0;shape._webgl.primType=[];shape._webgl.indexOffset=[];shape._webgl.drawCount=[];this._mesh._numCoords=0;this._mesh._numFaces=0;for(meshID in meshes) +{mesh=meshes[meshID];indexViewID=mesh["indices"];if(indexViewID!="") +{shape._webgl.externalGeometry=1;indexView=indexViews[indexViewID];shape._webgl.indexOffset[meshIdx]=indexView["byteOffset"];shape._webgl.drawCount[meshIdx]=indexView["count"];shape._webgl.buffers[INDEX_BUFFER_IDX+bufferOffset]=viewIDsToGLBufferIDs[indexView["bufferView"]];this._mesh._numFaces+=indexView["count"]/3;} +else +{shape._webgl.externalGeometry=-1;} +shape._webgl.primType[meshIdx]=mesh["primitive"];attributes=mesh["attributes"];for(attributeID in attributes) +{attributeView=attributeViews[attributes[attributeID]];switch(attributeID) +{case"position":x3domTypeID="coord";x3domShortTypeID="Pos";shape._webgl.buffers[POSITION_BUFFER_IDX+bufferOffset]=viewIDsToGLBufferIDs[attributeView["bufferView"]];if(mesh["indices"]=="") +{shape._webgl.drawCount=attributeView["count"];this._mesh._numFaces+=attributeView["count"]/3;} +this._mesh._numCoords+=attributeView["count"];break;case"normal":x3domTypeID="normal";x3domShortTypeID="Norm";shape._webgl.buffers[NORMAL_BUFFER_IDX+bufferOffset]=viewIDsToGLBufferIDs[attributeView["bufferView"]];break;case"texcoord":x3domTypeID="texCoord";x3domShortTypeID="Tex";shape._webgl.buffers[TEXCOORD_BUFFER_IDX+bufferOffset]=viewIDsToGLBufferIDs[attributeView["bufferView"]];break;case"color":x3domTypeID="color";x3domShortTypeID="Col";shape._webgl.buffers[COLOR_BUFFER_IDX+bufferOffset]=viewIDsToGLBufferIDs[attributeView["bufferView"]];break;case"id":x3domTypeID="id";x3domShortTypeID="Id";shape._webgl.buffers[ID_BUFFER_IDX+bufferOffset]=viewIDsToGLBufferIDs[attributeView["bufferView"]];break;};shape["_"+x3domTypeID+"StrideOffset"][0]=attributeView["byteStride"];shape["_"+x3domTypeID+"StrideOffset"][1]=attributeView["byteOffset"];shape._webgl[x3domTypeID+"Type"]=attributeView["componentType"];numComponents=x3dom.nodeTypes.ExternalGeometry._findNumComponentsForSRCAccessorType(attributeView["type"]);this._mesh["_num"+x3domShortTypeID+"Components"]=numComponents;} +++meshIdx;bufferOffset+=MAX_NUM_BUFFERS_PER_DRAW;} +shape._nameSpace.doc.needRender=true;x3dom.BinaryContainerLoader.checkError(gl);},_createGLBuffersFromSRCChunks:function(gl,bufferChunksObj,bufferViewsObj,srcBodyView,indexViewBufferIDs,viewIDsToGLBufferIDs) +{var i;var bufferView;var chunkIDList;var bufferType;var chunk;var newBuffer;var chunkDataView;var currentChunkDataOffset;for(var bufferViewID in bufferViewsObj) +{bufferType=(typeof indexViewBufferIDs[bufferViewID]!=='undefined')?gl.ELEMENT_ARRAY_BUFFER:gl.ARRAY_BUFFER;bufferView=bufferViewsObj[bufferViewID];chunkIDList=bufferView["chunks"];if(chunkIDList.length==1) +{chunk=bufferChunksObj[chunkIDList[0]];chunkDataView=new Uint8Array(srcBodyView.buffer,srcBodyView.byteOffset+chunk["byteOffset"],chunk["byteLength"]);newBuffer=gl.createBuffer();gl.bindBuffer(bufferType,newBuffer);gl.bufferData(bufferType,chunkDataView,gl.STATIC_DRAW);viewIDsToGLBufferIDs[bufferViewID]=newBuffer;} +else +{newBuffer=gl.createBuffer();gl.bindBuffer(bufferType,newBuffer);gl.bufferData(bufferType,bufferView["byteLength"],gl.STATIC_DRAW);currentChunkDataOffset=0;for(i=0;i<chunkIDList.length;++i) +{chunk=bufferChunksObj[chunkIDList[i]];chunkDataView=new Uint8Array(srcBodyView.buffer,srcBodyView.byteOffset+chunk["byteOffset"],chunk["byteLength"]);gl.bufferSubData(bufferType,currentChunkDataOffset,chunkDataView);currentChunkDataOffset+=chunk["byteLength"];} +viewIDsToGLBufferIDs[bufferViewID]=newBuffer;}}},getVolume:function() +{var vol=this._mesh._vol;var shapeNode;if(!vol.isValid()) +{shapeNode=this._parentNodes[0];if(typeof shapeNode._vf["bboxCenter"]!='undefined'&&typeof shapeNode._vf["bboxSize"]!='undefined') +{vol.setBoundsByCenterSize(shapeNode._vf["bboxCenter"],shapeNode._vf["bboxSize"]);} +else +{}} +return vol;}}));x3dom.nodeTypes.ExternalGeometry._findNumComponentsForSRCAccessorType=function(type) +{switch(type) +{case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;default:return 0;}} +x3dom.registerNodeType("X3DBinaryContainerGeometryNode","Geometry3D",defineClass(x3dom.nodeTypes.X3DSpatialGeometryNode,function(ctx){x3dom.nodeTypes.X3DBinaryContainerGeometryNode.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'position',0,0,0);this.addField_SFVec3f(ctx,'size',1,1,1);this.addField_MFInt32(ctx,'vertexCount',[0]);this.addField_MFString(ctx,'primType',['TRIANGLES']);this._mesh._invalidate=false;this._mesh._numCoords=0;this._mesh._numFaces=0;this._diameter=this._vf.size.length();},{getMin:function(){var vol=this._mesh._vol;if(!vol.isValid()){vol.setBoundsByCenterSize(this._vf.position,this._vf.size);} +return vol.min;},getMax:function(){var vol=this._mesh._vol;if(!vol.isValid()){vol.setBoundsByCenterSize(this._vf.position,this._vf.size);} +return vol.max;},getVolume:function(){var vol=this._mesh._vol;if(!vol.isValid()){vol.setBoundsByCenterSize(this._vf.position,this._vf.size);} +return vol;},invalidateVolume:function(){},getCenter:function(){return this._vf.position;},getDiameter:function(){return this._diameter;},needLighting:function(){var hasTris=(this._vf.primType.length&&this._vf.primType[0].indexOf("TRIANGLE")>=0);return(this._vf.lit&&hasTris);}}));x3dom.registerNodeType("BinaryGeometry","Geometry3D",defineClass(x3dom.nodeTypes.X3DBinaryContainerGeometryNode,function(ctx){x3dom.nodeTypes.BinaryGeometry.superClass.call(this,ctx);this.addField_SFString(ctx,'index',"");this.addField_SFString(ctx,'coord',"");this.addField_SFString(ctx,'normal',"");this.addField_SFString(ctx,'texCoord',"");this.addField_SFString(ctx,'color',"");this.addField_SFString(ctx,'tangent',"");this.addField_SFString(ctx,'binormal',"");this.addField_SFString(ctx,'indexType',"Uint16");this.addField_SFString(ctx,'coordType',"Float32");this.addField_SFString(ctx,'normalType',"Float32");this.addField_SFString(ctx,'texCoordType',"Float32");this.addField_SFString(ctx,'colorType',"Float32");this.addField_SFString(ctx,'tangentType',"Float32");this.addField_SFString(ctx,'binormalType',"Float32");this.addField_SFBool(ctx,'normalAsSphericalCoordinates',false);this.addField_SFBool(ctx,'rgbaColors',false);this.addField_SFInt32(ctx,'numTexCoordComponents',2);this.addField_SFBool(ctx,'normalPerVertex',true);this.addField_SFBool(ctx,'idsPerVertex',false);this._hasStrideOffset=false;this._mesh._numPosComponents=this._vf.normalAsSphericalCoordinates?4:3;this._mesh._numTexComponents=this._vf.numTexCoordComponents;this._mesh._numColComponents=this._vf.rgbaColors?4:3;this._mesh._numNormComponents=this._vf.normalAsSphericalCoordinates?2:3;this._vertexCountSum=0;for(var i=0;i<this._vf.vertexCount.length;++i){this._vertexCountSum+=this._vf.vertexCount[i];}},{parentAdded:function(parent) +{var offsetInd,strideInd,offset,stride;offsetInd=this._vf.coord.lastIndexOf('#');strideInd=this._vf.coord.lastIndexOf('+');if(offsetInd>=0&&strideInd>=0){offset=+this._vf.coord.substring(++offsetInd,strideInd);stride=+this._vf.coord.substring(strideInd);parent._coordStrideOffset=[stride,offset];this._hasStrideOffset=true;if((offset/8)-Math.floor(offset/8)==0){this._mesh._numPosComponents=4;}} +else if(strideInd>=0){stride=+this._vf.coord.substring(strideInd);parent._coordStrideOffset=[stride,0];if((stride/8)-Math.floor(stride/8)==0){this._mesh._numPosComponents=4;}} +offsetInd=this._vf.normal.lastIndexOf('#');strideInd=this._vf.normal.lastIndexOf('+');if(offsetInd>=0&&strideInd>=0){offset=+this._vf.normal.substring(++offsetInd,strideInd);stride=+this._vf.normal.substring(strideInd);parent._normalStrideOffset=[stride,offset];} +else if(strideInd>=0){stride=+this._vf.normal.substring(strideInd);parent._normalStrideOffset=[stride,0];} +offsetInd=this._vf.texCoord.lastIndexOf('#');strideInd=this._vf.texCoord.lastIndexOf('+');if(offsetInd>=0&&strideInd>=0){offset=+this._vf.texCoord.substring(++offsetInd,strideInd);stride=+this._vf.texCoord.substring(strideInd);parent._texCoordStrideOffset=[stride,offset];} +else if(strideInd>=0){stride=+this._vf.texCoord.substring(strideInd);parent._texCoordStrideOffset=[stride,0];} +offsetInd=this._vf.color.lastIndexOf('#');strideInd=this._vf.color.lastIndexOf('+');if(offsetInd>=0&&strideInd>=0){offset=+this._vf.color.substring(++offsetInd,strideInd);stride=+this._vf.color.substring(strideInd);parent._colorStrideOffset=[stride,offset];} +else if(strideInd>=0){stride=+this._vf.color.substring(strideInd);parent._colorStrideOffset=[stride,0];} +if(this._vf.indexType!="Uint16"&&!x3dom.caps.INDEX_UINT) +x3dom.debug.logWarning("Index type "+this._vf.indexType+" problematic");},doIntersect:function(line) +{var min=this.getMin();var max=this.getMax();var isect=line.intersect(min,max);if(isect&&line.enter<line.dist){line.dist=line.enter;line.hitObject=this;line.hitPoint=line.pos.add(line.dir.multiply(line.enter));return true;} +else{return false;}},getPrecisionMax:function(type) +{switch(this._vf[type]) +{case"Int8":return 127.0;case"Uint8":return 255.0;case"Int16":return 32767.0;case"Uint16":return 65535.0;case"Int32":return 2147483647.0;case"Uint32":return 4294967295.0;case"Float32":case"Float64":default:return 1.0;}}}));x3dom.registerNodeType("PopGeometryLevel","Geometry3D",defineClass(x3dom.nodeTypes.X3DGeometricPropertyNode,function(ctx){x3dom.nodeTypes.PopGeometryLevel.superClass.call(this,ctx);this.addField_SFString(ctx,'src',"");this.addField_SFInt32(ctx,'numIndices',0);this.addField_SFInt32(ctx,'vertexDataBufferOffset',0);},{getSrc:function(){return this._vf.src;},getNumIndices:function(){return this._vf.numIndices;},getVertexDataBufferOffset:function(){return this._vf.vertexDataBufferOffset;}}));x3dom.registerNodeType("PopGeometry","Geometry3D",defineClass(x3dom.nodeTypes.X3DBinaryContainerGeometryNode,function(ctx){x3dom.nodeTypes.PopGeometry.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'tightSize',1,1,1);this.addField_SFVec3f(ctx,'maxBBSize',1,1,1);this.addField_SFVec3f(ctx,'bbMinModF',0,0,0);this.addField_SFVec3f(ctx,'bbMaxModF',1,1,1);this.addField_SFVec3f(ctx,'bbMin',0,0,0);this.addField_SFVec3f(ctx,'bbShiftVec',0,0,0);if(this._vf.bbMinModF.x>this._vf.bbMaxModF.x) +this._vf.bbShiftVec.x=1.0;if(this._vf.bbMinModF.y>this._vf.bbMaxModF.y) +this._vf.bbShiftVec.y=1.0;if(this._vf.bbMinModF.z>this._vf.bbMaxModF.z) +this._vf.bbShiftVec.z=1.0;this.addField_MFNode('levels',x3dom.nodeTypes.PopGeometryLevel);this.addField_SFInt32(ctx,'attributeStride',0);this.addField_SFInt32(ctx,'positionOffset',0);this.addField_SFInt32(ctx,'normalOffset',0);this.addField_SFInt32(ctx,'texcoordOffset',0);this.addField_SFInt32(ctx,'colorOffset',0);this.addField_SFInt32(ctx,'numAnchorVertices',0);this.addField_SFInt32(ctx,'positionPrecision',2);this.addField_SFInt32(ctx,'normalPrecision',1);this.addField_SFInt32(ctx,'texcoordPrecision',2);this.addField_SFInt32(ctx,'colorPrecision',1);this.addField_SFInt32(ctx,'minPrecisionLevel',-1);this.addField_SFInt32(ctx,'maxPrecisionLevel',-1);this.addField_SFFloat(ctx,'precisionFactor',1.0);this.addField_SFString(ctx,'coordType',"Uint16");this.addField_SFString(ctx,'normalType',"Uint8");this.addField_SFString(ctx,'texCoordType',"Uint16");this.addField_SFString(ctx,'colorType',"Uint8");this.addField_SFInt32(ctx,'vertexBufferSize',0);this.addField_SFBool(ctx,'indexedRendering',true);this.addField_SFBool(ctx,'sphericalNormals',false);this.addField_MFInt32(ctx,'originalVertexCount',[0]);for(var i=0;i<this._vf.vertexCount.length;++i){this._vf.originalVertexCount[i]=this._vf.vertexCount[i];} +this._vf.maxBBSize=x3dom.fields.SFVec3f.copy(this._vf.size);this._vf.size=this._vf.tightSize;this._diameter=this._vf.size.length();this._bbMinBySize=[Math.floor(this._vf.bbMin.x/this._vf.maxBBSize.x),Math.floor(this._vf.bbMin.y/this._vf.maxBBSize.y),Math.floor(this._vf.bbMin.z/this._vf.maxBBSize.z)];this._volRadius=this._vf.size.length()/2;this._volLargestRadius=this._vf.maxBBSize.length()/2;this._mesh._numPosComponents=this._vf.sphericalNormals?4:3;this._mesh._numNormComponents=this._vf.sphericalNormals?2:3;this._mesh._numTexComponents=2;this._mesh._numColComponents=3;x3dom.nodeTypes.PopGeometry.numTotalVerts+=this.getVertexCount();x3dom.nodeTypes.PopGeometry.numTotalTris+=(this.hasIndex()?this.getTotalNumberOfIndices():this.getVertexCount())/3;},{forceUpdateCoverage:function(){return true;},getBBoxShiftVec:function(){return this._vf.bbShiftVec;},getBBoxSize:function(){return this._vf.size;},hasIndex:function(){return this._vf.indexedRendering;},getTotalNumberOfIndices:function(){if(this._vf.indexedRendering){var sum=0;for(var i=0;i<this._vf.originalVertexCount.length;++i){sum+=this._vf.originalVertexCount[i];} +return sum;} +else{return 0;}},getVertexCount:function(){var sum=0;for(var i=0;i<this._vf.originalVertexCount.length;++i){sum+=this._vf.originalVertexCount[i];} +return sum;},adaptVertexCount:function(numVerts){var verts=0;for(var i=0;i<this._vf.originalVertexCount.length;++i){if((this._vf.originalVertexCount[i]+verts)<=numVerts){this._vf.vertexCount[i]=this._vf.originalVertexCount[i];verts+=this._vf.originalVertexCount[i];} +else{this._vf.vertexCount[i]=numVerts-verts;break;}}},hasNormal:function(){return(this._vf.normalOffset!=0)&&!this._vf.sphericalNormals;},hasTexCoord:function(){return(this._vf.texcoordOffset!=0);},hasColor:function(){return(this._vf.colorOffset!=0);},getPositionPrecision:function(){return this._vf.positionPrecision;},getNormalPrecision:function(){return this._vf.normalPrecision;},getTexCoordPrecision:function(){return this._vf.texcoordPrecision;},getColorPrecision:function(){return this._vf.colorPrecision;},getAttributeStride:function(){return this._vf.attributeStride;},getPositionOffset:function(){return this._vf.positionOffset;},getNormalOffset:function(){return this._vf.normalOffset;},getTexCoordOffset:function(){return this._vf.texcoordOffset;},getColorOffset:function(){return this._vf.colorOffset;},getBufferTypeStringFromByteCount:function(bytes){switch(bytes) +{case 1:return"Uint8";case 2:return"Uint16";default:return 0;}},getDataURLs:function(){var urls=[];for(var i=0;i<this._cf.levels.nodes.length;++i){urls.push(this._cf.levels.nodes[i].getSrc());} +return urls;},getNumIndicesByLevel:function(lvl){return this._cf.levels.nodes[lvl].getNumIndices();},getNumLevels:function(lvl){return this._cf.levels.nodes.length;},getVertexDataBufferOffset:function(lvl){return this._cf.levels.nodes[lvl].getVertexDataBufferOffset();},getPrecisionMax:function(type){switch(this._vf[type]) +{case"Uint8":return 255.0;case"Uint16":return 65535.0;default:return 1.0;}}}));x3dom.nodeTypes.PopGeometry.ErrorToleranceFactor=1;x3dom.nodeTypes.PopGeometry.PrecisionFactorOnMove=1;x3dom.nodeTypes.PopGeometry.numRenderedVerts=0;x3dom.nodeTypes.PopGeometry.numRenderedTris=0;x3dom.nodeTypes.PopGeometry.numTotalVerts=0;x3dom.nodeTypes.PopGeometry.numTotalTris=0;x3dom.nodeTypes.PopGeometry.powLUT=[32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1];x3dom.registerNodeType("ImageGeometry","Geometry3D",defineClass(x3dom.nodeTypes.X3DBinaryContainerGeometryNode,function(ctx){x3dom.nodeTypes.ImageGeometry.superClass.call(this,ctx);this.addField_SFVec2f(ctx,'implicitMeshSize',256,256);this.addField_SFInt32(ctx,'numColorComponents',3);this.addField_SFInt32(ctx,'numTexCoordComponents',2);this.addField_SFNode('index',x3dom.nodeTypes.X3DTextureNode);this.addField_MFNode('coord',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('normal',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('texCoord',x3dom.nodeTypes.X3DTextureNode);this.addField_SFNode('color',x3dom.nodeTypes.X3DTextureNode);this._mesh._numColComponents=this._vf.numColorComponents;this._mesh._numTexComponents=this._vf.numTexCoordComponents;if(this._vf.implicitMeshSize.y==0) +this._vf.implicitMeshSize.y=this._vf.implicitMeshSize.x;if(x3dom.caps.BACKEND=='webgl'&&x3dom.caps.MAX_VERTEX_TEXTURE_IMAGE_UNITS>0){var geoCacheID='ImageGeometry_'+this._vf.implicitMeshSize.x+'_'+this._vf.implicitMeshSize.y;if(this._vf.useGeoCache&&x3dom.geoCache[geoCacheID]!==undefined) +{this._mesh=x3dom.geoCache[geoCacheID];} +else +{for(var y=0;y<this._vf.implicitMeshSize.y;y++) +{for(var x=0;x<this._vf.implicitMeshSize.x;x++) +{this._mesh._positions[0].push(x/this._vf.implicitMeshSize.x,y/this._vf.implicitMeshSize.y,0);}} +this._mesh._numFaces=this._mesh._indices[0].length/3;this._mesh._numCoords=this._mesh._positions[0].length/3;x3dom.geoCache[geoCacheID]=this._mesh;}} +this._vol=new x3dom.fields.BoxVolume();this._dirty={coord:true,normal:true,texCoord:true,color:true,index:true};},{setGeoDirty:function(){this._dirty.coord=true;this._dirty.normal=true;this._dirty.texCoords=true;this._dirty.color=true;this._dirty.index=true;},unsetGeoDirty:function(){this._dirty.coord=false;this._dirty.normal=false;this._dirty.texCoords=false;this._dirty.color=false;this._dirty.index=false;},nodeChanged:function() +{Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;node._dirty.normals=true;node._dirty.texcoords=true;node._dirty.colors=true;});this._vol.invalidate();},fieldChanged:function(fieldName) +{if(fieldName=="index"||fieldName=="coord"||fieldName=="normal"||fieldName=="texCoord"||fieldName=="color"){this._dirty[fieldName]=true;this._vol.invalidate();} +else if(fieldName=="implicitMeshSize"){this._vol.invalidate();}},getMin:function(){var vol=this._vol;if(!vol.isValid()){vol.setBoundsByCenterSize(this._vf.position,this._vf.size);} +return vol.min;},getMax:function(){var vol=this._vol;if(!vol.isValid()){vol.setBoundsByCenterSize(this._vf.position,this._vf.size);} +return vol.max;},getVolume:function(){var vol=this._vol;if(!vol.isValid()){vol.setBoundsByCenterSize(this._vf.position,this._vf.size);} +return vol;},numCoordinateTextures:function() +{return this._cf.coord.nodes.length;},getIndexTexture:function() +{if(this._cf.index.node){this._cf.index.node._type="IG_index";return this._cf.index.node;}else{return null;}},getIndexTextureURL:function() +{if(this._cf.index.node){return this._cf.index.node._vf.url;}else{return null;}},getCoordinateTexture:function(pos) +{if(this._cf.coord.nodes[pos]){this._cf.coord.nodes[pos]._type="IG_coords"+pos;return this._cf.coord.nodes[pos];}else{return null;}},getCoordinateTextureURL:function(pos) +{if(this._cf.coord.nodes[pos]){return this._cf.coord.nodes[pos]._vf.url;}else{return null;}},getCoordinateTextureURLs:function() +{var urls=[];for(var i=0;i<this._cf.coord.nodes.length;i++) +{urls.push(this._cf.coord.nodes[i]._vf.url);} +return urls;},getNormalTexture:function() +{if(this._cf.normal.node){this._cf.normal.node._type="IG_normals";return this._cf.normal.node;}else{return null;}},getNormalTextureURL:function() +{if(this._cf.normal.node){return this._cf.normal.node._vf.url;}else{return null;}},getTexCoordTexture:function() +{if(this._cf.texCoord.node){this._cf.texCoord.node._type="IG_texCoords";return this._cf.texCoord.node;}else{return null;}},getTexCoordTextureURL:function() +{if(this._cf.texCoord.node){return this._cf.texCoord.node._vf.url;}else{return null;}},getColorTexture:function() +{if(this._cf.color.node){this._cf.color.node._type="IG_colors";return this._cf.color.node;}else{return null;}},getColorTextureURL:function() +{if(this._cf.color.node){return this._cf.color.node._vf.url;}else{return null;}},getTextures:function() +{var textures=[];var index=this.getIndexTexture();if(index)textures.push(index);for(i=0;i<this.numCoordinateTextures();i++){var coord=this.getCoordinateTexture(i);if(coord)textures.push(coord);} +var normal=this.getNormalTexture();if(normal)textures.push(normal);var texCoord=this.getTexCoordTexture();if(texCoord)textures.push(texCoord);var color=this.getColorTexture();if(color)textures.push(color);return textures;}}));x3dom.registerNodeType("IndexedFaceSet","Geometry3D",defineClass(x3dom.nodeTypes.X3DComposedGeometryNode,function(ctx){x3dom.nodeTypes.IndexedFaceSet.superClass.call(this,ctx);this.addField_SFFloat(ctx,'creaseAngle',0);this.addField_SFBool(ctx,'convex',true);this.addField_MFInt32(ctx,'coordIndex',[]);this.addField_MFInt32(ctx,'normalIndex',[]);this.addField_MFInt32(ctx,'colorIndex',[]);this.addField_MFInt32(ctx,'texCoordIndex',[]);},{nodeChanged:function() +{var time0=new Date().getTime();this.handleAttribs();var indexes=this._vf.coordIndex;if(indexes.length&&indexes[indexes.length-1]!=-1) +{indexes.push(-1);x3dom.debug.logWarning('Last index value should be -1.');} +var normalInd=this._vf.normalIndex;var texCoordInd=this._vf.texCoordIndex;var colorInd=this._vf.colorIndex;var hasNormal=false,hasNormalInd=false;var hasTexCoord=false,hasTexCoordInd=false;var hasColor=false,hasColorInd=false;var colPerVert=this._vf.colorPerVertex;var normPerVert=this._vf.normalPerVertex;if(normalInd.length>0) +{hasNormalInd=true;} +if(texCoordInd.length>0) +{hasTexCoordInd=true;} +if(colorInd.length>0) +{hasColorInd=true;} +var positions,normals,texCoords,colors;var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);positions=coordNode.getPoints();var normalNode=this._cf.normal.node;if(normalNode) +{hasNormal=true;normals=normalNode._vf.vector;} +else{hasNormal=false;} +var texMode="",numTexComponents=2;var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +if(texCoordNode) +{if(texCoordNode._vf.point){hasTexCoord=true;texCoords=texCoordNode._vf.point;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.TextureCoordinate3D)){numTexComponents=3;}} +else if(texCoordNode._vf.mode){texMode=texCoordNode._vf.mode;}} +else{hasTexCoord=false;} +this._mesh._numTexComponents=numTexComponents;var numColComponents=3;var colorNode=this._cf.color.node;if(colorNode) +{hasColor=true;colors=colorNode._vf.color;if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +else{hasColor=false;} +this._mesh._numColComponents=numColComponents;this._mesh._indices[0]=[];this._mesh._positions[0]=[];this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];this._mesh._colors[0]=[];var i,j,t,cnt,faceCnt;var p0,p1,p2,n0,n1,n2,t0,t1,t2,c0,c1,c2;if((this._vf.creaseAngle<=x3dom.fields.Eps)||(positions.length>x3dom.Utils.maxIndexableCoords)||(hasNormal&&hasNormalInd)||(hasTexCoord&&hasTexCoordInd)||(hasColor&&hasColorInd)) +{if(this._vf.creaseAngle<=x3dom.fields.Eps) +x3dom.debug.logWarning('Fallback to inefficient multi-index mode since creaseAngle=0.');if(this._vf.convex){t=0;cnt=0;faceCnt=0;this._mesh._multiIndIndices=[];this._mesh._posSize=positions.length;for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){t=0;faceCnt++;continue;} +if(hasNormalInd){x3dom.debug.assert(normalInd[i]!=-1);} +if(hasTexCoordInd){x3dom.debug.assert(texCoordInd[i]!=-1);} +if(hasColorInd){x3dom.debug.assert(colorInd[i]!=-1);} +switch(t) +{case 0:p0=+indexes[i];if(hasNormalInd&&normPerVert){n0=+normalInd[i];} +else if(hasNormalInd&&!normPerVert){n0=+normalInd[faceCnt];} +else if(normPerVert){n0=p0;} +else{n0=faceCnt;} +if(hasTexCoordInd){t0=+texCoordInd[i];} +else{t0=p0;} +if(hasColorInd&&colPerVert){c0=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c0=+colorInd[faceCnt];} +else if(colPerVert){c0=p0;} +else{c0=faceCnt;} +t=1;break;case 1:p1=+indexes[i];if(hasNormalInd&&normPerVert){n1=+normalInd[i];} +else if(hasNormalInd&&!normPerVert){n1=+normalInd[faceCnt];} +else if(normPerVert){n1=p1;} +else{n1=faceCnt;} +if(hasTexCoordInd){t1=+texCoordInd[i];} +else{t1=p1;} +if(hasColorInd&&colPerVert){c1=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c1=+colorInd[faceCnt];} +else if(colPerVert){c1=p1;} +else{c1=faceCnt;} +t=2;break;case 2:p2=+indexes[i];if(hasNormalInd&&normPerVert){n2=+normalInd[i];} +else if(hasNormalInd&&!normPerVert){n2=+normalInd[faceCnt];} +else if(normPerVert){n2=p2;} +else{n2=faceCnt;} +if(hasTexCoordInd){t2=+texCoordInd[i];} +else{t2=p2;} +if(hasColorInd&&colPerVert){c2=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c2=+colorInd[faceCnt];} +else if(colPerVert){c2=p2;} +else{c2=faceCnt;} +t=3;this._mesh._positions[0].push(positions[p0].x);this._mesh._positions[0].push(positions[p0].y);this._mesh._positions[0].push(positions[p0].z);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);this._mesh._positions[0].push(positions[p2].x);this._mesh._positions[0].push(positions[p2].y);this._mesh._positions[0].push(positions[p2].z);if(hasNormal){this._mesh._normals[0].push(normals[n0].x);this._mesh._normals[0].push(normals[n0].y);this._mesh._normals[0].push(normals[n0].z);this._mesh._normals[0].push(normals[n1].x);this._mesh._normals[0].push(normals[n1].y);this._mesh._normals[0].push(normals[n1].z);this._mesh._normals[0].push(normals[n2].x);this._mesh._normals[0].push(normals[n2].y);this._mesh._normals[0].push(normals[n2].z);} +this._mesh._multiIndIndices.push(p0,p1,p2);if(hasColor){this._mesh._colors[0].push(colors[c0].r);this._mesh._colors[0].push(colors[c0].g);this._mesh._colors[0].push(colors[c0].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c0].a);} +this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c1].a);} +this._mesh._colors[0].push(colors[c2].r);this._mesh._colors[0].push(colors[c2].g);this._mesh._colors[0].push(colors[c2].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c2].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(texCoords[t0].x);this._mesh._texCoords[0].push(texCoords[t0].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t0].z);} +this._mesh._texCoords[0].push(texCoords[t1].x);this._mesh._texCoords[0].push(texCoords[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t1].z);} +this._mesh._texCoords[0].push(texCoords[t2].x);this._mesh._texCoords[0].push(texCoords[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t2].z);}} +break;case 3:p1=p2;t1=t2;if(normPerVert){n1=n2;} +if(colPerVert){c1=c2;} +p2=+indexes[i];if(hasNormalInd&&normPerVert){n2=+normalInd[i];}else if(hasNormalInd&&!normPerVert){}else if(normPerVert){n2=p2;}else{n2=faceCnt;} +if(hasTexCoordInd){t2=+texCoordInd[i];}else{t2=p2;} +if(hasColorInd&&colPerVert){c2=+colorInd[i];}else if(hasColorInd&&!colPerVert){}else if(colPerVert){c2=p2;}else{c2=faceCnt;} +this._mesh._positions[0].push(positions[p0].x);this._mesh._positions[0].push(positions[p0].y);this._mesh._positions[0].push(positions[p0].z);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);this._mesh._positions[0].push(positions[p2].x);this._mesh._positions[0].push(positions[p2].y);this._mesh._positions[0].push(positions[p2].z);if(hasNormal){this._mesh._normals[0].push(normals[n0].x);this._mesh._normals[0].push(normals[n0].y);this._mesh._normals[0].push(normals[n0].z);this._mesh._normals[0].push(normals[n1].x);this._mesh._normals[0].push(normals[n1].y);this._mesh._normals[0].push(normals[n1].z);this._mesh._normals[0].push(normals[n2].x);this._mesh._normals[0].push(normals[n2].y);this._mesh._normals[0].push(normals[n2].z);} +this._mesh._multiIndIndices.push(p0,p1,p2);if(hasColor){this._mesh._colors[0].push(colors[c0].r);this._mesh._colors[0].push(colors[c0].g);this._mesh._colors[0].push(colors[c0].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c0].a);} +this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c1].a);} +this._mesh._colors[0].push(colors[c2].r);this._mesh._colors[0].push(colors[c2].g);this._mesh._colors[0].push(colors[c2].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c2].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(texCoords[t0].x);this._mesh._texCoords[0].push(texCoords[t0].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t0].z);} +this._mesh._texCoords[0].push(texCoords[t1].x);this._mesh._texCoords[0].push(texCoords[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t1].z);} +this._mesh._texCoords[0].push(texCoords[t2].x);this._mesh._texCoords[0].push(texCoords[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t2].z);}} +break;default:}}} +else{var linklist=new x3dom.DoublyLinkedList();var data={};cnt=0;faceCnt=0;for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){var multi_index_data=x3dom.EarClipping.getMultiIndexes(linklist);for(j=0;j<multi_index_data.indices.length;j++) +{this._mesh._indices[0].push(cnt);cnt++;this._mesh._positions[0].push(multi_index_data.point[j].x,multi_index_data.point[j].y,multi_index_data.point[j].z);if(hasNormal){this._mesh._normals[0].push(multi_index_data.normals[j].x,multi_index_data.normals[j].y,multi_index_data.normals[j].z);} +if(hasColor){this._mesh._colors[0].push(multi_index_data.colors[j].r,multi_index_data.colors[j].g,multi_index_data.colors[j].b);if(numColComponents===4){this._mesh._colors[0].push(multi_index_data.colors[j].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(multi_index_data.texCoords[j].x,multi_index_data.texCoords[j].y);if(numTexComponents===3){this._mesh._texCoords[0].push(multi_index_data.texCoords[j].z);}}} +linklist=new x3dom.DoublyLinkedList();faceCnt++;continue;} +if(hasNormal){if(hasNormalInd&&normPerVert){data.normals=normals[normalInd[i]];}else if(hasNormalInd&&!normPerVert){data.normals=normals[normalInd[faceCnt]];}else{data.normals=normals[indexes[i]];}} +if(hasColor){if(hasColorInd&&colPerVert){data.colors=colors[colorInd[i]];}else if(hasColorInd&&!colPerVert){data.colors=colors[colorInd[faceCnt]];}else if(colPerVert){data.colors=colors[indexes[i]];}else{data.colors=colors[faceCnt];}} +if(hasTexCoord){if(hasTexCoordInd){data.texCoords=texCoords[texCoordInd[i]];}else{data.texCoords=texCoords[indexes[i]];}} +linklist.appendNode(new x3dom.DoublyLinkedList.ListNode(positions[indexes[i]],indexes[i],data.normals,data.colors,data.texCoords));} +this._mesh.splitMesh();} +if(!hasNormal){this._mesh.calcNormals(this._vf.creaseAngle,this._vf.ccw);} +if(!hasTexCoord){this._mesh.calcTexCoords(texMode);}} +else +{t=0;if(this._vf.convex){for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){t=0;continue;} +switch(t){case 0:n0=+indexes[i];t=1;break;case 1:n1=+indexes[i];t=2;break;case 2:n2=+indexes[i];t=3;this._mesh._indices[0].push(n0,n1,n2);break;case 3:n1=n2;n2=+indexes[i];this._mesh._indices[0].push(n0,n1,n2);break;}}} +else{linklist=new x3dom.DoublyLinkedList();for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){var linklist_indices=x3dom.EarClipping.getIndexes(linklist);for(j=0;j<linklist_indices.length;j++){this._mesh._indices[0].push(linklist_indices[j]);} +linklist=new x3dom.DoublyLinkedList();continue;} +linklist.appendNode(new x3dom.DoublyLinkedList.ListNode(positions[indexes[i]],indexes[i]));}} +this._mesh._positions[0]=positions.toGL();if(hasNormal){this._mesh._normals[0]=normals.toGL();} +else{this._mesh.calcNormals(this._vf.creaseAngle,this._vf.ccw);} +if(hasTexCoord){this._mesh._texCoords[0]=texCoords.toGL();this._mesh._numTexComponents=numTexComponents;} +else{this._mesh.calcTexCoords(texMode);} +if(hasColor){this._mesh._colors[0]=colors.toGL();this._mesh._numColComponents=numColComponents;}} +this.invalidateVolume();this._mesh._numFaces=0;this._mesh._numCoords=0;for(i=0;i<this._mesh._positions.length;i++){var indexLength=this._mesh._indices[i].length;var numCoords=this._mesh._positions[i].length/3;this._mesh._numCoords+=numCoords;if(indexLength>0) +this._mesh._numFaces+=indexLength/3;else +this._mesh._numFaces+=numCoords/3;}},fieldChanged:function(fieldName) +{if(fieldName!="coord"&&fieldName!="normal"&&fieldName!="texCoord"&&fieldName!="color"&&fieldName!="coordIndex") +{x3dom.debug.logWarning("IndexedFaceSet: fieldChanged for "+ +fieldName+" not yet implemented!");return;} +var pnts=this._cf.coord.node._vf.point;var n=pnts.length;var texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +if(((this._vf.creaseAngle<=x3dom.fields.Eps)||(n>x3dom.Utils.maxIndexableCoords)||(this._vf.normalIndex.length>0&&this._cf.normal.node)||(this._vf.texCoordIndex.length>0&&texCoordNode)||(this._vf.colorIndex.length>0&&this._cf.color.node))&&this._mesh._multiIndIndices) +{var needNormals=!this._cf.normal.node&&this._vf.normalUpdateMode.toLowerCase()!='none';n=this._mesh._multiIndIndices.length;this._mesh._positions[0]=[];this._mesh._indices[0]=[];if(fieldName=="coord"&&n) +{if(needNormals){this._mesh._normals[0]=[];} +for(i=0;i<n;i+=3){var ind0=this._mesh._multiIndIndices[i];var ind1=this._mesh._multiIndIndices[i+1];var ind2=this._mesh._multiIndIndices[i+2];var pos0=pnts[ind0];var pos1=pnts[ind1];var pos2=pnts[ind2];this._mesh._positions[0].push(pos0.x,pos0.y,pos0.z);this._mesh._positions[0].push(pos1.x,pos1.y,pos1.z);this._mesh._positions[0].push(pos2.x,pos2.y,pos2.z);if(needNormals){var a=pos0.subtract(pos1);var b=pos1.subtract(pos2);var norm=a.cross(b).normalize();if(!this._vf.ccw) +norm=norm.negate();this._mesh._normals[0].push(norm.x,norm.y,norm.z);this._mesh._normals[0].push(norm.x,norm.y,norm.z);this._mesh._normals[0].push(norm.x,norm.y,norm.z);}} +this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;if(needNormals) +node._dirty.normals=true;});return;} +this._mesh._normals[0]=[];this._mesh._texCoords[0]=[];this._mesh._colors[0]=[];var indexes=this._vf.coordIndex;var normalInd=this._vf.normalIndex;var texCoordInd=this._vf.texCoordIndex;var colorInd=this._vf.colorIndex;var hasNormal=false,hasNormalInd=false;var hasTexCoord=false,hasTexCoordInd=false;var hasColor=false,hasColorInd=false;var colPerVert=this._vf.colorPerVertex;var normPerVert=this._vf.normalPerVertex;if(normalInd.length>0) +{hasNormalInd=true;} +if(texCoordInd.length>0) +{hasTexCoordInd=true;} +if(colorInd.length>0) +{hasColorInd=true;} +var positions,normals,texCoords,colors;var coordNode=this._cf.coord.node;x3dom.debug.assert(coordNode);positions=coordNode.getPoints();var normalNode=this._cf.normal.node;if(normalNode) +{hasNormal=true;normals=normalNode._vf.vector;} +else{hasNormal=false;} +var texMode="",numTexComponents=2;texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +if(texCoordNode) +{if(texCoordNode._vf.point){hasTexCoord=true;texCoords=texCoordNode._vf.point;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.TextureCoordinate3D)){numTexComponents=3;}} +else if(texCoordNode._vf.mode){texMode=texCoordNode._vf.mode;}} +else{hasTexCoord=false;} +this._mesh._numTexComponents=numTexComponents;var numColComponents=3;var colorNode=this._cf.color.node;if(colorNode) +{hasColor=true;colors=colorNode._vf.color;if(x3dom.isa(colorNode,x3dom.nodeTypes.ColorRGBA)){numColComponents=4;}} +else{hasColor=false;} +this._mesh._numColComponents=numColComponents;var i,j,t,cnt,faceCnt;var p0,p1,p2,n0,n1,n2,t0,t1,t2,c0,c1,c2;if(this._vf.convex){t=0;cnt=0;faceCnt=0;this._mesh._multiIndIndices=[];this._mesh._posSize=positions.length;for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){t=0;faceCnt++;continue;} +if(hasNormalInd){x3dom.debug.assert(normalInd[i]!=-1);} +if(hasTexCoordInd){x3dom.debug.assert(texCoordInd[i]!=-1);} +if(hasColorInd){x3dom.debug.assert(colorInd[i]!=-1);} +switch(t) +{case 0:p0=+indexes[i];if(hasNormalInd&&normPerVert){n0=+normalInd[i];} +else if(hasNormalInd&&!normPerVert){n0=+normalInd[faceCnt];} +else if(normPerVert){n0=p0;} +else{n0=faceCnt;} +if(hasTexCoordInd){t0=+texCoordInd[i];} +else{t0=p0;} +if(hasColorInd&&colPerVert){c0=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c0=+colorInd[faceCnt];} +else if(colPerVert){c0=p0;} +else{c0=faceCnt;} +t=1;break;case 1:p1=+indexes[i];if(hasNormalInd&&normPerVert){n1=+normalInd[i];} +else if(hasNormalInd&&!normPerVert){n1=+normalInd[faceCnt];} +else if(normPerVert){n1=p1;} +else{n1=faceCnt;} +if(hasTexCoordInd){t1=+texCoordInd[i];} +else{t1=p1;} +if(hasColorInd&&colPerVert){c1=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c1=+colorInd[faceCnt];} +else if(colPerVert){c1=p1;} +else{c1=faceCnt;} +t=2;break;case 2:p2=+indexes[i];if(hasNormalInd&&normPerVert){n2=+normalInd[i];} +else if(hasNormalInd&&!normPerVert){n2=+normalInd[faceCnt];} +else if(normPerVert){n2=p2;} +else{n2=faceCnt;} +if(hasTexCoordInd){t2=+texCoordInd[i];} +else{t2=p2;} +if(hasColorInd&&colPerVert){c2=+colorInd[i];} +else if(hasColorInd&&!colPerVert){c2=+colorInd[faceCnt];} +else if(colPerVert){c2=p2;} +else{c2=faceCnt;} +t=3;this._mesh._positions[0].push(positions[p0].x);this._mesh._positions[0].push(positions[p0].y);this._mesh._positions[0].push(positions[p0].z);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);this._mesh._positions[0].push(positions[p2].x);this._mesh._positions[0].push(positions[p2].y);this._mesh._positions[0].push(positions[p2].z);if(hasNormal){this._mesh._normals[0].push(normals[n0].x);this._mesh._normals[0].push(normals[n0].y);this._mesh._normals[0].push(normals[n0].z);this._mesh._normals[0].push(normals[n1].x);this._mesh._normals[0].push(normals[n1].y);this._mesh._normals[0].push(normals[n1].z);this._mesh._normals[0].push(normals[n2].x);this._mesh._normals[0].push(normals[n2].y);this._mesh._normals[0].push(normals[n2].z);} +this._mesh._multiIndIndices.push(p0,p1,p2);if(hasColor){this._mesh._colors[0].push(colors[c0].r);this._mesh._colors[0].push(colors[c0].g);this._mesh._colors[0].push(colors[c0].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c0].a);} +this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c1].a);} +this._mesh._colors[0].push(colors[c2].r);this._mesh._colors[0].push(colors[c2].g);this._mesh._colors[0].push(colors[c2].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c2].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(texCoords[t0].x);this._mesh._texCoords[0].push(texCoords[t0].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t0].z);} +this._mesh._texCoords[0].push(texCoords[t1].x);this._mesh._texCoords[0].push(texCoords[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t1].z);} +this._mesh._texCoords[0].push(texCoords[t2].x);this._mesh._texCoords[0].push(texCoords[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t2].z);}} +break;case 3:p1=p2;t1=t2;if(normPerVert){n1=n2;} +if(colPerVert){c1=c2;} +p2=+indexes[i];if(hasNormalInd&&normPerVert){n2=+normalInd[i];}else if(hasNormalInd&&!normPerVert){}else if(normPerVert){n2=p2;}else{n2=faceCnt;} +if(hasTexCoordInd){t2=+texCoordInd[i];}else{t2=p2;} +if(hasColorInd&&colPerVert){c2=+colorInd[i];}else if(hasColorInd&&!colPerVert){}else if(colPerVert){c2=p2;}else{c2=faceCnt;} +this._mesh._positions[0].push(positions[p0].x);this._mesh._positions[0].push(positions[p0].y);this._mesh._positions[0].push(positions[p0].z);this._mesh._positions[0].push(positions[p1].x);this._mesh._positions[0].push(positions[p1].y);this._mesh._positions[0].push(positions[p1].z);this._mesh._positions[0].push(positions[p2].x);this._mesh._positions[0].push(positions[p2].y);this._mesh._positions[0].push(positions[p2].z);if(hasNormal){this._mesh._normals[0].push(normals[n0].x);this._mesh._normals[0].push(normals[n0].y);this._mesh._normals[0].push(normals[n0].z);this._mesh._normals[0].push(normals[n1].x);this._mesh._normals[0].push(normals[n1].y);this._mesh._normals[0].push(normals[n1].z);this._mesh._normals[0].push(normals[n2].x);this._mesh._normals[0].push(normals[n2].y);this._mesh._normals[0].push(normals[n2].z);} +this._mesh._multiIndIndices.push(p0,p1,p2);if(hasColor){this._mesh._colors[0].push(colors[c0].r);this._mesh._colors[0].push(colors[c0].g);this._mesh._colors[0].push(colors[c0].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c0].a);} +this._mesh._colors[0].push(colors[c1].r);this._mesh._colors[0].push(colors[c1].g);this._mesh._colors[0].push(colors[c1].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c1].a);} +this._mesh._colors[0].push(colors[c2].r);this._mesh._colors[0].push(colors[c2].g);this._mesh._colors[0].push(colors[c2].b);if(numColComponents===4){this._mesh._colors[0].push(colors[c2].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(texCoords[t0].x);this._mesh._texCoords[0].push(texCoords[t0].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t0].z);} +this._mesh._texCoords[0].push(texCoords[t1].x);this._mesh._texCoords[0].push(texCoords[t1].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t1].z);} +this._mesh._texCoords[0].push(texCoords[t2].x);this._mesh._texCoords[0].push(texCoords[t2].y);if(numTexComponents===3){this._mesh._texCoords[0].push(texCoords[t2].z);}} +break;default:}}} +else{var linklist=new x3dom.DoublyLinkedList();var data={};cnt=0;faceCnt=0;for(i=0;i<indexes.length;++i) +{if(indexes[i]==-1){var multi_index_data=x3dom.EarClipping.getMultiIndexes(linklist);for(j=0;j<multi_index_data.indices.length;j++) +{this._mesh._indices[0].push(cnt);cnt++;this._mesh._positions[0].push(multi_index_data.point[j].x,multi_index_data.point[j].y,multi_index_data.point[j].z);if(hasNormal){this._mesh._normals[0].push(multi_index_data.normals[j].x,multi_index_data.normals[j].y,multi_index_data.normals[j].z);} +if(hasColor){this._mesh._colors[0].push(multi_index_data.colors[j].r,multi_index_data.colors[j].g,multi_index_data.colors[j].b);if(numColComponents===4){this._mesh._colors[0].push(multi_index_data.colors[j].a);}} +if(hasTexCoord){this._mesh._texCoords[0].push(multi_index_data.texCoords[j].x,multi_index_data.texCoords[j].y);if(numTexComponents===3){this._mesh._texCoords[0].push(multi_index_data.texCoords[j].z);}}} +linklist=new x3dom.DoublyLinkedList();faceCnt++;continue;} +if(hasNormal){if(hasNormalInd&&normPerVert){data.normals=normals[normalInd[i]];}else if(hasNormalInd&&!normPerVert){data.normals=normals[normalInd[faceCnt]];}else{data.normals=normals[indexes[i]];}} +if(hasColor){if(hasColorInd&&colPerVert){data.colors=colors[colorInd[i]];}else if(hasColorInd&&!colPerVert){data.colors=colors[colorInd[faceCnt]];}else{data.colors=colors[indexes[i]];}} +if(hasTexCoord){if(hasTexCoordInd){data.texCoords=texCoords[texCoordInd[i]];}else{data.texCoords=texCoords[indexes[i]];}} +linklist.appendNode(new x3dom.DoublyLinkedList.ListNode(positions[indexes[i]],indexes[i],data.normals,data.colors,data.texCoords));} +this._mesh.splitMesh();} +if(!hasNormal){this._mesh.calcNormals(this._vf.creaseAngle,this._vf.ccw);} +if(!hasTexCoord){this._mesh.calcTexCoords(texMode);} +this.invalidateVolume();this._mesh._numFaces=0;this._mesh._numCoords=0;for(i=0;i<this._mesh._positions.length;i++){var indexLength=this._mesh._indices[i].length;var numCoords=this._mesh._positions[i].length/3;this._mesh._numCoords+=numCoords;if(indexLength>0) +this._mesh._numFaces+=indexLength/3;else +this._mesh._numFaces+=numCoords/3;} +Array.forEach(this._parentNodes,function(node){node.setGeoDirty();});} +else{if(fieldName=="coord") +{var needNormals=!this._cf.normal.node&&this._vf.normalUpdateMode.toLowerCase()!='none';this._mesh._positions[0]=pnts.toGL();if(needNormals){this._mesh.calcNormals(this._vf.creaseAngle,this._vf.ccw);} +this.invalidateVolume();Array.forEach(this._parentNodes,function(node){node._dirty.positions=true;if(needNormals) +node._dirty.normals=true;node.invalidateVolume();});} +else if(fieldName=="color") +{pnts=this._cf.color.node._vf.color;this._mesh._colors[0]=pnts.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.colors=true;});} +else if(fieldName=="normal") +{pnts=this._cf.normal.node._vf.vector;this._mesh._normals[0]=pnts.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.normals=true;});} +else if(fieldName=="texCoord") +{texCoordNode=this._cf.texCoord.node;if(x3dom.isa(texCoordNode,x3dom.nodeTypes.MultiTextureCoordinate)){if(texCoordNode._cf.texCoord.nodes.length) +texCoordNode=texCoordNode._cf.texCoord.nodes[0];} +pnts=texCoordNode._vf.point;this._mesh._texCoords[0]=pnts.toGL();Array.forEach(this._parentNodes,function(node){node._dirty.texcoords=true;});} +else if(fieldName=="coordIndex") +{needNormals=!this._cf.normal.node&&this._vf.normalUpdateMode.toLowerCase()!='none';indexes=this._vf.coordIndex;t=0;n=indexes.length;this._mesh._indices[0]=[];for(i=0;i<n;++i){if(indexes[i]==-1){t=0;} +else{switch(t){case 0:p0=+indexes[i];t=1;break;case 1:p1=+indexes[i];t=2;break;case 2:p2=+indexes[i];t=3;this._mesh._indices[0].push(p0,p1,p2);break;case 3:p1=p2;p2=+indexes[i];this._mesh._indices[0].push(p0,p1,p2);break;}}} +if(needNormals){this._mesh.calcNormals(this._vf.creaseAngle,this._vf.ccw);} +Array.forEach(this._parentNodes,function(node){node._dirty.indexes=true;if(needNormals) +node._dirty.normals=true;});}}}}));x3dom.registerNodeType("X3DTexture3DNode","Texturing3D",defineClass(x3dom.nodeTypes.X3DTextureNode,function(ctx){x3dom.nodeTypes.X3DTexture3DNode.superClass.call(this,ctx);}));x3dom.registerNodeType("ComposedTexture3D","Texturing3D",defineClass(x3dom.nodeTypes.X3DTexture3DNode,function(ctx){x3dom.nodeTypes.ComposedTexture3D.superClass.call(this,ctx);this.addField_MFNode('texture',x3dom.nodeTypes.X3DTexture3DNode);}));x3dom.registerNodeType("ImageTexture3D","Texturing3D",defineClass(x3dom.nodeTypes.X3DTexture3DNode,function(ctx){x3dom.nodeTypes.ImageTexture3D.superClass.call(this,ctx);}));x3dom.registerNodeType("PixelTexture3D","Texturing3D",defineClass(x3dom.nodeTypes.X3DTexture3DNode,function(ctx){x3dom.nodeTypes.PixelTexture3D.superClass.call(this,ctx);}));x3dom.registerNodeType("TextureCoordinate3D","Texturing3D",defineClass(x3dom.nodeTypes.X3DTextureCoordinateNode,function(ctx){x3dom.nodeTypes.TextureCoordinate3D.superClass.call(this,ctx);this.addField_MFVec3f(ctx,'point',[]);}));x3dom.registerNodeType("TextureTransform3D","Texturing3D",defineClass(x3dom.nodeTypes.X3DTextureTransformNode,function(ctx){x3dom.nodeTypes.TextureTransform3D.superClass.call(this,ctx);this.addField_SFVec3f(ctx,'center',0,0,0);this.addField_SFRotation(ctx,'rotation',0,0,1,0);this.addField_SFVec3f(ctx,'scale',1,1,1);this.addField_SFVec3f(ctx,'translation',0,0,0);this.addField_SFRotation(ctx,'scaleOrientation',0,0,1,0);}));x3dom.registerNodeType("TextureTransformMatrix3D","Texturing3D",defineClass(x3dom.nodeTypes.X3DTextureTransformNode,function(ctx){x3dom.nodeTypes.TextureTransformMatrix3D.superClass.call(this,ctx);this.addField_SFMatrix4f(ctx,'matrix',1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);}));x3dom.registerNodeType("X3DPointingDeviceSensorNode","PointingDeviceSensor",defineClass(x3dom.nodeTypes.X3DSensorNode,function(ctx) +{x3dom.nodeTypes.X3DPointingDeviceSensorNode.superClass.call(this,ctx);},{pointerPressedOverSibling:function(event) +{if(this._vf["enabled"]) +{this._vf["isActive"]=true;this.postMessage('isActive',true);}},pointerMoved:function(event) +{},pointerMovedOver:function(event) +{if(this._vf["enabled"]) +{this.postMessage('isOver',true);}},pointerMovedOut:function(event) +{if(this._vf["enabled"]) +{this.postMessage('isOver',false);}},pointerReleased:function() +{if(this._vf["enabled"]) +{this._vf["isActive"]=false;this.postMessage('isActive',false);}}}));x3dom.registerNodeType("X3DDragSensorNode","PointingDeviceSensor",defineClass(x3dom.nodeTypes.X3DPointingDeviceSensorNode,function(ctx) +{x3dom.nodeTypes.X3DDragSensorNode.superClass.call(this,ctx);this.addField_SFBool(ctx,'autoOffset',false);this._lastX=-1;this._lastY=-1;},{pointerPressedOverSibling:function(event) +{x3dom.nodeTypes.X3DPointingDeviceSensorNode.prototype.pointerPressedOverSibling.call(this,event);this._lastX=event.layerX;this._lastY=event.layerY;this._startDragging(event.viewarea,event.layerX,event.layerX,event.worldX,event.worldY,event.worldZ);},pointerMoved:function(event) +{x3dom.nodeTypes.X3DPointingDeviceSensorNode.prototype.pointerMoved.call(this,event);if(this._vf["isActive"]&&this._vf["enabled"]) +{this._process2DDrag(event.layerX,event.layerY,event.layerX-this._lastX,event.layerY-this._lastY);}},pointerReleased:function() +{x3dom.nodeTypes.X3DPointingDeviceSensorNode.prototype.pointerReleased.call(this);this._stopDragging();},_startDragging:function(viewarea,x,y,wx,wy,wz) +{},_process2DDrag:function(x,y,dx,dy) +{},_stopDragging:function() +{}}));x3dom.registerNodeType("X3DTouchSensorNode","PointingDeviceSensor",defineClass(x3dom.nodeTypes.X3DPointingDeviceSensorNode,function(ctx) +{x3dom.nodeTypes.X3DTouchSensorNode.superClass.call(this,ctx);},{}));x3dom.registerNodeType("TouchSensor","PointingDeviceSensor",defineClass(x3dom.nodeTypes.X3DTouchSensorNode,function(ctx) +{x3dom.nodeTypes.TouchSensor.superClass.call(this,ctx);},{}));x3dom.registerNodeType("PlaneSensor","PointingDeviceSensor",defineClass(x3dom.nodeTypes.X3DDragSensorNode,function(ctx) +{x3dom.nodeTypes.PlaneSensor.superClass.call(this,ctx);this.addField_SFRotation(ctx,'axisRotation',0,0,1,0);this.addField_SFVec2f(ctx,'minPosition',0,0);this.addField_SFVec2f(ctx,'maxPosition',-1,-1);this.addField_SFVec3f(ctx,'offset',0,0,0);this._rotationMatrix=this._vf['axisRotation'].toMatrix();this._worldToLocalMatrix=null;this._initialPlaneIntersection=null;this._planeNormal=null;this._viewArea=null;this._currentTranslation=new x3dom.fields.SFVec3f(0.0,0.0,0.0);},{getCurrentTransform:function() +{var parentTransform=x3dom.nodeTypes.X3DDragSensorNode.prototype.getCurrentTransform.call(this);return parentTransform.mult(this._rotationMatrix);},_startDragging:function(viewarea,x,y,wx,wy,wz) +{x3dom.nodeTypes.X3DDragSensorNode.prototype._startDragging.call(this,viewarea,x,y,wx,wy,wz);this._viewArea=viewarea;this._currentTranslation=new x3dom.fields.SFVec3f(0.0,0.0,0.0);this._worldToLocalMatrix=this.getCurrentTransform().inverse();this._initialPlaneIntersection=this._worldToLocalMatrix.multMatrixPnt(new x3dom.fields.SFVec3f(wx,wy,wz));this._planeNormal=new x3dom.fields.SFVec3f(0.0,0.0,1.0);},_process2DDrag:function(x,y,dx,dy) +{x3dom.nodeTypes.X3DDragSensorNode.prototype._process2DDrag.call(this,x,y,dx,dy);var intersectionPoint;var minPos,maxPos;if(this._initialPlaneIntersection) +{var viewRay=this._viewArea.calcViewRay(x,y);viewRay.pos=this._worldToLocalMatrix.multMatrixPnt(viewRay.pos);viewRay.dir=this._worldToLocalMatrix.multMatrixVec(viewRay.dir.normalize());intersectionPoint=viewRay.intersectPlane(this._initialPlaneIntersection,this._planeNormal);if(!intersectionPoint) +{intersectionPoint=viewRay.intersectPlane(this._initialPlaneIntersection,this._planeNormal.negate());} +if(intersectionPoint) +{this._currentTranslation=intersectionPoint.subtract(this._initialPlaneIntersection);this._currentTranslation=this._currentTranslation.add(this._vf["offset"]);minPos=this._vf["minPosition"];maxPos=this._vf["maxPosition"];if(minPos.x<=maxPos.x) +{this._currentTranslation.x=Math.min(this._currentTranslation.x,maxPos.x);this._currentTranslation.x=Math.max(this._currentTranslation.x,minPos.x);} +if(minPos.y<=maxPos.y) +{this._currentTranslation.y=Math.min(this._currentTranslation.y,maxPos.y);this._currentTranslation.y=Math.max(this._currentTranslation.y,minPos.y);} +this.postMessage('translation_changed',x3dom.fields.SFVec3f.copy(this._currentTranslation));}}},_stopDragging:function() +{x3dom.nodeTypes.X3DDragSensorNode.prototype._stopDragging.call(this);if(this._vf["autoOffset"]) +{this._vf["offset"]=x3dom.fields.SFVec3f.copy(this._currentTranslation);this.postMessage('offset_changed',this._vf["offset"]);}}}));x3dom.registerNodeType("SphereSensor","PointingDeviceSensor",defineClass(x3dom.nodeTypes.X3DDragSensorNode,function(ctx) +{x3dom.nodeTypes.SphereSensor.superClass.call(this,ctx);this.addField_SFRotation(ctx,'offset',0,1,0,0);this._currentRotation=new x3dom.fields.Quaternion();},{_startDragging:function(viewarea,x,y,z) +{x3dom.nodeTypes.X3DDragSensorNode.prototype._startDragging.call(this,viewarea,x,y,z);},_process2DDrag:function(x,y,dx,dy) +{x3dom.nodeTypes.X3DDragSensorNode.prototype._process2DDrag.call(this,x,y,dx,dy);},_stopDragging:function() +{x3dom.nodeTypes.X3DDragSensorNode.prototype._stopDragging.call(this);if(this._vf["autoOffset"]) +{} +this._currentRotation=new x3dom.fields.Quaternion();}}));x3dom.registerNodeType("CylinderSensor","PointingDeviceSensor",defineClass(x3dom.nodeTypes.X3DDragSensorNode,function(ctx) +{x3dom.nodeTypes.CylinderSensor.superClass.call(this,ctx);this.addField_SFFloat(ctx,'offset',0);this.addField_SFRotation(ctx,'axisRotation',0,1,0,0);this.addField_SFFloat(ctx,'diskAngle',0.262);this.addField_SFFloat(ctx,'minAngle',0);this.addField_SFFloat(ctx,'maxAngle',-1);this._rotationMatrix=this._vf['axisRotation'].toMatrix();this._inverseToWorldMatrix=null;this._initialCylinderIntersectionVector=null;this._viewArea=null;this._cylinderRadius=0.0;this._yAxisLine=null;this._cylinderMode=true;this._currentRotationAngle=0.0;},{getCurrentTransform:function() +{var parentTransform=x3dom.nodeTypes.X3DDragSensorNode.prototype.getCurrentTransform.call(this);return parentTransform.mult(this._rotationMatrix);},_startDragging:function(viewarea,x,y,wx,wy,wz) +{x3dom.nodeTypes.X3DDragSensorNode.prototype._startDragging.call(this,viewarea,x,y,wx,wy,wz);this._currentRotation=new x3dom.fields.Quaternion();this._viewArea=viewarea;this._yAxisLine=new x3dom.fields.Line(new x3dom.fields.SFVec3f(0.0,0.0,0.0),new x3dom.fields.SFVec3f(0.0,1.0,0.0));this._inverseToWorldMatrix=this.getCurrentTransform().inverse();var firstIntersection=this._inverseToWorldMatrix.multMatrixPnt(new x3dom.fields.SFVec3f(wx,wy,wz));var closestPointOnYAxis=this._yAxisLine.closestPoint(firstIntersection);this._initialCylinderIntersectionVector=firstIntersection.subtract(closestPointOnYAxis);this._cylinderRadius=this._initialCylinderIntersectionVector.length();this._initialCylinderIntersectionVector=this._initialCylinderIntersectionVector.normalize();},_process2DDrag:function(x,y,dx,dy) +{x3dom.nodeTypes.X3DDragSensorNode.prototype._process2DDrag.call(this,x,y,dx,dy);if(this._cylinderMode) +{var viewRay=this._viewArea.calcViewRay(x,y);viewRay.pos=this._inverseToWorldMatrix.multMatrixPnt(viewRay.pos);viewRay.dir=this._inverseToWorldMatrix.multMatrixVec(viewRay.dir);var A=viewRay.dir.subtract(this._yAxisLine.dir.multiply(viewRay.dir.dot(this._yAxisLine.dir)));var B=viewRay.pos.subtract(this._yAxisLine.pos).add(this._yAxisLine.dir.multiply(this._yAxisLine.dir.dot(this._yAxisLine.pos.subtract(viewRay.pos))));var p=2*A.dot(B)/A.dot(A);var q=(B.dot(B)-this._cylinderRadius*this._cylinderRadius)/A.dot(A);var sqrt_part=p*p*0.25-q;var alpha_1;var alpha_2;if(sqrt_part>=0) +{sqrt_part=Math.sqrt(sqrt_part);alpha_1=-p*0.5+sqrt_part;alpha_2=-p*0.5-sqrt_part;alpha_1=Math.min(alpha_1,alpha_2);if(alpha_1>0.0) +{var hitPoint=viewRay.pos.add(viewRay.dir.multiply(alpha_1));var closestPointOnYAxis=this._yAxisLine.closestPoint(hitPoint);var vecToHitPoint=hitPoint.subtract(closestPointOnYAxis).normalize();this._currentRotation=x3dom.fields.Quaternion.rotateFromTo(this._initialCylinderIntersectionVector,vecToHitPoint);var offsetQuat=x3dom.fields.Quaternion.axisAngle(this._yAxisLine.dir,this._vf["offset"]);this._currentRotation=this._currentRotation.multiply(offsetQuat);this.postMessage('rotation_changed',this._currentRotation);}}} +else +{}},_stopDragging:function() +{x3dom.nodeTypes.X3DDragSensorNode.prototype._stopDragging.call(this);if(this._vf["autoOffset"]) +{this._vf["offset"]=this._currentRotation.angle();this.postMessage('offset_changed',this._vf["offset"]);}}}));x3dom.versionInfo={version:'1.6.0',revision:'5e8c0441fe2cbe9970ffd14f1546100672a95185',date:'Thu May 8 20:51:15 2014 +0200'}; \ No newline at end of file diff --git a/public/index.html b/public/index.html index 923a9a7..9db183f 100644 --- a/public/index.html +++ b/public/index.html @@ -1,11 +1,47 @@ -<!DOCTYPE html> <html lang="en"> + <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Visualization</title> + <title>X3DOM Tutorials</title> + <style> + ul { + list-style-type: none; + padding: 0; + margin: 0; + } + + .button { + text-decoration: none; + display: block; + width: 500px; + height: 25px; + color: black; + background: lightgray; + padding: 10px; + text-align: center; + border-radius: 5px; + line-height: 25px; + margin-bottom: 10px; + font-family: sans-serif; + } + + .button:hover { + background-color: #4CAF50; + color: white; + } + + .center { + display: flex; + flex-direction: column; + align-items: center; + } + </style> </head> + <body> - <a href="X3DOMTutorial/">X3DOM Tutorial</a> + <ul class="center"> + <li><a class="button" href="X3DOMTutorial/">X3DOM Tutorial</a></li> </body> -</html> + +</html> \ No newline at end of file -- GitLab