<div dir="auto">How about it Doug, can this example be used in the archive?</div><div dir="auto"><br></div><div dir="auto">Thanks!</div><div dir="auto"><br></div><div dir="auto">John </div><div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sun, Jan 4, 2026 at 3:20 PM Holger Seelig <<a href="mailto:holger.seelig@yahoo.de">holger.seelig@yahoo.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-break:after-white-space">Please not that this Viewport.x3d test is from the freewrl tests directory and will look same in freewrl.<div><br></div><div><a href="https://create3000.github.io/Library/Tests/Components/Layering/Viewport.x3d" target="_blank">https://create3000.github.io/Library/Tests/Components/Layering/Viewport.x3d</a></div><div><br></div><div><a href="https://freewrl.sourceforge.io/tests/35_Layering/" target="_blank">https://freewrl.sourceforge.io/tests/35_Layering/</a><br><div><br></div><div>Best regards,</div><div>Holger</div><div><br><div><div>
<div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="text-align:start;text-indent:0px;line-break:after-white-space"><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">—</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div style="line-break:after-white-space"><div><div><div><div><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;line-break:after-white-space"><div dir="auto" style="text-align:start;text-indent:0px;line-break:after-white-space"><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Holger Seelig<br><a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a><br><br></div></div></div></div></div></div></div></div></div></div></div></div>
</div>
<div><br><blockquote type="cite"><div>Am 04.01.2026 um 21:52 schrieb John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>>:</div><br><div><div dir="auto">Holger’s example here has a rich use of clipBoundary!</div><div dir="auto"><br></div><div dir="auto"><div style="font-size:inherit"><a href="https://github.com/create3000/Library/blob/main/Tests/Components/Layering/Viewport.x3d" style="font-size:inherit" target="_blank">https://github.com/create3000/Library/blob/main/Tests/Components/Layering/Viewport.x3d</a></div><br></div><div dir="auto">Hopefully, you’ll get a donation!</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">John </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jan 4, 2026 at 12:14 PM Don Brutzman <<a href="mailto:don.brutzman@gmail.com" target="_blank">don.brutzman@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div dir="ltr"><div>Appreciate your offer of a sophisticated example, but that is not what the archives and implementer community need right now.</div><div><br></div><div>In addition to LayerSet Layer Viewport, you have prototypes (which overly complicate a simple test) and Script code (which is not well supported by all X3D browsers).</div><div><br></div><div>ComposedCubeMapTexture and ComposedShader and ShaderPart add further complications that are not widely supported.</div><div><br></div><div>The request remains, for anyone: simple example demonstrating Viewport (perhaps with Layer LayerSet and no other more-complex nodes).</div><div><br>I recently sent everyone a long explanation of why simple examples are important, especially for issue requests.</div><div><ul><li>[x3d-public] Request for X3D encoding comment output from X3DPSAIL</li><li><a href="https://web3d.org/pipermail/x3d-public_web3d.org/2025-December/022165.html" target="_blank">https://web3d.org/pipermail/x3d-public_web3d.org/2025-December/022165.html</a></li></ul></div><div>Hope this helps.</div></div><div dir="ltr"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)"><br></font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">all the best, Don</font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">-- </font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">X3D Graphics, Maritime Robotics, Distributed Simulation</font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">Relative Motion Consulting  <a href="https://relativemotion.info/" style="font-family:monospace" target="_blank">https://RelativeMotion.info</a></font></div></div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jan 4, 2026 at 9:48 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div dir="auto">You can use this example of clipBoundary, in the archives, if you replace the shaders and images:</div><div dir="auto"><br></div><div dir="auto"><div style="font-size:inherit"><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/bumpyx_itesliders.x3d" style="font-size:inherit" target="_blank">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/bumpyx_itesliders.x3d</a></div><br></div><div dir="auto">I was working on a version with different shaders and no images.  The sliders didn’t work in FreeWRL, so I shelved it.  It’s available on this page, and you can use in the archives.</div><div dir="auto"><br></div><div dir="auto"></div><div style="font-size:inherit" dir="auto"><a href="https://coderextreme.net/X3DJSONLD/src/main/html/bumpyrefs.html" style="font-size:inherit" target="_blank">https://coderextreme.net/X3DJSONLD/src/main/html/bumpyrefs.html</a></div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">I don’t know if the sliders work on these as I am on my phone.   Try dragging the grey/white letters next to the = sign with the mouse.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">Again, much of this is Christoph Valentin and Doug Sanden’s work, with a new face!</div><div dir="auto"></div><div dir="auto"><br></div><div dir="auto">John</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jan 4, 2026 at 10:42 AM Don Brutzman <<a href="mailto:don.brutzman@gmail.com" target="_blank">don.brutzman@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div dir="ltr"><div>John, we do not have a simple example demonstrating proper use of the Viewport node in the X3D Example Archives, and so it is difficult to test what you are reporting.</div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)"><br></font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">all the best, Don</font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">-- </font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">X3D Graphics, Maritime Robotics, Distributed Simulation</font></div><div style="color:rgb(34,34,34)"><font face="monospace" style="font-family:monospace;color:rgb(34,34,34)">Relative Motion Consulting  <a href="https://relativemotion.info/" style="font-family:monospace" target="_blank">https://RelativeMotion.info</a></font></div></div></div></div><br></div><br><div class="gmail_quote"></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jan 4, 2026 at 8:31 AM John Carlson via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>> wrote:<br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"></blockquote></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div><div dir="auto"><div dir="auto">One of the gotchas in adding strict mode to Ajv JSON schema validation is Viewport.clipBoundary:</div><div dir="auto"><br></div><div dir="auto"><div style="font-size:inherit"><pre style="font-family:monospace;font-size:inherit;margin-left:25px;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration:none;background-color:rgb(255,255,255)">Viewport : X3DViewportNode, X3DBoundedObject {
  MFNode  [in]     addChildren             [X3DChildNode]
  MFNode  [in]     removeChildren          [X3DChildNode]
  MFNode  [in,out] children       []       [X3DChildNode]
  MFFloat [in,out] clipBoundary   0 1 0 1  [0,1]
  SFBool  [in,out] bboxDisplay    FALSE
  SFNode  [in,out] metadata       NULL     [X3DMetadataObject]
  SFBool  [in,out] visible        TRUE
  SFVec3f []       bboxCenter     0 0 0    (-∞,∞)
  SFVec3f []       bboxSize       -1 -1 -1 [0,∞) or -1 -1 -1
}</pre></div>I don’t recall if this was discussed on the mailing list before.</div><div dir="auto"><br></div><div dir="auto">The error reported was:</div></div><div dir="auto"><br></div><div dir="auto"><div style="font-size:inherit"><pre style="white-space:pre-wrap;font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace;color:rgb(49,49,49)"><code style="font-size:1rem;font-family:monospace">strict mode: "prefixItems" is 4-tuple, but minItems or maxItems/items are not specified or different at path "#/oneOf/1/properties/%40clipBoundary"</code></pre></div><br></div><div dir="auto">I don’t know if # prefixItems = 4 is appropriate here, since clipBoundary is an MFFloat.  I don’t know how to set a default for MFFloat without prefixItems.  I could set minItems = 0</div><div dir="auto"><br></div><div dir="auto">The JSON schema says: </div><div dir="auto"><br></div><div dir="auto"><div style="font-size:inherit">  "@clipBoundary": {<br style="font-size:inherit">              "$comment": "MFFloat inputOutput",<br style="font-size:inherit">              "type": "array",<br style="font-size:inherit">              "prefixItems": [<br style="font-size:inherit">                {<br style="font-size:inherit">                  "default": 0,<br style="font-size:inherit">                  "maximum": 1,<br style="font-size:inherit">                  "minimum": 0,<br style="font-size:inherit">                  "type": "number"<br style="font-size:inherit">                },<br style="font-size:inherit">                {<br style="font-size:inherit">                  "default": 1,<br style="font-size:inherit">                  "maximum": 1,<br style="font-size:inherit">                  "minimum": 0,<br style="font-size:inherit">                  "type": "number"<br style="font-size:inherit">                },<br style="font-size:inherit">                {<br style="font-size:inherit">                  "default": 0,<br style="font-size:inherit">                  "maximum": 1,<br style="font-size:inherit">                  "minimum": 0,<br style="font-size:inherit">                  "type": "number"<br style="font-size:inherit">                },<br style="font-size:inherit">                {<br style="font-size:inherit">                  "default": 1,<br style="font-size:inherit">                  "maximum": 1,<br style="font-size:inherit">                  "minimum": 0,<br style="font-size:inherit">                  "type": "number"<br style="font-size:inherit">                }<br style="font-size:inherit">              ],<br style="font-size:inherit">              "items": {<br style="font-size:inherit">                "maximum": 1,<br style="font-size:inherit">                "minimum": 0,<br style="font-size:inherit">                "type": "number"<br style="font-size:inherit">              }<br style="font-size:inherit">            },</div><br></div><div dir="auto"><span><br></span></div><div dir="auto"><span>X3DUOM 4.0 says: </span></div><div dir="auto"><div dir="auto"><br></div><div><div style="font-size:inherit" dir="auto">ConcreteNode name="Viewport"><br style="font-size:inherit">         <InterfaceDefinition specificationUrl="<a href="https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/layering.html#Viewport" target="_blank">https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/layering.html#Viewport</a>"<br style="font-size:inherit">                              appinfo="Viewport is a Grouping node that can contain most nodes."><br style="font-size:inherit">            <componentInfo name="Layering" level="1"/><br style="font-size:inherit">            <Inheritance baseType="X3DViewportNode"/><br style="font-size:inherit">[snip]<br style="font-size:inherit">            <field name="clipBoundary"<br style="font-size:inherit">                   type="MFFloat"<br style="font-size:inherit">                   accessType="inputOutput"<br style="font-size:inherit">                   default="0 1 0 1"<br style="font-size:inherit">                   minInclusive="0"<br style="font-size:inherit">                   maxInclusive="1"<br style="font-size:inherit">                   description="clipBoundary is specified in fractions of the normal render surface in the sequence left/right/bottom/top."/><br style="font-size:inherit">[snip]</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">An addition, such as min/max length, if needed, would be a welcome addition to X3DUOM.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">Also X3DUOM 4.0 XML ConcreteNode Viewport wasn’t viewable on my iPhone in Google drive as downloaded from <a href="http://web3d.org/" target="_blank">web3d.org</a> (there was no way to view the full XML in safari, chrome or on sourceforge or drive)<span style="font-size:inherit">.  I probably could have downloaded from sourceforge.</span></div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">So I used my old copy on GitHub.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">John</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto"><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
</blockquote></div></div>
</blockquote></div></div>
</div>
</div></blockquote></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>
</div></blockquote></div><br></div></div></div></div></blockquote></div></div>