main: update documentation

This commit is contained in:
Leon van Kammen 2024-10-07 19:03:02 +00:00
parent 676b8d1fd2
commit a54ff56a8d
5 changed files with 262 additions and 189 deletions

View File

@ -208,8 +208,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
<tr> <tr>
<td><code>#pos</code></td> <td><code>#pos</code></td>
<td>vector3</td> <td>vector3</td>
<td><code>#pos=0.5,0,0</code> <code>#pos=room</code> <code>pos=cam2</code></td> <td><code>#pos=0.5,0,0</code> <code>#pos=room</code> <code>#pos=cam2</code></td>
<td>positions camera (or XR floor) to xyz-coord/object/camera</td> <td>positions/parents camera(rig) (or XR floor) to xyz-coord/object/camera</td>
</tr> </tr>
<tr> <tr>
@ -745,8 +745,14 @@ For example, to render a portal with a preview-version of the scene, create an 3
<tbody> <tbody>
<tr> <tr>
<td><b>#pos</b>=0,0,0</td> <td><b>#pos</b>=0,0,0</td>
<td>vector3 or string</td> <td>vector3</td>
<td>(re)position camera based on coordinates directly, or indirectly using objectname (its worldposition)</td> <td>position camera to 0,0,0 (+userheight in VR)</td>
</tr>
<tr>
<td><b>#pos</b>=room</td>
<td>string</td>
<td>position camera to position of objectname <code>room</code> (+userheight in VR)</td>
</tr> </tr>
<tr> <tr>
@ -759,15 +765,18 @@ For example, to render a portal with a preview-version of the scene, create an 3
<p><a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/pos.js">» example implementation</a><br> <p><a href="https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/pos.js">» example implementation</a><br>
<a href="https://github.com/coderofsalvation/xrfragment/issues/5">» discussion</a><br></p> <a href="https://github.com/coderofsalvation/xrfragment/issues/5">» discussion</a><br></p>
<p>Here&rsquo;s the basic <strong>level1</strong> flow (with optional level2 features):</p>
<ol> <ol>
<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), except in case of camera-switching.</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>if the referenced <code>#pos</code> object is animated, parent the current camera to that object (so it animates too)</li>
<li>mediafragment <code>t</code> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li> <li><code>rot</code> sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)</li>
<li><strong>level2</strong>: mediafragment <code>t</code> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
<li>before scene load: the scene is cleared</li> <li>before scene load: the scene is cleared</li>
<li>after scene load: in case the scene (rootnode) contains an <code>#</code> default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change)</li> <li><strong>level2</strong>: after scene load: in case the scene (rootnode) contains an <code>#</code> default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change)</li>
<li>after scene load: in case the scene (rootnode) contains an <code>#</code> default view with a fragment value: execute positional fragment via the hashbus + update top-level URL</li> <li><strong>level2</strong>: after scene load: in case the scene (rootnode) contains an <code>#</code> default view with a fragment value: execute positional fragment via the hashbus + update top-level URL</li>
<li>in case of no default <code>#</code> view on the scene (rootnode), default player(rig) position <code>0,0,0</code> is assumed.</li> <li><strong>level2</strong>: in case of no default <code>#</code> view on the scene (rootnode), default player(rig) position <code>0,0,0</code> is assumed.</li>
<li>in case a <code>href</code> does not mention any <code>pos</code>-coordinate, the current position will be assumed</li> <li>in case a <code>href</code> does not mention any <code>pos</code>-coordinate, the current position will be assumed</li>
</ol> </ol>

View File

@ -201,7 +201,7 @@ XR Fragments utilizes URLs:
| fragment | type | example | info | | fragment | type | example | info |
|-------------------|------------|--------------------|----------------------------------------------------------------------| |-------------------|------------|--------------------|----------------------------------------------------------------------|
| `#pos` | vector3 | `#pos=0.5,0,0` `#pos=room` `pos=cam2` | positions camera (or XR floor) to xyz-coord/object/camera | | `#pos` | vector3 | `#pos=0.5,0,0` `#pos=room` `#pos=cam2` | positions/parents camera(rig) (or XR floor) to xyz-coord/object/camera |
| `#rot` | vector3 | `#rot=0,90,0` | rotates camera to xyz-coord 0.5,0,0 | | `#rot` | vector3 | `#rot=0,90,0` | rotates camera to xyz-coord 0.5,0,0 |
| [Media Fragments](https://www.w3.org/TR/media-frags/) | [media fragment](#media%20fragments%20and%20datatypes) | `#t=0,2&loop` | play (and loop) 3D animation from 0 seconds till 2 seconds| | [Media Fragments](https://www.w3.org/TR/media-frags/) | [media fragment](#media%20fragments%20and%20datatypes) | `#t=0,2&loop` | play (and loop) 3D animation from 0 seconds till 2 seconds|
@ -430,7 +430,6 @@ Example URI's:
|----------|--------|------------------------------| |----------|--------|------------------------------|
| <b>#pos</b>=0,0,0 | vector3 |position camera to 0,0,0 (+userheight in VR) | | <b>#pos</b>=0,0,0 | vector3 |position camera to 0,0,0 (+userheight in VR) |
| <b>#pos</b>=room | string | position camera to position of objectname `room` (+userheight in VR) | | <b>#pos</b>=room | string | position camera to position of objectname `room` (+userheight in VR) |
| <b>#pos</b>=cam02 | string | set camera with name `cam02` as active cam (follow animation e.g.) |
| <b>#rot</b>=0,90,0 | vector3 | rotate camera | | <b>#rot</b>=0,90,0 | vector3 | rotate camera |
[» example implementation](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/pos.js)<br> [» example implementation](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/pos.js)<br>
@ -440,13 +439,14 @@ Here's the basic **level1** flow (with optional level2 features):
1. the Y-coordinate of `pos` 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), except in case of camera-switching. 1. the Y-coordinate of `pos` 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), except in case of camera-switching.
2. set the position of the camera accordingly to the vector3 values of `#pos` 2. set the position of the camera accordingly to the vector3 values of `#pos`
3. `rot` sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this) 3. if the referenced `#pos` object is animated, parent the current camera to that object (so it animates too)
4. **level2**: mediafragment `t` in the top-URL sets the playbackspeed and animation-range of the global scene animation 4. `rot` sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)
5. before scene load: the scene is cleared 5. **level2**: mediafragment `t` in the top-URL sets the playbackspeed and animation-range of the global scene animation
6. **level2**: after scene load: in case the scene (rootnode) contains an `#` default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change) 6. before scene load: the scene is cleared
7. **level2**: after scene load: in case the scene (rootnode) contains an `#` default view with a fragment value: execute positional fragment via the hashbus + update top-level URL 7. **level2**: after scene load: in case the scene (rootnode) contains an `#` default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change)
8. **level2**: in case of no default `#` view on the scene (rootnode), default player(rig) position `0,0,0` is assumed. 8. **level2**: after scene load: in case the scene (rootnode) contains an `#` default view with a fragment value: execute positional fragment via the hashbus + update top-level URL
9. in case a `href` does not mention any `pos`-coordinate, the current position will be assumed 9. **level2**: in case of no default `#` view on the scene (rootnode), default player(rig) position `0,0,0` is assumed.
10. in case a `href` does not mention any `pos`-coordinate, the current position will be assumed
Here's an ascii representation of a 3D scene-graph which contains 3D objects `◻` and their metadata: Here's an ascii representation of a 3D scene-graph which contains 3D objects `◻` and their metadata:

View File

@ -95,13 +95,13 @@ Table of Contents
8.2. media fragments and datatypes . . . . . . . . . . . . . . 13 8.2. media fragments and datatypes . . . . . . . . . . . . . . 13
9. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 16 9. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 16
10. Top-level URL processing . . . . . . . . . . . . . . . . . . 17 10. Top-level URL processing . . . . . . . . . . . . . . . . . . 17
11. Embedding XR content using src . . . . . . . . . . . . . . . 17 11. Embedding XR content using src . . . . . . . . . . . . . . . 18
12. Navigating content href portals . . . . . . . . . . . . . . . 20 12. Navigating content href portals . . . . . . . . . . . . . . . 20
12.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 21 12.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 21
12.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 21 12.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 22
12.3. Scaling instanced content . . . . . . . . . . . . . . . 22 12.3. Scaling instanced content . . . . . . . . . . . . . . . 22
13. XR Fragment: pos . . . . . . . . . . . . . . . . . . . . . . 22 13. XR Fragment: pos . . . . . . . . . . . . . . . . . . . . . . 22
14. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 22 14. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 23
15. XR Fragment: t . . . . . . . . . . . . . . . . . . . . . . . 23 15. XR Fragment: t . . . . . . . . . . . . . . . . . . . . . . . 23
16. XR audio/video integration . . . . . . . . . . . . . . . . . 23 16. XR audio/video integration . . . . . . . . . . . . . . . . . 23
17. XR Fragment filters . . . . . . . . . . . . . . . . . . . . . 23 17. XR Fragment filters . . . . . . . . . . . . . . . . . . . . . 23
@ -115,26 +115,26 @@ Internet-Draft XR Fragments October 2024
17.2. Filter Parser . . . . . . . . . . . . . . . . . . . . . 25 17.2. Filter Parser . . . . . . . . . . . . . . . . . . . . . 25
18. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 25 18. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 26
19. Text in XR (tagging,linking to spatial objects) . . . . . . . 26 19. Text in XR (tagging,linking to spatial objects) . . . . . . . 26
19.1. Default Data URI mimetype . . . . . . . . . . . . . . . 28 19.1. Default Data URI mimetype . . . . . . . . . . . . . . . 29
19.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 29 19.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 30
20. Importing/exporting . . . . . . . . . . . . . . . . . . . . . 30 20. Importing/exporting . . . . . . . . . . . . . . . . . . . . . 31
21. Reflection Mapping . . . . . . . . . . . . . . . . . . . . . 30 21. Reflection Mapping . . . . . . . . . . . . . . . . . . . . . 31
22. Transclusion (broken link) resolution . . . . . . . . . . . . 30 22. Transclusion (broken link) resolution . . . . . . . . . . . . 31
23. Topic-based index-less Webrings . . . . . . . . . . . . . . . 31 23. Topic-based index-less Webrings . . . . . . . . . . . . . . . 32
24. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 32 24. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 33
25. Additional scene metadata . . . . . . . . . . . . . . . . . . 32 25. Additional scene metadata . . . . . . . . . . . . . . . . . . 33
26. Accessibility interface . . . . . . . . . . . . . . . . . . . 33 26. Accessibility interface . . . . . . . . . . . . . . . . . . . 34
26.1. Two-button navigation . . . . . . . . . . . . . . . . . 34 26.1. Two-button navigation . . . . . . . . . . . . . . . . . 35
26.2. Overlap with fileformat-specific extensions . . . . . . 35 26.2. Overlap with fileformat-specific extensions . . . . . . 36
26.3. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . 35 26.3. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . 36
27. Security Considerations . . . . . . . . . . . . . . . . . . . 38 27. Security Considerations . . . . . . . . . . . . . . . . . . . 39
28. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 28. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
29. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 29. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
30. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 30. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40
31. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39 31. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 40
32. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 39 32. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 40
1. Introduction 1. Introduction
@ -287,10 +287,11 @@ Internet-Draft XR Fragments October 2024
+=======================+======================================+============+=============+ +=======================+======================================+============+=============+
|fragment |type |example |info | |fragment |type |example |info |
+=======================+======================================+============+=============+ +=======================+======================================+============+=============+
|#pos |vector3 |#pos=0.5,0,0|positions | |#pos |vector3 |#pos=0.5,0,0|positions/ |
| | |#pos=room |camera (or XR| | | |#pos=room |parents |
| | |pos=cam2 |floor) to | | | |#pos=cam2 |camera(rig) |
| | | |xyz- | | | | |(or XR floor)|
| | | |to xyz- |
| | | |coord/object/| | | | |coord/object/|
| | | |camera | | | | |camera |
+-----------------------+--------------------------------------+------------+-------------+ +-----------------------+--------------------------------------+------------+-------------+
@ -331,7 +332,6 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 6] van Kammen Expires 10 April 2025 [Page 6]
@ -844,18 +844,20 @@ Internet-Draft XR Fragments October 2024
9. Navigating 3D 9. Navigating 3D
+====================+=========+=============================+ +====================+=========+==========================+
| fragment | type | functionality | | fragment | type | functionality |
+====================+=========+=============================+ +====================+=========+==========================+
| <b>#pos</b>=0,0,0 | vector3 | (re)position camera based | | <b>#pos</b>=0,0,0 | vector3 | position camera to 0,0,0 |
| | or | on coordinates directly, or | | | | (+userheight in VR) |
| | string | indirectly using objectname | +--------------------+---------+--------------------------+
| | | (its worldposition) | | <b>#pos</b>=room | string | position camera to |
+--------------------+---------+-----------------------------+ | | | position of objectname |
| <b>#rot</b>=0,90,0 | vector3 | rotate camera | | | | room (+userheight in VR) |
+--------------------+---------+-----------------------------+ +--------------------+---------+--------------------------+
| <b>#rot</b>=0,90,0 | vector3 | rotate camera |
+--------------------+---------+--------------------------+
Table 7 Table 7
» example implementation » example implementation
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
@ -863,33 +865,31 @@ Internet-Draft XR Fragments October 2024
» discussion (https://github.com/coderofsalvation/xrfragment/ » discussion (https://github.com/coderofsalvation/xrfragment/
issues/5) issues/5)
1. the Y-coordinate of pos identifies the floorposition. This means Here's the basic *level1* flow (with optional level2 features):
that desktop-projections usually need to add 1.5m (average person
height) on top (which is done automatically by VR/AR headsets).
2. set the position of the camera accordingly to the vector3 values
of #pos
3. rot sets the rotation of the camera (only for non-VR/AR headsets)
4. mediafragment t in the top-URL sets the playbackspeed and
animation-range of the global scene animation
5. before scene load: the scene is cleared
6. after scene load: in case the scene (rootnode) contains an #
default view with a fragment value: execute non-positional
fragments via the hashbus (no top-level URL change)
7. after scene load: in case the scene (rootnode) contains an #
default view with a fragment value: execute positional fragment
via the hashbus + update top-level URL
8. in case of no default # view on the scene (rootnode), default
player(rig) position 0,0,0 is assumed.
9. in case a href does not mention any pos-coordinate, the current
position will be assumed
Here's an ascii representation of a 3D scene-graph which contains 3D
objects ◻ and their metadata:
1. the Y-coordinate of pos 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), except in case of camera-switching.
2. set the position of the camera accordingly to the vector3 values
of #pos
3. if the referenced #pos object is animated, parent the current
camera to that object (so it animates too)
4. rot sets the rotation of the camera (only for non-VR/AR
headsets, however a camera-value overrules this)
5. *level2*: mediafragment t in the top-URL sets the playbackspeed
and animation-range of the global scene animation
6. before scene load: the scene is cleared
7. *level2*: after scene load: in case the scene (rootnode)
contains an # default view with a fragment value: execute non-
positional fragments via the hashbus (no top-level URL change)
8. *level2*: after scene load: in case the scene (rootnode)
contains an # default view with a fragment value: execute
positional fragment via the hashbus + update top-level URL
9. *level2*: in case of no default # view on the scene (rootnode),
default player(rig) position 0,0,0 is assumed.
10. in case a href does not mention any pos-coordinate, the current
position will be assumed
@ -898,6 +898,9 @@ van Kammen Expires 10 April 2025 [Page 16]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
Here's an ascii representation of a 3D scene-graph which contains 3D
objects ◻ and their metadata:
+────────────────────────────────────────────────────────+ +────────────────────────────────────────────────────────+
│ │ │ │
│ index.gltf │ │ index.gltf │
@ -939,13 +942,10 @@ Internet-Draft XR Fragments October 2024
5. IF a #cube matches anything else in the XR Word Graph (XRWG) draw 5. IF a #cube matches anything else in the XR Word Graph (XRWG) draw
wires to them (text or related objects). wires to them (text or related objects).
11. Embedding XR content using src
src is the 3D version of the <a target="_blank"
href="https://www.w3.org/html/wiki/Elements/iframe">iframe</a>.
It instances content (in objects) in the current scene/asset, and
follows similar logic like the previous chapter, except that it does
not modify the camera.
@ -954,6 +954,14 @@ van Kammen Expires 10 April 2025 [Page 17]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
11. Embedding XR content using src
src is the 3D version of the <a target="_blank"
href="https://www.w3.org/html/wiki/Elements/iframe">iframe</a>.
It instances content (in objects) in the current scene/asset, and
follows similar logic like the previous chapter, except that it does
not modify the camera.
+========+========+===================================================+ +========+========+===================================================+
|fragment|type |example value | |fragment|type |example value |
+========+========+===================================================+ +========+========+===================================================+
@ -992,14 +1000,6 @@ Internet-Draft XR Fragments October 2024
│ │ │ │
+────────────────────────────────────────────────────────+ +────────────────────────────────────────────────────────+
An XR Fragment-compatible browser viewing this scene, lazy-loads and
projects painting.png onto the (plane) object called canvas (which is
copy-instanced in the bed and livingroom).
Also, after lazy-loading ocean.com/aquarium.gltf, only the queried
objects fishbowl (and bass and tuna) will be instanced inside
aquariumcube.
Resizing will be happen accordingly to its placeholder object
aquariumcube, see chapter Scaling.
@ -1010,6 +1010,15 @@ van Kammen Expires 10 April 2025 [Page 18]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
An XR Fragment-compatible browser viewing this scene, lazy-loads and
projects painting.png onto the (plane) object called canvas (which is
copy-instanced in the bed and livingroom).
Also, after lazy-loading ocean.com/aquarium.gltf, only the queried
objects fishbowl (and bass and tuna) will be instanced inside
aquariumcube.
Resizing will be happen accordingly to its placeholder object
aquariumcube, see chapter Scaling.
| Instead of cherrypicking a rootobject #fishbowl with src, | Instead of cherrypicking a rootobject #fishbowl with src,
| additional filters can be used to include/exclude certain objects. | additional filters can be used to include/exclude certain objects.
| See next chapter on filtering below. | See next chapter on filtering below.
@ -1049,6 +1058,14 @@ Internet-Draft XR Fragments October 2024
object belongs. object belongs.
12. when only one object was cherrypicked (#cube e.g.), set its 12. when only one object was cherrypicked (#cube e.g.), set its
position to 0,0,0 position to 0,0,0
van Kammen Expires 10 April 2025 [Page 19]
Internet-Draft XR Fragments October 2024
13. when the enduser clicks an href with #t=1,0,0 (play) will be 13. when the enduser clicks an href with #t=1,0,0 (play) will be
applied to all src mediacontent with a timeline (mp4/mp3 e.g.) applied to all src mediacontent with a timeline (mp4/mp3 e.g.)
14. a non-euclidian portal can be rendered for flat 3D objects 14. a non-euclidian portal can be rendered for flat 3D objects
@ -1058,14 +1075,6 @@ Internet-Draft XR Fragments October 2024
* model/gltf-binary * model/gltf-binary
* model/gltf+json * model/gltf+json
* image/png * image/png
van Kammen Expires 10 April 2025 [Page 19]
Internet-Draft XR Fragments October 2024
* image/jpg * image/jpg
* text/plain;charset=utf-8 * text/plain;charset=utf-8
@ -1103,6 +1112,16 @@ Internet-Draft XR Fragments October 2024
than 5 meter away from the portal/object containing the href (to than 5 meter away from the portal/object containing the href (to
prevent accidental navigation e.g.) prevent accidental navigation e.g.)
van Kammen Expires 10 April 2025 [Page 20]
Internet-Draft XR Fragments October 2024
4. URL navigation should always be reflected in the client URL-bar 4. URL navigation should always be reflected in the client URL-bar
(in case of javascript: see [here (in case of javascript: see [here
(https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/ (https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/
@ -1114,14 +1133,6 @@ Internet-Draft XR Fragments October 2024
(https://github.com/coderofsalvation/xrfragment/blob/dev/example/ (https://github.com/coderofsalvation/xrfragment/blob/dev/example/
aframe/sandbox/index.html#L26-L29) for an example wearable) aframe/sandbox/index.html#L26-L29) for an example wearable)
van Kammen Expires 10 April 2025 [Page 20]
Internet-Draft XR Fragments October 2024
6. make sure that the ''back-button'' of the ''browser-history'' 6. make sure that the ''back-button'' of the ''browser-history''
always refers to the previous position (see [here (https://github always refers to the previous position (see [here (https://github
.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/ .com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/
@ -1159,6 +1170,14 @@ Internet-Draft XR Fragments October 2024
| optionally the viewer can offer thumbstick, mouse or joystick | optionally the viewer can offer thumbstick, mouse or joystick
| teleport-tools for non-roomscale VR/AR setups. | teleport-tools for non-roomscale VR/AR setups.
van Kammen Expires 10 April 2025 [Page 21]
Internet-Draft XR Fragments October 2024
12.2. UX spec 12.2. UX spec
End-users should always have read/write access to: End-users should always have read/write access to:
@ -1169,15 +1188,6 @@ Internet-Draft XR Fragments October 2024
another scene/file (and coordinate e.g. in case the URL contains another scene/file (and coordinate e.g. in case the URL contains
XR Fragments). XR Fragments).
van Kammen Expires 10 April 2025 [Page 21]
Internet-Draft XR Fragments October 2024
12.3. Scaling instanced content 12.3. Scaling instanced content
Sometimes embedded properties (like src) instance new objects. Sometimes embedded properties (like src) instance new objects.
@ -1216,16 +1226,6 @@ Internet-Draft XR Fragments October 2024
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/pos.js])] three/xrf/pos.js])]
14. XR Fragment: rot
[[» example implementation|https://github.com/coderofsalvation/xrfrag
ment/blob/main/src/3rd/js/three/xrf/pos.js]
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/pos.js])]
@ -1234,6 +1234,13 @@ van Kammen Expires 10 April 2025 [Page 22]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
14. XR Fragment: rot
[[» example implementation|https://github.com/coderofsalvation/xrfrag
ment/blob/main/src/3rd/js/three/xrf/pos.js]
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/pos.js])]
15. XR Fragment: t 15. XR Fragment: t
[[» example implementation|https://github.com/coderofsalvation/xrfrag [[» example implementation|https://github.com/coderofsalvation/xrfrag
@ -1264,6 +1271,25 @@ Internet-Draft XR Fragments October 2024
Include, exclude, hide/shows objects using space-separated strings: Include, exclude, hide/shows objects using space-separated strings:
van Kammen Expires 10 April 2025 [Page 23]
Internet-Draft XR Fragments October 2024
+====================+===========================================+ +====================+===========================================+
| example | outcome | | example | outcome |
+====================+===========================================+ +====================+===========================================+
@ -1281,15 +1307,6 @@ Internet-Draft XR Fragments October 2024
Table 10 Table 10
van Kammen Expires 10 April 2025 [Page 23]
Internet-Draft XR Fragments October 2024
It's simple but powerful syntax which allows filtering the scene It's simple but powerful syntax which allows filtering the scene
using searchengine prompt-style feeling: using searchengine prompt-style feeling:
@ -1308,6 +1325,27 @@ Internet-Draft XR Fragments October 2024
object (not their children) will be toggled (in)visible when object (not their children) will be toggled (in)visible when
selecting. selecting.
van Kammen Expires 10 April 2025 [Page 24]
Internet-Draft XR Fragments October 2024
+==========+==============================================+ +==========+==============================================+
| operator | info | | operator | info |
+==========+==============================================+ +==========+==============================================+
@ -1338,14 +1376,6 @@ Internet-Draft XR Fragments October 2024
» example implementation » example implementation
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
three/xrf/q.js) » example 3D asset three/xrf/q.js) » example 3D asset
van Kammen Expires 10 April 2025 [Page 24]
Internet-Draft XR Fragments October 2024
(https://github.com/coderofsalvation/xrfragment/blob/main/example/ (https://github.com/coderofsalvation/xrfragment/blob/main/example/
assets/filter.gltf#L192) » discussion assets/filter.gltf#L192) » discussion
(https://github.com/coderofsalvation/xrfragment/issues/3) (https://github.com/coderofsalvation/xrfragment/issues/3)
@ -1364,6 +1394,14 @@ Internet-Draft XR Fragments October 2024
5. detect number values like foo=1 (reference regex= /^[0-9\.]+$/ ) 5. detect number values like foo=1 (reference regex= /^[0-9\.]+$/ )
6. detect operators so you can easily strip keys (reference regex= 6. detect operators so you can easily strip keys (reference regex=
/(^-|\*$)/ ) /(^-|\*$)/ )
van Kammen Expires 10 April 2025 [Page 25]
Internet-Draft XR Fragments October 2024
7. detect exclude keys like -foo (reference regex= /^-/ ) 7. detect exclude keys like -foo (reference regex= /^-/ )
8. for every filter token split string on = 8. for every filter token split string on =
9. and we set root to true or false (true=/ root selector is 9. and we set root to true or false (true=/ root selector is
@ -1394,14 +1432,6 @@ Internet-Draft XR Fragments October 2024
src/3rd/js/XRWG.js)), which basically has all these things already src/3rd/js/XRWG.js)), which basically has all these things already
collected/organized for you during scene-load. collected/organized for you during scene-load.
van Kammen Expires 10 April 2025 [Page 25]
Internet-Draft XR Fragments October 2024
*UX* *UX*
4. do not update the wires when the enduser moves, leave them as is 4. do not update the wires when the enduser moves, leave them as is
@ -1417,6 +1447,17 @@ Internet-Draft XR Fragments October 2024
| (https://github.com/coderofsalvation/xrfragment/blob/feat/macros/ | (https://github.com/coderofsalvation/xrfragment/blob/feat/macros/
| src/3rd/js/XRWG.js)), augmented by Bib(s)Tex. | src/3rd/js/XRWG.js)), augmented by Bib(s)Tex.
van Kammen Expires 10 April 2025 [Page 26]
Internet-Draft XR Fragments October 2024
Instead of just throwing together all kinds media types into one Instead of just throwing together all kinds media types into one
experience (games), what about their tagged/semantical relationships? experience (games), what about their tagged/semantical relationships?
Perhaps the following question is related: why is HTML adopted less Perhaps the following question is related: why is HTML adopted less
@ -1453,7 +1494,22 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 26]
van Kammen Expires 10 April 2025 [Page 27]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1509,7 +1565,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 27] van Kammen Expires 10 April 2025 [Page 28]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1565,7 +1621,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 28] van Kammen Expires 10 April 2025 [Page 29]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1621,7 +1677,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 29] van Kammen Expires 10 April 2025 [Page 30]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1677,7 +1733,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 30] van Kammen Expires 10 April 2025 [Page 31]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1733,7 +1789,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 31] van Kammen Expires 10 April 2025 [Page 32]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1789,7 +1845,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 32] van Kammen Expires 10 April 2025 [Page 33]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1845,7 +1901,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 33] van Kammen Expires 10 April 2025 [Page 34]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1901,7 +1957,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 34] van Kammen Expires 10 April 2025 [Page 35]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -1957,7 +2013,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 35] van Kammen Expires 10 April 2025 [Page 36]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -2013,7 +2069,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 36] van Kammen Expires 10 April 2025 [Page 37]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -2069,7 +2125,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 37] van Kammen Expires 10 April 2025 [Page 38]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -2125,7 +2181,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 38] van Kammen Expires 10 April 2025 [Page 39]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -2181,7 +2237,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 39] van Kammen Expires 10 April 2025 [Page 40]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -2237,7 +2293,7 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 40] van Kammen Expires 10 April 2025 [Page 41]
Internet-Draft XR Fragments October 2024 Internet-Draft XR Fragments October 2024
@ -2293,4 +2349,4 @@ Internet-Draft XR Fragments October 2024
van Kammen Expires 10 April 2025 [Page 41] van Kammen Expires 10 April 2025 [Page 42]

View File

@ -135,8 +135,8 @@ But approaches things from a higherlevel feedbackloop/hypermedia browser-perspec
<tr> <tr>
<td><tt>#pos</tt></td> <td><tt>#pos</tt></td>
<td>vector3</td> <td>vector3</td>
<td><tt>#pos=0.5,0,0</tt> <tt>#pos=room</tt> <tt>pos=cam2</tt></td> <td><tt>#pos=0.5,0,0</tt> <tt>#pos=room</tt> <tt>#pos=cam2</tt></td>
<td>positions camera (or XR floor) to xyz-coord/object/camera</td> <td>positions/parents camera(rig) (or XR floor) to xyz-coord/object/camera</td>
</tr> </tr>
<tr> <tr>
@ -629,8 +629,14 @@ For example, to render a portal with a preview-version of the scene, create an 3
<tbody> <tbody>
<tr> <tr>
<td>&lt;b&gt;#pos&lt;/b&gt;=0,0,0</td> <td>&lt;b&gt;#pos&lt;/b&gt;=0,0,0</td>
<td>vector3 or string</td> <td>vector3</td>
<td>(re)position camera based on coordinates directly, or indirectly using objectname (its worldposition)</td> <td>position camera to 0,0,0 (+userheight in VR)</td>
</tr>
<tr>
<td>&lt;b&gt;#pos&lt;/b&gt;=room</td>
<td>string</td>
<td>position camera to position of objectname <tt>room</tt> (+userheight in VR)</td>
</tr> </tr>
<tr> <tr>
@ -643,16 +649,18 @@ For example, to render a portal with a preview-version of the scene, create an 3
<eref target="https://github.com/coderofsalvation/xrfragment/issues/5">» discussion</eref><br /> <eref target="https://github.com/coderofsalvation/xrfragment/issues/5">» discussion</eref><br />
</t> </t>
<t>Here's the basic <strong>level1</strong> flow (with optional level2 features):</t>
<ol spacing="compact"> <ol spacing="compact">
<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), except in case of camera-switching.</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>if the referenced <tt>#pos</tt> object is animated, parent the current camera to that object (so it animates too)</li>
<li>mediafragment <tt>t</tt> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li> <li><tt>rot</tt> sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)</li>
<li><strong>level2</strong>: mediafragment <tt>t</tt> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
<li>before scene load: the scene is cleared</li> <li>before scene load: the scene is cleared</li>
<li>after scene load: in case the scene (rootnode) contains an <tt>#</tt> default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change)</li> <li><strong>level2</strong>: after scene load: in case the scene (rootnode) contains an <tt>#</tt> default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change)</li>
<li>after scene load: in case the scene (rootnode) contains an <tt>#</tt> default view with a fragment value: execute positional fragment via the hashbus + update top-level URL</li> <li><strong>level2</strong>: after scene load: in case the scene (rootnode) contains an <tt>#</tt> default view with a fragment value: execute positional fragment via the hashbus + update top-level URL</li>
<li>in case of no default <tt>#</tt> view on the scene (rootnode), default player(rig) position <tt>0,0,0</tt> is assumed.</li> <li><strong>level2</strong>: in case of no default <tt>#</tt> view on the scene (rootnode), default player(rig) position <tt>0,0,0</tt> is assumed.</li>
<li>in case a <tt>href</tt> does not mention any <tt>pos</tt>-coordinate, the current position will be assumed</li> <li>in case a <tt>href</tt> does not mention any <tt>pos</tt>-coordinate, the current position 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>

File diff suppressed because one or more lines are too long