update documentation
This commit is contained in:
parent
543dd6bf71
commit
8367cf3843
Binary file not shown.
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 28 KiB |
|
@ -80,9 +80,10 @@ value: draft-XRFRAGMENTS-leonvankammen-00
|
||||||
|
|
||||||
<h1 class="special" id="abstract">Abstract</h1>
|
<h1 class="special" id="abstract">Abstract</h1>
|
||||||
|
|
||||||
<p>This draft is a specification for 4D URI’s & <a href="https://github.com/coderofsalvation/hypermediatic">hypermediatic</a> navigation, which links together space, time & text together, for hypermedia browsers with- or without a network-connection.<br>
|
<p>This draft is a specification for 4D URI’s & <a href="https://github.com/coderofsalvation/hypermediatic">hypermediatic</a> navigation, to enable a spatial web for hypermedia browsers with- or without a network-connection.<br>
|
||||||
The specification uses <a href="https://www.w3.org/TR/media-frags/">W3C Media Fragments</a> and <a href="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</a> to promote spatial addressibility, sharing, navigation, filtering and databinding objects for (XR) Browsers.<br>
|
The specification uses <a href="https://www.w3.org/TR/media-frags/">W3C Media Fragments</a> and <a href="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</a> to promote spatial addressibility, sharing, navigation, filtering and databinding objects for (XR) Browsers.<br>
|
||||||
XR Fragments allows us to better use existing metadata inside 3D scene(files), by connecting it to proven technologies like <a href="https://en.wikipedia.org/wiki/URI_fragment">URI Fragments</a>.</p>
|
XR Fragments allows us to better use existing metadata inside 3D scene(files), by connecting it to proven technologies like <a href="https://en.wikipedia.org/wiki/URI_fragment">URI Fragments</a>.<br>
|
||||||
|
XR Fragments views spatial webs thru the lens of 3D scene URI’s, rather than thru code(frameworks) or protocol-specific browsers (webbrowser e.g.).</p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>Almost every idea in this document is demonstrated at <a href="https://xrfragment.org">https://xrfragment.org</a></p>
|
<p>Almost every idea in this document is demonstrated at <a href="https://xrfragment.org">https://xrfragment.org</a></p>
|
||||||
|
@ -90,8 +91,8 @@ XR Fragments allows us to better use existing metadata inside 3D scene(files), b
|
||||||
<section data-matter="main">
|
<section data-matter="main">
|
||||||
<h1 id="introduction">Introduction</h1>
|
<h1 id="introduction">Introduction</h1>
|
||||||
|
|
||||||
<p>How can we add more control to existing text & 3D scenes, without introducing new dataformats?<br>
|
<p>How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br>
|
||||||
Historically, there’s many attempts to create the ultimate markuplanguage or 3D fileformat.<br>
|
Historically, there’s many attempts to create the ultimate 3D fileformat.<br>
|
||||||
The lowest common denominator is: designers describing/tagging/naming things using <strong>plain text</strong>.<br>
|
The lowest common denominator is: designers describing/tagging/naming things using <strong>plain text</strong>.<br>
|
||||||
XR Fragments exploits the fact that all 3D models already contain such metadata:</p>
|
XR Fragments exploits the fact that all 3D models already contain such metadata:</p>
|
||||||
|
|
||||||
|
@ -179,7 +180,7 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
|
||||||
|
|
||||||
<h1 id="hypermediatic-feedbackloop-for-xr-browsers">Hypermediatic FeedbackLoop for XR browsers</h1>
|
<h1 id="hypermediatic-feedbackloop-for-xr-browsers">Hypermediatic FeedbackLoop for XR browsers</h1>
|
||||||
|
|
||||||
<p><code>href</code> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds <strong>click</strong> (<code>xrf://#....</code>) or <strong>navigate</strong> (<code>xrf://#pos=...</code>)<br>
|
<p><code>href</code> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds stateless <strong>click</strong> (<code>xrf://#....</code>) or <strong>navigate</strong> (<code>xrf://#pos=...</code>)
|
||||||
as well (which allows many extra interactions which otherwise need a scripting language). This is known as <strong>hashbus</strong>-only events (see image above).</p>
|
as well (which allows many extra interactions which otherwise need a scripting language). This is known as <strong>hashbus</strong>-only events (see image above).</p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
|
@ -319,6 +320,44 @@ sub-delims = "," / "="
|
||||||
In other words, the URL updates to: <code>https://me.com?https://me.com/other.glb</code> when navigating to <code>https://me.com/other.glb</code> from inside a <code>https://me.com</code> WebXR experience e.g.<br>
|
In other words, the URL updates to: <code>https://me.com?https://me.com/other.glb</code> when navigating to <code>https://me.com/other.glb</code> from inside a <code>https://me.com</code> WebXR experience e.g.<br>
|
||||||
That way, if the link gets shared, the XR Fragments implementation at <code>https://me.com</code> can load the latter (and still indicates which XR Fragments entrypoint-experience/client was used).</p>
|
That way, if the link gets shared, the XR Fragments implementation at <code>https://me.com</code> can load the latter (and still indicates which XR Fragments entrypoint-experience/client was used).</p>
|
||||||
|
|
||||||
|
<h1 id="spatial-referencing-3d">Spatial Referencing 3D</h1>
|
||||||
|
|
||||||
|
<p>XR Fragments assume the following objectname-to-URIFragment mapping:</p>
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
my.io/scene.fbx
|
||||||
|
+─────────────────────────────+
|
||||||
|
│ sky │ src: http://my.io/scene.fbx#sky (includes building,mainobject,floor)
|
||||||
|
│ +─────────────────────────+ │
|
||||||
|
│ │ building │ │ src: http://my.io/scene.fbx#building (includes mainobject,floor)
|
||||||
|
│ │ +─────────────────────+ │ │
|
||||||
|
│ │ │ mainobject │ │ │ src: http://my.io/scene.fbx#mainobject (includes floor)
|
||||||
|
│ │ │ +─────────────────+ │ │ │
|
||||||
|
│ │ │ │ floor │ │ │ │ src: http://my.io/scene.fbx#floor (just floor object)
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ +─────────────────+ │ │ │
|
||||||
|
│ │ +─────────────────────+ │ │
|
||||||
|
│ +─────────────────────────+ │
|
||||||
|
+─────────────────────────────+
|
||||||
|
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Every 3D fileformat supports named 3D object, and this name allows URLs (fragments) to reference them (and their children objects).</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p>Clever nested design of 3D scenes allow great ways for re-using content, and/or previewing scenes.<br>
|
||||||
|
For example, to render a portal with a preview-version of the scene, create an 3D object with:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>href: <code>https://scene.fbx</code></li>
|
||||||
|
<li>src: <code>https://otherworld.gltf#mainobject</code></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>It also allows <strong>sourceportation</strong>, which basically means the enduser can teleport to the original XR Document of an <code>src</code> embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it.</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
<h1 id="list-of-uri-fragments">List of URI Fragments</h1>
|
<h1 id="list-of-uri-fragments">List of URI Fragments</h1>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -596,9 +635,15 @@ That way, if the link gets shared, the XR Fragments implementation at <code>http
|
||||||
<td>+0.5,+0.5</td>
|
<td>+0.5,+0.5</td>
|
||||||
<td>scroll instantly by adding 0.5 to the current uv coordinates</td>
|
<td>scroll instantly by adding 0.5 to the current uv coordinates</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>media parameter (shader uniform)</td>
|
||||||
|
<td>u:<uniform>=<string</td>
|
||||||
|
<td>float</td>
|
||||||
|
<td>vec2</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>| media parameter (shader uniform) | u:<uniform>=<string|float|vec2|vec3|vec4> | u:color=1,0,0 | set shader uniform value |</p>
|
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>* = this is extending the <a href="https://www.w3.org/TR/media-frags/#mf-advanced">W3C media fragments</a> with (missing) playback/viewport-control. Normally <code>#t=0,2</code> implies setting start/stop-values AND starting playback, whereas <code>#s=0&loop</code> allows pausing a video, speeding up/slowing down media, as well as enabling/disabling looping.</p>
|
<p>* = this is extending the <a href="https://www.w3.org/TR/media-frags/#mf-advanced">W3C media fragments</a> with (missing) playback/viewport-control. Normally <code>#t=0,2</code> implies setting start/stop-values AND starting playback, whereas <code>#s=0&loop</code> allows pausing a video, speeding up/slowing down media, as well as enabling/disabling looping.</p>
|
||||||
|
@ -642,44 +687,6 @@ That way, if the link gets shared, the XR Fragments implementation at <code>http
|
||||||
|
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
<h1 id="spatial-referencing-3d">Spatial Referencing 3D</h1>
|
|
||||||
|
|
||||||
<p>XR Fragments assume the following objectname-to-URIFragment mapping:</p>
|
|
||||||
|
|
||||||
<pre><code>
|
|
||||||
my.io/scene.fbx
|
|
||||||
+─────────────────────────────+
|
|
||||||
│ sky │ src: http://my.io/scene.fbx#sky (includes building,mainobject,floor)
|
|
||||||
│ +─────────────────────────+ │
|
|
||||||
│ │ building │ │ src: http://my.io/scene.fbx#building (includes mainobject,floor)
|
|
||||||
│ │ +─────────────────────+ │ │
|
|
||||||
│ │ │ mainobject │ │ │ src: http://my.io/scene.fbx#mainobject (includes floor)
|
|
||||||
│ │ │ +─────────────────+ │ │ │
|
|
||||||
│ │ │ │ floor │ │ │ │ src: http://my.io/scene.fbx#floor (just floor object)
|
|
||||||
│ │ │ │ │ │ │ │
|
|
||||||
│ │ │ +─────────────────+ │ │ │
|
|
||||||
│ │ +─────────────────────+ │ │
|
|
||||||
│ +─────────────────────────+ │
|
|
||||||
+─────────────────────────────+
|
|
||||||
|
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Every 3D fileformat supports named 3D object, and this name allows URLs (fragments) to reference them (and their children objects).</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p>Clever nested design of 3D scenes allow great ways for re-using content, and/or previewing scenes.<br>
|
|
||||||
For example, to render a portal with a preview-version of the scene, create an 3D object with:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>href: <code>https://scene.fbx</code></li>
|
|
||||||
<li>src: <code>https://otherworld.gltf#mainobject</code></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>It also allows <strong>sourceportation</strong>, which basically means the enduser can teleport to the original XR Document of an <code>src</code> embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it.</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<h1 id="navigating-3d">Navigating 3D</h1>
|
<h1 id="navigating-3d">Navigating 3D</h1>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -712,7 +719,7 @@ For example, to render a portal with a preview-version of the scene, create an 3
|
||||||
<li>the Y-coordinate of <code>pos</code> identifies the floorposition. This means that desktop-projections usually need to add 1.5m (average person height) on top (which is done automatically by VR/AR headsets).</li>
|
<li>the Y-coordinate of <code>pos</code> identifies the floorposition. This means that desktop-projections usually need to add 1.5m (average person height) on top (which is done automatically by VR/AR headsets).</li>
|
||||||
<li>set the position of the camera accordingly to the vector3 values of <code>#pos</code></li>
|
<li>set the position of the camera accordingly to the vector3 values of <code>#pos</code></li>
|
||||||
<li><code>rot</code> sets the rotation of the camera (only for non-VR/AR headsets)</li>
|
<li><code>rot</code> sets the rotation of the camera (only for non-VR/AR headsets)</li>
|
||||||
<li><code>t</code> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
|
<li>mediafragment <code>t</code> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
|
||||||
<li>after scene load: in case an <code>href</code> does not mention any <code>pos</code>-coordinate, <code>pos=0,0,0</code> will be assumed</li>
|
<li>after scene load: in case an <code>href</code> does not mention any <code>pos</code>-coordinate, <code>pos=0,0,0</code> will be assumed</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
@ -860,19 +867,19 @@ Resizing will be happen accordingly to its placeholder object <code>aquariumcube
|
||||||
|
|
||||||
<li><p>relocation/reorientation should happen locally for local URI’s (<code>#pos=....</code>)</p></li>
|
<li><p>relocation/reorientation should happen locally for local URI’s (<code>#pos=....</code>)</p></li>
|
||||||
|
|
||||||
<li><p>navigation should not happen “immediately” when user is more than 2 meter away from the portal/object containing the href (to prevent accidental navigation e.g.)</p></li>
|
<li><p>navigation should not happen “immediately” when user is more than 5 meter away from the portal/object containing the href (to prevent accidental navigation e.g.)</p></li>
|
||||||
|
|
||||||
<li><p>URL navigation should always be reflected in the client (in case of javascript: see [<a href="https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/js/three/navigator.js">here</a> for an example navigator).</p></li>
|
<li><p>URL navigation should always be reflected in the client URL-bar (in case of javascript: see [<a href="https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/js/three/navigator.js">here</a> for an example navigator), and only update the URL-bar after the scene (default fragment <code>#</code>) has been loaded.</p></li>
|
||||||
|
|
||||||
<li><p>In XR mode, the navigator back/forward-buttons should be always visible (using a wearable e.g., see [<a href="https://github.com/coderofsalvation/xrfragment/blob/dev/example/aframe/sandbox/index.html#L26-L29">here</a> for an example wearable)</p></li>
|
<li><p>In immersive XR mode, the navigator back/forward-buttons should be always visible (using a wearable e.g., see [<a href="https://github.com/coderofsalvation/xrfragment/blob/dev/example/aframe/sandbox/index.html#L26-L29">here</a> for an example wearable)</p></li>
|
||||||
|
|
||||||
<li><p>in case of navigating to a new [[pos)ition, “first” navigate to the “current position” so that the “back-button” of the “browser-history” always refers to the previous position (see [<a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js#L97">here</a>)</p></li>
|
<li><p>make sure that the “back-button” of the “browser-history” always refers to the previous position (see [<a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js#L97">here</a>)</p></li>
|
||||||
|
|
||||||
<li><p>ignore previous rule in special cases, like clicking an <code>href</code> using camera-portal collision (the back-button would cause a teleport-loop)</p></li>
|
<li><p>ignore previous rule in special cases, like clicking an <code>href</code> using camera-portal collision (the back-button could cause a teleport-loop if the previous position is too close)</p></li>
|
||||||
|
|
||||||
<li><p>href-events should bubble upward the node-tree</p></li>
|
<li><p>href-events should bubble upward the node-tree (from children to ancestors, so that ancestors can also contain an href), however only 1 href can be executed at the same time.</p></li>
|
||||||
|
|
||||||
<li><p>the end-user navigator back/forward buttons should repeat a back/forward action until a <code>pos=...</code> primitive is found (the inbetween interaction URI’s are only for UX research purposes)</p></li>
|
<li><p>the end-user navigator back/forward buttons should repeat a back/forward action until a <code>pos=...</code> primitive is found (the stateless xrf:// href-values should not be pushed to the url-history)</p></li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p><a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js">» example implementation</a><br>
|
<p><a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js">» example implementation</a><br>
|
||||||
|
@ -1114,30 +1121,22 @@ Each matched object (not their children) will be toggled (in)visible when select
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
<p>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br>
|
<p>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br>
|
||||||
Perhaps the following question is related: why is HTML adopted less in games outside the browser?
|
Perhaps the following question is related: why is HTML adopted less in games outside the browser?</p>
|
||||||
Through the lens of constructive lazy game-developers, ideally metadata must come <strong>with</strong> text, but not <strong>obfuscate</strong> the text, or <strong>spawning another request</strong> to fetch it.<br>
|
|
||||||
XR Fragments does this by detecting Bib(s)Tex, without introducing a new language or fileformat<br></p>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Why Bib(s)Tex? Because its seems to be the lowest common denominator for an human-curated XRWG (extendable by speech/scanner/writing/typing e.g, see <a href="https://github.com/coderofsalvation/hashtagbibs#bibs--bibtex-combo-lowest-common-denominator-for-linking-data">further motivation here</a>)</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p>Hence:</p>
|
<p>Hence:</p>
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
<li>XR Fragments promotes (de)serializing a scene to the XRWG (<a href="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</a>)</li>
|
<li>XR Fragments promotes (de)serializing a scene to a (lowercase) XRWG (<a href="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</a>)</li>
|
||||||
<li>XR Fragments primes the XRWG, by collecting words from the <code>tag</code> and name-property of 3D objects.</li>
|
<li>XR Fragments primes the XRWG, by collecting words from the <code>tag</code> and name-property of 3D objects.</li>
|
||||||
<li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype & Data URI)</li>
|
<li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype & Data URI)</li>
|
||||||
<li><a href="https://github.com/coderofsalvation/hashtagbibs">Bib’s</a> and BibTex are first tag citizens for priming the XRWG with words (from XR text)</li>
|
|
||||||
<li>Like Bibs, XR Fragments generalizes the BibTex author/title-semantics (<code>author{title}</code>) into <strong>this</strong> points to <strong>that</strong> (<code>this{that}</code>)</li>
|
|
||||||
<li>The XRWG should be recalculated when textvalues (in <code>src</code>) change</li>
|
<li>The XRWG should be recalculated when textvalues (in <code>src</code>) change</li>
|
||||||
<li>HTML/RDF/JSON is still great, but is beyond the XRWG-scope (they fit better in the application-layer)</li>
|
<li>HTML/RDF/JSON is still great, but is beyond the XRWG-scope (they fit better in the application-layer, or as embedded src content)</li>
|
||||||
<li>Applications don’t have to be able to access the XRWG programmatically, as they can easily generate one themselves by traversing the scene-nodes.</li>
|
<li>Applications don’t have to be able to access the XRWG programmatically, as they can easily generate one themselves by traversing the scene-nodes.</li>
|
||||||
<li>The XR Fragment focuses on fast and easy-to-generate end-user controllable word graphs (instead of complex implementations that try to defeat word ambiguity)</li>
|
<li>The XR Fragment focuses on fast and easy-to-generate end-user controllable word graphs (instead of complex implementations that try to defeat word ambiguity)</li>
|
||||||
<li>Tags are the scope for now (supporting <a href="https://github.com/WICG/scroll-to-text-fragment">https://github.com/WICG/scroll-to-text-fragment</a> will be considered)</li>
|
<li>Tags are the scope for now (supporting <a href="https://github.com/WICG/scroll-to-text-fragment">https://github.com/WICG/scroll-to-text-fragment</a> will be considered)</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p>Example:</p>
|
<p>Example of generating BiBTex out of the XRWG and textdata with hashtags:</p>
|
||||||
|
|
||||||
<pre><code> http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
<pre><code> http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
||||||
----------------------------------------------------------------------------+--------------------------------------
|
----------------------------------------------------------------------------+--------------------------------------
|
||||||
|
@ -1147,7 +1146,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
|
||||||
| | | / \ | | @baroque{castle,
|
| | | / \ | | @baroque{castle,
|
||||||
| John built houses in baroque style. | | / \ | | url = {https://y.io/z.fbx#castle}
|
| John built houses in baroque style. | | / \ | | url = {https://y.io/z.fbx#castle}
|
||||||
| | | |_____| | | }
|
| | | |_____| | | }
|
||||||
| #john@baroque | +-----│-----+ | @baroque{john}
|
| | +-----│-----+ | @baroque{john}
|
||||||
| | │ |
|
| | │ |
|
||||||
| | ├─ name: castle |
|
| | ├─ name: castle |
|
||||||
| | └─ tag: house baroque |
|
| | └─ tag: house baroque |
|
||||||
|
@ -1163,7 +1162,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
|
||||||
<p>the <code>#john@baroque</code>-bib associates both text <code>John</code> and objectname <code>john</code>, with tag <code>baroque</code></p>
|
<p>the <code>#john@baroque</code>-bib associates both text <code>John</code> and objectname <code>john</code>, with tag <code>baroque</code></p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
<p>Another example:</p>
|
<p>Another example of deriving a graphdata from the XRWG:</p>
|
||||||
|
|
||||||
<pre><code> http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
<pre><code> http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
||||||
----------------------------------------------------------------------------+--------------------------------------
|
----------------------------------------------------------------------------+--------------------------------------
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -10,11 +10,13 @@
|
||||||
<workgroup>Jens & Leon Internet Engineering Task Force</workgroup>
|
<workgroup>Jens & Leon Internet Engineering Task Force</workgroup>
|
||||||
|
|
||||||
<abstract>
|
<abstract>
|
||||||
<t>This draft is a specification for 4D URI's & <eref target="https://github.com/coderofsalvation/hypermediatic">hypermediatic</eref> navigation, which links together space, time & text together, for hypermedia browsers with- or without a network-connection.<br />
|
<t>This draft is a specification for 4D URI's & <eref target="https://github.com/coderofsalvation/hypermediatic">hypermediatic</eref> navigation, to enable a spatial web for hypermedia browsers with- or without a network-connection.<br />
|
||||||
|
|
||||||
The specification uses <eref target="https://www.w3.org/TR/media-frags/">W3C Media Fragments</eref> and <eref target="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</eref> to promote spatial addressibility, sharing, navigation, filtering and databinding objects for (XR) Browsers.<br />
|
The specification uses <eref target="https://www.w3.org/TR/media-frags/">W3C Media Fragments</eref> and <eref target="https://www.rfc-editor.org/rfc/rfc6570">URI Templates (RFC6570)</eref> to promote spatial addressibility, sharing, navigation, filtering and databinding objects for (XR) Browsers.<br />
|
||||||
|
|
||||||
XR Fragments allows us to better use existing metadata inside 3D scene(files), by connecting it to proven technologies like <eref target="https://en.wikipedia.org/wiki/URI_fragment">URI Fragments</eref>.</t>
|
XR Fragments allows us to better use existing metadata inside 3D scene(files), by connecting it to proven technologies like <eref target="https://en.wikipedia.org/wiki/URI_fragment">URI Fragments</eref>.<br />
|
||||||
|
|
||||||
|
XR Fragments views spatial webs thru the lens of 3D scene URI's, rather than thru code(frameworks) or protocol-specific browsers (webbrowser e.g.).</t>
|
||||||
<t>Almost every idea in this document is demonstrated at <eref target="https://xrfragment.org">https://xrfragment.org</eref></t>
|
<t>Almost every idea in this document is demonstrated at <eref target="https://xrfragment.org">https://xrfragment.org</eref></t>
|
||||||
</abstract>
|
</abstract>
|
||||||
|
|
||||||
|
@ -23,9 +25,9 @@ XR Fragments allows us to better use existing metadata inside 3D scene(files), b
|
||||||
<middle>
|
<middle>
|
||||||
|
|
||||||
<section anchor="introduction"><name>Introduction</name>
|
<section anchor="introduction"><name>Introduction</name>
|
||||||
<t>How can we add more control to existing text & 3D scenes, without introducing new dataformats?<br />
|
<t>How can we add more control to existing text and 3D scenes, without introducing new dataformats?<br />
|
||||||
|
|
||||||
Historically, there's many attempts to create the ultimate markuplanguage or 3D fileformat.<br />
|
Historically, there's many attempts to create the ultimate 3D fileformat.<br />
|
||||||
|
|
||||||
The lowest common denominator is: designers describing/tagging/naming things using <strong>plain text</strong>.<br />
|
The lowest common denominator is: designers describing/tagging/naming things using <strong>plain text</strong>.<br />
|
||||||
|
|
||||||
|
@ -105,7 +107,7 @@ But approaches things from a higherlevel feedbackloop/hypermedia browser-perspec
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="hypermediatic-feedbackloop-for-xr-browsers"><name>Hypermediatic FeedbackLoop for XR browsers</name>
|
<section anchor="hypermediatic-feedbackloop-for-xr-browsers"><name>Hypermediatic FeedbackLoop for XR browsers</name>
|
||||||
<t><tt>href</tt> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds <strong>click</strong> (<tt>xrf://#....</tt>) or <strong>navigate</strong> (<tt>xrf://#pos=...</tt>)<br />
|
<t><tt>href</tt> metadata traditionally implies <strong>click</strong> AND <strong>navigate</strong>, however XR Fragments adds stateless <strong>click</strong> (<tt>xrf://#....</tt>) or <strong>navigate</strong> (<tt>xrf://#pos=...</tt>)
|
||||||
as well (which allows many extra interactions which otherwise need a scripting language). This is known as <strong>hashbus</strong>-only events (see image above).</t>
|
as well (which allows many extra interactions which otherwise need a scripting language). This is known as <strong>hashbus</strong>-only events (see image above).</t>
|
||||||
<blockquote><t>Being able to use the same URI Fragment DSL for navigation (<tt>href: #foo</tt>) as well as interactions (<tt>href: xrf://#bar</tt>) greatly simplifies implementation, increases HFL, and reduces need for scripting languages.</t>
|
<blockquote><t>Being able to use the same URI Fragment DSL for navigation (<tt>href: #foo</tt>) as well as interactions (<tt>href: xrf://#bar</tt>) greatly simplifies implementation, increases HFL, and reduces need for scripting languages.</t>
|
||||||
</blockquote><t>This opens up the following benefits for traditional & future webbrowsers:</t>
|
</blockquote><t>This opens up the following benefits for traditional & future webbrowsers:</t>
|
||||||
|
@ -230,6 +232,39 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section anchor="spatial-referencing-3d"><name>Spatial Referencing 3D</name>
|
||||||
|
<t>XR Fragments assume the following objectname-to-URIFragment mapping:</t>
|
||||||
|
|
||||||
|
<artwork><![CDATA[
|
||||||
|
my.io/scene.fbx
|
||||||
|
+─────────────────────────────+
|
||||||
|
│ sky │ src: http://my.io/scene.fbx#sky (includes building,mainobject,floor)
|
||||||
|
│ +─────────────────────────+ │
|
||||||
|
│ │ building │ │ src: http://my.io/scene.fbx#building (includes mainobject,floor)
|
||||||
|
│ │ +─────────────────────+ │ │
|
||||||
|
│ │ │ mainobject │ │ │ src: http://my.io/scene.fbx#mainobject (includes floor)
|
||||||
|
│ │ │ +─────────────────+ │ │ │
|
||||||
|
│ │ │ │ floor │ │ │ │ src: http://my.io/scene.fbx#floor (just floor object)
|
||||||
|
│ │ │ │ │ │ │ │
|
||||||
|
│ │ │ +─────────────────+ │ │ │
|
||||||
|
│ │ +─────────────────────+ │ │
|
||||||
|
│ +─────────────────────────+ │
|
||||||
|
+─────────────────────────────+
|
||||||
|
|
||||||
|
]]>
|
||||||
|
</artwork>
|
||||||
|
<blockquote><t>Every 3D fileformat supports named 3D object, and this name allows URLs (fragments) to reference them (and their children objects).</t>
|
||||||
|
</blockquote><t>Clever nested design of 3D scenes allow great ways for re-using content, and/or previewing scenes.<br />
|
||||||
|
|
||||||
|
For example, to render a portal with a preview-version of the scene, create an 3D object with:</t>
|
||||||
|
|
||||||
|
<ul spacing="compact">
|
||||||
|
<li>href: <tt>https://scene.fbx</tt></li>
|
||||||
|
<li>src: <tt>https://otherworld.gltf#mainobject</tt></li>
|
||||||
|
</ul>
|
||||||
|
<blockquote><t>It also allows <strong>sourceportation</strong>, which basically means the enduser can teleport to the original XR Document of an <tt>src</tt> embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it.</t>
|
||||||
|
</blockquote></section>
|
||||||
|
|
||||||
<section anchor="list-of-uri-fragments"><name>List of URI Fragments</name>
|
<section anchor="list-of-uri-fragments"><name>List of URI Fragments</name>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -495,9 +530,15 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
|
||||||
<td>+0.5,+0.5</td>
|
<td>+0.5,+0.5</td>
|
||||||
<td>scroll instantly by adding 0.5 to the current uv coordinates</td>
|
<td>scroll instantly by adding 0.5 to the current uv coordinates</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>media parameter (shader uniform)</td>
|
||||||
|
<td>u:<uniform>=<string</td>
|
||||||
|
<td>float</td>
|
||||||
|
<td>vec2</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table><t>| media parameter (shader uniform) | u:<uniform>=<string|float|vec2|vec3|vec4> | u:color=1,0,0 | set shader uniform value |</t>
|
</table><blockquote><t>* = this is extending the <eref target="https://www.w3.org/TR/media-frags/#mf-advanced">W3C media fragments</eref> with (missing) playback/viewport-control. Normally <tt>#t=0,2</tt> implies setting start/stop-values AND starting playback, whereas <tt>#s=0&loop</tt> allows pausing a video, speeding up/slowing down media, as well as enabling/disabling looping.</t>
|
||||||
<blockquote><t>* = this is extending the <eref target="https://www.w3.org/TR/media-frags/#mf-advanced">W3C media fragments</eref> with (missing) playback/viewport-control. Normally <tt>#t=0,2</tt> implies setting start/stop-values AND starting playback, whereas <tt>#s=0&loop</tt> allows pausing a video, speeding up/slowing down media, as well as enabling/disabling looping.</t>
|
|
||||||
<t>The rationale for <tt>uv</tt> is that the <tt>xywh</tt> Media Fragment deals with rectangular media, which does not translate well to 3D models (which use triangular polygons, not rectangular) positioned by uv-coordinates. This also explains the absense of a <tt>scale</tt> or <tt>rotate</tt> primitive, which is challenged by this, as well as multiple origins (mesh- or texture).</t>
|
<t>The rationale for <tt>uv</tt> is that the <tt>xywh</tt> Media Fragment deals with rectangular media, which does not translate well to 3D models (which use triangular polygons, not rectangular) positioned by uv-coordinates. This also explains the absense of a <tt>scale</tt> or <tt>rotate</tt> primitive, which is challenged by this, as well as multiple origins (mesh- or texture).</t>
|
||||||
</blockquote><t>Example URI's:</t>
|
</blockquote><t>Example URI's:</t>
|
||||||
|
|
||||||
|
@ -538,39 +579,6 @@ That way, if the link gets shared, the XR Fragments implementation at <tt>https:
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="spatial-referencing-3d"><name>Spatial Referencing 3D</name>
|
|
||||||
<t>XR Fragments assume the following objectname-to-URIFragment mapping:</t>
|
|
||||||
|
|
||||||
<artwork><![CDATA[
|
|
||||||
my.io/scene.fbx
|
|
||||||
+─────────────────────────────+
|
|
||||||
│ sky │ src: http://my.io/scene.fbx#sky (includes building,mainobject,floor)
|
|
||||||
│ +─────────────────────────+ │
|
|
||||||
│ │ building │ │ src: http://my.io/scene.fbx#building (includes mainobject,floor)
|
|
||||||
│ │ +─────────────────────+ │ │
|
|
||||||
│ │ │ mainobject │ │ │ src: http://my.io/scene.fbx#mainobject (includes floor)
|
|
||||||
│ │ │ +─────────────────+ │ │ │
|
|
||||||
│ │ │ │ floor │ │ │ │ src: http://my.io/scene.fbx#floor (just floor object)
|
|
||||||
│ │ │ │ │ │ │ │
|
|
||||||
│ │ │ +─────────────────+ │ │ │
|
|
||||||
│ │ +─────────────────────+ │ │
|
|
||||||
│ +─────────────────────────+ │
|
|
||||||
+─────────────────────────────+
|
|
||||||
|
|
||||||
]]>
|
|
||||||
</artwork>
|
|
||||||
<blockquote><t>Every 3D fileformat supports named 3D object, and this name allows URLs (fragments) to reference them (and their children objects).</t>
|
|
||||||
</blockquote><t>Clever nested design of 3D scenes allow great ways for re-using content, and/or previewing scenes.<br />
|
|
||||||
|
|
||||||
For example, to render a portal with a preview-version of the scene, create an 3D object with:</t>
|
|
||||||
|
|
||||||
<ul spacing="compact">
|
|
||||||
<li>href: <tt>https://scene.fbx</tt></li>
|
|
||||||
<li>src: <tt>https://otherworld.gltf#mainobject</tt></li>
|
|
||||||
</ul>
|
|
||||||
<blockquote><t>It also allows <strong>sourceportation</strong>, which basically means the enduser can teleport to the original XR Document of an <tt>src</tt> embedded object, and see a visible connection to the particular embedded object. Basically an embedded link becoming an outbound link by activating it.</t>
|
|
||||||
</blockquote></section>
|
|
||||||
|
|
||||||
<section anchor="navigating-3d"><name>Navigating 3D</name>
|
<section anchor="navigating-3d"><name>Navigating 3D</name>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -603,7 +611,7 @@ For example, to render a portal with a preview-version of the scene, create an 3
|
||||||
<li>the Y-coordinate of <tt>pos</tt> identifies the floorposition. This means that desktop-projections usually need to add 1.5m (average person height) on top (which is done automatically by VR/AR headsets).</li>
|
<li>the Y-coordinate of <tt>pos</tt> identifies the floorposition. This means that desktop-projections usually need to add 1.5m (average person height) on top (which is done automatically by VR/AR headsets).</li>
|
||||||
<li>set the position of the camera accordingly to the vector3 values of <tt>#pos</tt></li>
|
<li>set the position of the camera accordingly to the vector3 values of <tt>#pos</tt></li>
|
||||||
<li><tt>rot</tt> sets the rotation of the camera (only for non-VR/AR headsets)</li>
|
<li><tt>rot</tt> sets the rotation of the camera (only for non-VR/AR headsets)</li>
|
||||||
<li><tt>t</tt> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
|
<li>mediafragment <tt>t</tt> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
|
||||||
<li>after scene load: in case an <tt>href</tt> does not mention any <tt>pos</tt>-coordinate, <tt>pos=0,0,0</tt> will be assumed</li>
|
<li>after scene load: in case an <tt>href</tt> does not mention any <tt>pos</tt>-coordinate, <tt>pos=0,0,0</tt> will be assumed</li>
|
||||||
</ol>
|
</ol>
|
||||||
<t>Here's an ascii representation of a 3D scene-graph which contains 3D objects <tt>◻</tt> and their metadata:</t>
|
<t>Here's an ascii representation of a 3D scene-graph which contains 3D objects <tt>◻</tt> and their metadata:</t>
|
||||||
|
@ -755,19 +763,19 @@ Resizing will be happen accordingly to its placeholder object <tt>aquariumcube</
|
||||||
</li>
|
</li>
|
||||||
<li><t>relocation/reorientation should happen locally for local URI's (<tt>#pos=....</tt>)</t>
|
<li><t>relocation/reorientation should happen locally for local URI's (<tt>#pos=....</tt>)</t>
|
||||||
</li>
|
</li>
|
||||||
<li><t>navigation should not happen ''immediately'' when user is more than 2 meter away from the portal/object containing the href (to prevent accidental navigation e.g.)</t>
|
<li><t>navigation should not happen ''immediately'' when user is more than 5 meter away from the portal/object containing the href (to prevent accidental navigation e.g.)</t>
|
||||||
</li>
|
</li>
|
||||||
<li><t>URL navigation should always be reflected in the client (in case of javascript: see [<eref target="https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/js/three/navigator.js">here</eref> for an example navigator).</t>
|
<li><t>URL navigation should always be reflected in the client URL-bar (in case of javascript: see [<eref target="https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/js/three/navigator.js">here</eref> for an example navigator), and only update the URL-bar after the scene (default fragment <tt>#</tt>) has been loaded.</t>
|
||||||
</li>
|
</li>
|
||||||
<li><t>In XR mode, the navigator back/forward-buttons should be always visible (using a wearable e.g., see [<eref target="https://github.com/coderofsalvation/xrfragment/blob/dev/example/aframe/sandbox/index.html#L26-L29">here</eref> for an example wearable)</t>
|
<li><t>In immersive XR mode, the navigator back/forward-buttons should be always visible (using a wearable e.g., see [<eref target="https://github.com/coderofsalvation/xrfragment/blob/dev/example/aframe/sandbox/index.html#L26-L29">here</eref> for an example wearable)</t>
|
||||||
</li>
|
</li>
|
||||||
<li><t>in case of navigating to a new [[pos)ition, ''first'' navigate to the ''current position'' so that the ''back-button'' of the ''browser-history'' always refers to the previous position (see [<eref target="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js#L97">here</eref>)</t>
|
<li><t>make sure that the ''back-button'' of the ''browser-history'' always refers to the previous position (see [<eref target="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js#L97">here</eref>)</t>
|
||||||
</li>
|
</li>
|
||||||
<li><t>ignore previous rule in special cases, like clicking an <tt>href</tt> using camera-portal collision (the back-button would cause a teleport-loop)</t>
|
<li><t>ignore previous rule in special cases, like clicking an <tt>href</tt> using camera-portal collision (the back-button could cause a teleport-loop if the previous position is too close)</t>
|
||||||
</li>
|
</li>
|
||||||
<li><t>href-events should bubble upward the node-tree</t>
|
<li><t>href-events should bubble upward the node-tree (from children to ancestors, so that ancestors can also contain an href), however only 1 href can be executed at the same time.</t>
|
||||||
</li>
|
</li>
|
||||||
<li><t>the end-user navigator back/forward buttons should repeat a back/forward action until a <tt>pos=...</tt> primitive is found (the inbetween interaction URI's are only for UX research purposes)</t>
|
<li><t>the end-user navigator back/forward buttons should repeat a back/forward action until a <tt>pos=...</tt> primitive is found (the stateless xrf:// href-values should not be pushed to the url-history)</t>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<t><eref target="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js">» example implementation</eref><br />
|
<t><eref target="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js">» example implementation</eref><br />
|
||||||
|
@ -984,27 +992,20 @@ Each matched object (not their children) will be toggled (in)visible when select
|
||||||
<blockquote><t>The XR Fragments does this by collapsing space into a <strong>Word Graph</strong> (the <strong>XRWG</strong> <eref target="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</eref>), augmented by Bib(s)Tex.</t>
|
<blockquote><t>The XR Fragments does this by collapsing space into a <strong>Word Graph</strong> (the <strong>XRWG</strong> <eref target="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</eref>), augmented by Bib(s)Tex.</t>
|
||||||
</blockquote><t>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br />
|
</blockquote><t>Instead of just throwing together all kinds media types into one experience (games), what about their tagged/semantical relationships?<br />
|
||||||
|
|
||||||
Perhaps the following question is related: why is HTML adopted less in games outside the browser?
|
Perhaps the following question is related: why is HTML adopted less in games outside the browser?</t>
|
||||||
Through the lens of constructive lazy game-developers, ideally metadata must come <strong>with</strong> text, but not <strong>obfuscate</strong> the text, or <strong>spawning another request</strong> to fetch it.<br />
|
<t>Hence:</t>
|
||||||
|
|
||||||
XR Fragments does this by detecting Bib(s)Tex, without introducing a new language or fileformat<br />
|
|
||||||
</t>
|
|
||||||
<blockquote><t>Why Bib(s)Tex? Because its seems to be the lowest common denominator for an human-curated XRWG (extendable by speech/scanner/writing/typing e.g, see <eref target="https://github.com/coderofsalvation/hashtagbibs#bibs--bibtex-combo-lowest-common-denominator-for-linking-data">further motivation here</eref>)</t>
|
|
||||||
</blockquote><t>Hence:</t>
|
|
||||||
|
|
||||||
<ol spacing="compact">
|
<ol spacing="compact">
|
||||||
<li>XR Fragments promotes (de)serializing a scene to the XRWG (<eref target="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</eref>)</li>
|
<li>XR Fragments promotes (de)serializing a scene to a (lowercase) XRWG (<eref target="https://github.com/coderofsalvation/xrfragment/blob/feat/macros/src/3rd/js/XRWG.js">example</eref>)</li>
|
||||||
<li>XR Fragments primes the XRWG, by collecting words from the <tt>tag</tt> and name-property of 3D objects.</li>
|
<li>XR Fragments primes the XRWG, by collecting words from the <tt>tag</tt> and name-property of 3D objects.</li>
|
||||||
<li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype & Data URI)</li>
|
<li>XR Fragments primes the XRWG, by collecting words from <strong>optional</strong> metadata <strong>at the end of content</strong> of text (see default mimetype & Data URI)</li>
|
||||||
<li><eref target="https://github.com/coderofsalvation/hashtagbibs">Bib's</eref> and BibTex are first tag citizens for priming the XRWG with words (from XR text)</li>
|
|
||||||
<li>Like Bibs, XR Fragments generalizes the BibTex author/title-semantics (<tt>author{title}</tt>) into <strong>this</strong> points to <strong>that</strong> (<tt>this{that}</tt>)</li>
|
|
||||||
<li>The XRWG should be recalculated when textvalues (in <tt>src</tt>) change</li>
|
<li>The XRWG should be recalculated when textvalues (in <tt>src</tt>) change</li>
|
||||||
<li>HTML/RDF/JSON is still great, but is beyond the XRWG-scope (they fit better in the application-layer)</li>
|
<li>HTML/RDF/JSON is still great, but is beyond the XRWG-scope (they fit better in the application-layer, or as embedded src content)</li>
|
||||||
<li>Applications don't have to be able to access the XRWG programmatically, as they can easily generate one themselves by traversing the scene-nodes.</li>
|
<li>Applications don't have to be able to access the XRWG programmatically, as they can easily generate one themselves by traversing the scene-nodes.</li>
|
||||||
<li>The XR Fragment focuses on fast and easy-to-generate end-user controllable word graphs (instead of complex implementations that try to defeat word ambiguity)</li>
|
<li>The XR Fragment focuses on fast and easy-to-generate end-user controllable word graphs (instead of complex implementations that try to defeat word ambiguity)</li>
|
||||||
<li>Tags are the scope for now (supporting <eref target="https://github.com/WICG/scroll-to-text-fragment">https://github.com/WICG/scroll-to-text-fragment</eref> will be considered)</li>
|
<li>Tags are the scope for now (supporting <eref target="https://github.com/WICG/scroll-to-text-fragment">https://github.com/WICG/scroll-to-text-fragment</eref> will be considered)</li>
|
||||||
</ol>
|
</ol>
|
||||||
<t>Example:</t>
|
<t>Example of generating BiBTex out of the XRWG and textdata with hashtags:</t>
|
||||||
|
|
||||||
<artwork><![CDATA[ http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
<artwork><![CDATA[ http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
||||||
----------------------------------------------------------------------------+--------------------------------------
|
----------------------------------------------------------------------------+--------------------------------------
|
||||||
|
@ -1014,7 +1015,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
|
||||||
| | | / \ | | @baroque{castle,
|
| | | / \ | | @baroque{castle,
|
||||||
| John built houses in baroque style. | | / \ | | url = {https://y.io/z.fbx#castle}
|
| John built houses in baroque style. | | / \ | | url = {https://y.io/z.fbx#castle}
|
||||||
| | | |_____| | | }
|
| | | |_____| | | }
|
||||||
| #john@baroque | +-----│-----+ | @baroque{john}
|
| | +-----│-----+ | @baroque{john}
|
||||||
| | │ |
|
| | │ |
|
||||||
| | ├─ name: castle |
|
| | ├─ name: castle |
|
||||||
| | └─ tag: house baroque |
|
| | └─ tag: house baroque |
|
||||||
|
@ -1027,7 +1028,7 @@ XR Fragments does this by detecting Bib(s)Tex, without introducing a new languag
|
||||||
]]>
|
]]>
|
||||||
</artwork>
|
</artwork>
|
||||||
<blockquote><t>the <tt>#john@baroque</tt>-bib associates both text <tt>John</tt> and objectname <tt>john</tt>, with tag <tt>baroque</tt></t>
|
<blockquote><t>the <tt>#john@baroque</tt>-bib associates both text <tt>John</tt> and objectname <tt>john</tt>, with tag <tt>baroque</tt></t>
|
||||||
</blockquote><t>Another example:</t>
|
</blockquote><t>Another example of deriving a graphdata from the XRWG:</t>
|
||||||
|
|
||||||
<artwork><![CDATA[ http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
<artwork><![CDATA[ http://y.io/z.fbx | Derived XRWG (expressed as BibTex)
|
||||||
----------------------------------------------------------------------------+--------------------------------------
|
----------------------------------------------------------------------------+--------------------------------------
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
|
|
||||||
Internet Engineering Task Force L.R. van Kammen
|
Internet Engineering Task Force L.R. van Kammen
|
||||||
Internet-Draft 16 February 2024
|
Internet-Draft 25 April 2024
|
||||||
Intended status: Informational
|
Intended status: Informational
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ Status of This Memo
|
||||||
time. It is inappropriate to use Internet-Drafts as reference
|
time. It is inappropriate to use Internet-Drafts as reference
|
||||||
material or to cite them other than as "work in progress."
|
material or to cite them other than as "work in progress."
|
||||||
|
|
||||||
This Internet-Draft will expire on 19 August 2024.
|
This Internet-Draft will expire on 27 October 2024.
|
||||||
|
|
||||||
Copyright Notice
|
Copyright Notice
|
||||||
|
|
||||||
|
@ -53,9 +53,9 @@ Copyright Notice
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 19 August 2024 [Page 1]
|
van Kammen Expires 27 October 2024 [Page 1]
|
||||||
|
|
||||||
Internet-Draft XR Macros February 2024
|
Internet-Draft XR Macros April 2024
|
||||||
|
|
||||||
|
|
||||||
extracted from this document must include Revised BSD License text as
|
extracted from this document must include Revised BSD License text as
|
||||||
|
@ -109,13 +109,13 @@ Table of Contents
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 19 August 2024 [Page 2]
|
van Kammen Expires 27 October 2024 [Page 2]
|
||||||
|
|
||||||
Internet-Draft XR Macros February 2024
|
Internet-Draft XR Macros April 2024
|
||||||
|
|
||||||
|
|
||||||
3. Metadata-values can contain the | symbol to 🎲 roundrobin
|
3. Metadata-values can contain the | symbol to 🎲 roundrobin variable
|
||||||
variable values (!toggleme: fog=0,10|fog=0,1000 e.g.)
|
values (!toggleme: fog=0,10|fog=0,1000 e.g.)
|
||||||
4. XR Macros acts as simple eventhandlers for URI Fragments: they
|
4. XR Macros acts as simple eventhandlers for URI Fragments: they
|
||||||
are automatically published on the (XR Fragments
|
are automatically published on the (XR Fragments
|
||||||
(https://xrfragment.org)) hashbus, to act as events (so more
|
(https://xrfragment.org)) hashbus, to act as events (so more
|
||||||
|
@ -165,9 +165,9 @@ Internet-Draft XR Macros February 2024
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 19 August 2024 [Page 3]
|
van Kammen Expires 27 October 2024 [Page 3]
|
||||||
|
|
||||||
Internet-Draft XR Macros February 2024
|
Internet-Draft XR Macros April 2024
|
||||||
|
|
||||||
|
|
||||||
+=========+======+===================+=================+=============+
|
+=========+======+===================+=================+=============+
|
||||||
|
@ -221,9 +221,9 @@ Internet-Draft XR Macros February 2024
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 19 August 2024 [Page 4]
|
van Kammen Expires 27 October 2024 [Page 4]
|
||||||
|
|
||||||
Internet-Draft XR Macros February 2024
|
Internet-Draft XR Macros April 2024
|
||||||
|
|
||||||
|
|
||||||
Table 3
|
Table 3
|
||||||
|
@ -277,9 +277,9 @@ Internet-Draft XR Macros February 2024
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 19 August 2024 [Page 5]
|
van Kammen Expires 27 October 2024 [Page 5]
|
||||||
|
|
||||||
Internet-Draft XR Macros February 2024
|
Internet-Draft XR Macros April 2024
|
||||||
|
|
||||||
|
|
||||||
4.5. Usecase: present context menu with options
|
4.5. Usecase: present context menu with options
|
||||||
|
@ -333,9 +333,9 @@ click object with (`!clickme`:`!foo|!bar|!flop` e.g.)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 19 August 2024 [Page 6]
|
van Kammen Expires 27 October 2024 [Page 6]
|
||||||
|
|
||||||
Internet-Draft XR Macros February 2024
|
Internet-Draft XR Macros April 2024
|
||||||
|
|
||||||
|
|
||||||
| Note that only macro's can trigger roundrobin values or
|
| Note that only macro's can trigger roundrobin values or
|
||||||
|
@ -375,7 +375,7 @@ Internet-Draft XR Macros February 2024
|
||||||
| | (games,VR,AR e.g.), should be as high as |
|
| | (games,VR,AR e.g.), should be as high as |
|
||||||
| | possible |
|
| | possible |
|
||||||
+---------------+---------------------------------------------------+
|
+---------------+---------------------------------------------------+
|
||||||
| ◻ | ascii representation of an 3D object/mesh |
|
| ◻ | ascii representation of an 3D object/mesh |
|
||||||
+---------------+---------------------------------------------------+
|
+---------------+---------------------------------------------------+
|
||||||
| (un)obtrusive | obtrusive: wrapping human text/thought in |
|
| (un)obtrusive | obtrusive: wrapping human text/thought in |
|
||||||
| | XML/HTML/JSON obfuscates human text into |
|
| | XML/HTML/JSON obfuscates human text into |
|
||||||
|
@ -389,4 +389,4 @@ Internet-Draft XR Macros February 2024
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
van Kammen Expires 19 August 2024 [Page 7]
|
van Kammen Expires 27 October 2024 [Page 7]
|
||||||
|
|
|
@ -282,16 +282,17 @@ Macros also act as events, so more serious scripting languages can react to them
|
||||||
<section anchor="event-bubble-flow"><name>Event Bubble-flow</name>
|
<section anchor="event-bubble-flow"><name>Event Bubble-flow</name>
|
||||||
<t>click object with (<tt>!clickme</tt>:<tt>AR</tt> or <tt>!clickme</tt>: <tt>!reset</tt> e.g.)</t>
|
<t>click object with (<tt>!clickme</tt>:<tt>AR</tt> or <tt>!clickme</tt>: <tt>!reset</tt> e.g.)</t>
|
||||||
|
|
||||||
<artwork> ◻
|
<artwork><![CDATA[ ◻
|
||||||
│
|
│
|
||||||
└── does current object contain this property-key (`AR` or `!reset` e.g.)?
|
└── does current object contain this property-key (`AR` or `!reset` e.g.)?
|
||||||
└── no: is there any (root)object containing property `AR`
|
└── no: is there any (root)object containing property `AR`
|
||||||
└── yes: evaluate its (roundrobin) XR macro-value(s) (and exit)
|
└── yes: evaluate its (roundrobin) XR macro-value(s) (and exit)
|
||||||
└── no: trigger URL: #AR
|
└── no: trigger URL: #AR
|
||||||
|
]]>
|
||||||
</artwork>
|
</artwork>
|
||||||
<t>click object with (<tt>!clickme</tt>:<tt>#AR|#VR</tt> e.g.)</t>
|
<t>click object with (<tt>!clickme</tt>:<tt>#AR|#VR</tt> e.g.)</t>
|
||||||
|
|
||||||
<artwork> ◻
|
<artwork><![CDATA[ ◻
|
||||||
│
|
│
|
||||||
└── apply the roundrobin (rotate the options, value `#AR` becomes `#VR` upon next click)
|
└── apply the roundrobin (rotate the options, value `#AR` becomes `#VR` upon next click)
|
||||||
└── is there any object with property-key (`#AR` e.g.)?
|
└── is there any object with property-key (`#AR` e.g.)?
|
||||||
|
@ -299,6 +300,7 @@ Macros also act as events, so more serious scripting languages can react to them
|
||||||
└── yes: apply its value to the scene, and update the URL to `#AR`
|
└── yes: apply its value to the scene, and update the URL to `#AR`
|
||||||
|
|
||||||
click object with (`!clickme`:`!foo|!bar|!flop` e.g.)
|
click object with (`!clickme`:`!foo|!bar|!flop` e.g.)
|
||||||
|
]]>
|
||||||
</artwork>
|
</artwork>
|
||||||
<t>◻
|
<t>◻
|
||||||
│<br />
|
│<br />
|
||||||
|
|
Loading…
Reference in New Issue