<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:959260766;
        mso-list-type:hybrid;
        mso-list-template-ids:-1808214496 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0D8;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:12.0pt;
        font-family:Wingdings;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        color:black;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'><span style='font-size:12.0pt;color:black'>I am a bit worried about you mentioning "<span style='background:white'>sometimes DEF of models first then USE inside the Switch can help… </span></span><o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>That is just a minor detail. Probably, to set up you will need to be careful what you choose to USE then see what you can do to minimize number of unique choosers. Right you are that regardless, it should not matter whether the interaction is with stuffs of the users HMD or interaction with stuffs in the Humanoid’s environment. Like when the user is getting selection hints in the HMD then responds using interactions with a scene choice panel touched by finger with more hints and other responses of HMD. <o:p></o:p></p><p class=MsoNormal>To me, that is why whatever extension of humanoid-environmental interactions are considered, the HMD or whatever it is called, is another manifestation of some variation of X3D Sensor node, with very specific inputs and outputs, and maybe has to work like a network sensor in ways, but mainly is just another type of sensor that obtains from and transmits to other sensors and scene processing events in real time. <o:p></o:p></p><p class=MsoNormal>True, there is no reason that the HMD could not be demonstrated as a device using the ‘external’ SAI, but it will be much more fun and more tunable by keeping the ‘device’ operating ‘internal’ like a native node. I don’t know enough details about what is actually going on but as a user, I want an ‘HMD’ master view but I also want Humanoid model(s) also interacting with the scene to each have one also and we may want to share views.  I mean if you are making a choice, you want to share. <o:p></o:p></p><p class=MsoNormal>Hoping to see great demos,<o:p></o:p></p><p class=MsoNormal>Joe<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:awonnink@hotmail.com">Albert Jan Wonnink</a><br><b>Sent: </b>Sunday, January 27, 2019 4:26 AM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Brutzman, Donald (Don) (CIV)</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>Re: [x3d-public] Anchor target within scene: code example,numerous references</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Hi Don,<o:p></o:p></span></p><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'>I am a bit worried about you mentioning "<span style='background:white'>sometimes DEF of models first then USE inside the Switch can help </span>". The casus is about models that are not directly loaded (visible or not) in the main scene, but as a result of a select event from the user. You have to be able to choose between thousands of models if you want to make for example a 3d virtual web shop that can be visited using an HMD. So loading them all within the main scene would not be practical. But maybe that is not what you mean.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Do you have a sample scene in X3D that demonstrates how this can be done? That would be very helpful.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Regards,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Albert Jan<o:p></o:p></span></p></div><div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><p class=MsoNormal><img border=0 width=555 height=2 style='width:5.7833in;height:.0166in' id="Horizontal_x0020_Line_x0020_1" src="cid:image002.png@01D4B655.C315ACC0"><o:p></o:p></p><div id=divRplyFwdMsg><p class=MsoNormal><b><span style='color:black'>Van:</span></b><span style='color:black'> Brutzman, Donald (Don) (CIV) <brutzman@nps.edu><br><b>Verzonden:</b> zondag 27 januari 2019 06:17<br><b>Aan:</b> Albert Jan Wonnink<br><b>CC:</b> x3d-public@web3d.org; Nicholas Polys<br><b>Onderwerp:</b> Re: [x3d-public] Anchor target within scene: code example, numerous references</span> <o:p></o:p></p><div><p class=MsoNormal> <o:p></o:p></p></div></div></div><p class=MsoNormal>Thanks for your example, apologies for delayed response.  [Back from Korea now]<br><br>Appreciate the video you posted earlier, the point is clearer and the functionality looks excellent.<br><br>On 1/22/2019 9:54 AM, Albert Jan Wonnink wrote:<br>> [...] Just to clarify my case once more, I would like to show this scene:<br>>        <br>> X3D inline anchor prototype <<a href="https://youtu.be/vPLYxkTrxX8">https://youtu.be/vPLYxkTrxX8</a>><br><br>BTW the Web3D Consortium has a YouTube site that is a good place for posting things like this.  Everyone can feel free to suggest or contribute.<br><br>        YouTube; Web3D Consortium Playlists<br>        <a href="https://www.youtube.com/user/Web3DMaster/playlists">https://www.youtube.com/user/Web3DMaster/playlists</a><br><br>> The behavior here is implemented without any client-side scripting, just with a little extended X3D that allows to specify a target of an anchor within the 3D scene.<br>> The suggested workaround using viewpoints seems complicated for this kind of scenario, but I might be wrong about this.<br><br>The X3D pseudocode/snippets also helped provide clarity, thanks for that too.<br><br>if i were doing something like this, i would have a set of TouchSensor nodes trigger a corresponding set of IntegerTrigger nodes, for each model of interest, then have each IntegerTrigger output ROUTEd to a single Switch node that then switched to the model of interest.  This is a fairly common design pattern.<br><br>This kind of functionality is explained by EventUtilities component.  These nodes allow all manner of strongly typed functionality when creating animation chains.   Please see book chapter/slides for full explanations.  For memory performance, sometimes DEF of models first then USE inside the Switch can help when multiple usages are desired.<br><br>I believe that this Event Utilities suggestion matches Joe's suggestion, use the right connections to create an event chain with the functionality needed.  Unless special logic is involved, scripting is then not needed.  Offering reassurance is that there should be a Sequencer, Interpolator or Trigger/Toggle for whatever you want to do.  Note that, since X3D is strictly typed for all event outputs/inputs, more often than not there is only one straightforward way to get a trigger-timer-interpolator-target event chain constructed.<br><br>        X3D Example Archives: X3D for Web Authors, Chapter 07 Event Animation Interpolation<br>        <a href="http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter07EventAnimationInterpolation">http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter07EventAnimationInterpolation</a><br><br>has additional links:<br><br>        X3D for Web Authors, Chapter 07 Event Animation Interpolation, slideset<br>        <a href="http://x3dgraphics.com/slidesets/X3dForWebAuthors/Chapter07EventAnimationInterpolation.pdf">http://x3dgraphics.com/slidesets/X3dForWebAuthors/Chapter07EventAnimationInterpolation.pdf</a><br><br>similarly<br><br>        X3D Example Archives: X3D for Web Authors, Chapter 08 User Interactivity<br>        <a href="http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter08UserInteractivity">http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter08UserInteractivity</a><br><br>        X3D for Web Authors, Chapter 08 User Interactivity, slideset<br>        <a href="http://x3dgraphics.com/slidesets/X3dForWebAuthors/Chapter08UserInteractivity.pdf">http://x3dgraphics.com/slidesets/X3dForWebAuthors/Chapter08UserInteractivity.pdf</a><br><br>and<br>        X3D Example Archives: X3D for Web Authors, Chapter 09 Event Utilities Scripting<br>        <a href="http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter09EventUtilitiesScripting">http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter09EventUtilitiesScripting</a><br><br>        X3D for Web Authors, Chapter 09 Event Utilities Scripting, slideset<br>        <a href="http://x3dgraphics.com/slidesets/X3dForWebAuthors/Chapter09EventUtilitiesScripting.pdf">http://x3dgraphics.com/slidesets/X3dForWebAuthors/Chapter09EventUtilitiesScripting.pdf</a><br><br>Uh, some people like the book too.  8)<br><br>The quick-reference sheet X3D Event Utility Nodes: Field Event Diagrams illustrates the functionality of the event utility nodes. These nodes receive and pass values that are sent via ROUTE connections.  Tooltips are further available for type, accessType, and each node with further detail - for example, ROUTE.<br><br>        X3D Event Utility Nodes: Field Event Diagrams<br>        <a href="http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter09EventUtilitiesScripting/X3dEventUtilityNodeEventDiagrams.pdf">http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter09EventUtilitiesScripting/X3dEventUtilityNodeEventDiagrams.pdf</a><br><br>        X3D Tooltips<br>        <a href="http://www.web3d.org/x3d/content/X3dTooltips.html#ROUTE">http://www.web3d.org/x3d/content/X3dTooltips.html#ROUTE</a><br>        <a href="http://www.web3d.org/x3d/content/X3dTooltips.html#accessType">http://www.web3d.org/x3d/content/X3dTooltips.html#accessType</a><br>        <a href="http://www.web3d.org/x3d/content/X3dTooltips.html#type">http://www.web3d.org/x3d/content/X3dTooltips.html#type</a><br><br>There are many similarities between HTML <a> anchor element and X3D Anchor.  However, again as Joe indicated, it is best to understand the differences and similarities first.<br><br>        <a href="http://www.web3d.org/x3d/content/X3dTooltips.html#Anchor">http://www.web3d.org/x3d/content/X3dTooltips.html#Anchor</a><br><br>Essentially, Anchor url address of replacement world, or #ViewpointDEFName within the current Scene, or alternate Web resource, activated by the user selecting Shape geometry within the Anchor children nodes.  The parameter field can be used to carry HTML (frame or tab) target information.<br><br>        <a href="http://www.web3d.org/x3d/content/X3dTooltips.html#Anchor.url">http://www.web3d.org/x3d/content/X3dTooltips.html#Anchor.url</a><br>        <a href="http://www.web3d.org/x3d/content/X3dTooltips.html#Anchor.parameter">http://www.web3d.org/x3d/content/X3dTooltips.html#Anchor.parameter</a><br><br>Good node to compare: TouchSensor, which solely focuses on responding to selection and hovering events.  (Note that there is a little bit of overlap too, since a TouchSense isActive output event could be ROUTEd to another Viewpoint's set_bind input field.)<br><br>        <a href="http://www.web3d.org/x3d/content/X3dTooltips.html#TouchSensor">http://www.web3d.org/x3d/content/X3dTooltips.html#TouchSensor</a><br><br>Of course all of these other sources are derivative... the authoritative functionality is defined by the X3D Architecture specification.  (Node names in tooltips are linked to that specification's index for that node.)  Links are also provided there to Schema and DTD documentation, which provide detail on what will pass validation tests.<br><br>        <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/networking.html#Anchor">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/networking.html#Anchor</a><br><br>        <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/pointingsensor.html#TouchSensor">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/pointingsensor.html#TouchSensor</a><br><br>        <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#Routes">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#Routes</a><br><br>Script nodes allow writing additional functionality.  Prototypes allow making customizable templates.  IMPORT/EXPORT allows sending events into or out of Inline nodes.<br><br>So that is all quite a lot.  Please holler if you find something missing - someone will come up with a good idea, or (occasionally) we'll fix a deficiency in the specifications.  All good.<br><br>All this semantic rigor and functional detail - courtesy of X3D Working Group and Web3D Community - means that it is possible to create scalable 3D worlds in multiple languages and file encodings, all with equivalent power and equivalent extensibility (the X in X3D).<br><br>Thanks for your work.  Have fun with immersive interactive X3D!  8)<br><br><br>On 1/24/2019 10:24 AM, Albert Jan Wonnink wrote:<br>> Hi Don,<br>> <br>> the code behind the pages could be something like this<br>> <br>> <br>> <br>> mainPage.x3d:<br>> <br>> <X3D><br>> <br>>   <Scene><br>> <br>>   <!--first menu--><br>> <br>>    <Transform translation="-1 1 3"><br>> <br>>     <!--first item--><br>> <br>>     <Transform translation="0 0 0"><br>> <br>>      <Anchor url="'menu2_1.x3d'" parameter="'target=menu2'"><br>> <br>>       <Shape …<br>> <br>>      </Anchor><br>> <br>>   </Transform><br>> <br>>     <!--second item--><br>> <br>>     <Transform translation="0 -0.2 0"><br>> <br>>      <Anchor url="'menu2_2.x3d'" parameter="'target=menu2'"><br>> <br>>       <Shape …<br>> <br>>      </Anchor><br>> <br>>   </Transform><br>> <br>>    <!--third item--><br>> <br>> ...<br>> <br>> </Transform><br>> <br>> <!--position menu2--><br>> <br>> <Transform translation="0 1 3"><br>> <br>>    <Inline DEF="menu2"></Inline><br>> <br>> </Transform><br>> <br>> <!--position models to display--><br>> <br>> <Transform translation="1 1 3"><br>> <br>>    <Inline DEF="modelsToDisplay"></Inline><br>> <br>> </Transform><br>> <br>> </Scene><br>> <br>> </X3D><br>> <br>> <br>> <br>> <br>> <br>> For each 'submenu' there is a separate file<br>> <br>> menu2_1.x3d( menu2_2.x3d, …)<br>> <br>> <X3D><br>> <br>>   <Scene><br>> <br>>   <!--first menu--><br>> <br>>    <Transform><br>> <br>>     <!--first item--><br>> <br>>     <Transform translation="0 0 0"><br>> <br>>      <Anchor url="'model_1.x3d'" parameter="'target=modelsToDisplay'"><br>> <br>>       <Shape …<br>> <br>>      </Anchor><br>> <br>>   </Transform><br>> <br>>     <!--second item--><br>> <br>>     <Transform translation="0 -0.2 0"><br>> <br>>      <Anchor url="'menu2_2.x3d'" parameter="'target=modelsToDisplay'"><br>> <br>>       <Shape …<br>> <br>>      </Anchor><br>> <br>>   </Transform><br>> <br>>    <!--third item--><br>> <br>> ...<br>> <br>> </Transform><br>> <br>> </Scene><br>> <br>> </X3D><br>> <br>> And there are the files that actually contain the models:<br>> <br>> model_1.x3d, model_2.x3d ...<br>> <br>> I think the bottom line is to allow the 'target' parameter not only have the predefined values (_blank, _self etc.) or frame names of the html page, but also allow the names of the inlines as a target.<br>> <br>> Regards,<br>> <br>> Albert Jan<br><br><br>all the best, Don<br>-- <br>Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman@nps.edu<br>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149<br>X3D graphics, virtual worlds, navy robotics <a href="http://faculty.nps.edu/brutzman">http://faculty.nps.edu/brutzman</a><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>