main: update documentation
This commit is contained in:
parent
676b8d1fd2
commit
a54ff56a8d
|
@ -208,8 +208,8 @@ Instead of forcing authors to combine 3D/2D objects programmatically (publishing
|
|||
<tr>
|
||||
<td><code>#pos</code></td>
|
||||
<td>vector3</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><code>#pos=0.5,0,0</code> <code>#pos=room</code> <code>#pos=cam2</code></td>
|
||||
<td>positions/parents camera(rig) (or XR floor) to xyz-coord/object/camera</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -745,8 +745,14 @@ For example, to render a portal with a preview-version of the scene, create an 3
|
|||
<tbody>
|
||||
<tr>
|
||||
<td><b>#pos</b>=0,0,0</td>
|
||||
<td>vector3 or string</td>
|
||||
<td>(re)position camera based on coordinates directly, or indirectly using objectname (its worldposition)</td>
|
||||
<td>vector3</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>
|
||||
|
@ -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>
|
||||
<a href="https://github.com/coderofsalvation/xrfragment/issues/5">» discussion</a><br></p>
|
||||
|
||||
<p>Here’s the basic <strong>level1</strong> flow (with optional level2 features):</p>
|
||||
|
||||
<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><code>rot</code> sets the rotation of the camera (only for non-VR/AR headsets)</li>
|
||||
<li>mediafragment <code>t</code> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
|
||||
<li>if the referenced <code>#pos</code> object is animated, parent the current camera to that object (so it animates too)</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>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>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>: 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 positional fragment via the hashbus + update top-level URL</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>
|
||||
</ol>
|
||||
|
||||
|
|
|
@ -201,7 +201,7 @@ XR Fragments utilizes URLs:
|
|||
|
||||
| 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 |
|
||||
| [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>=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 |
|
||||
|
||||
[» 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.
|
||||
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)
|
||||
4. **level2**: 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. **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)
|
||||
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
|
||||
8. **level2**: 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
|
||||
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
|
||||
|
||||
Here's an ascii representation of a 3D scene-graph which contains 3D objects `◻` and their metadata:
|
||||
|
||||
|
|
|
@ -95,13 +95,13 @@ Table of Contents
|
|||
8.2. media fragments and datatypes . . . . . . . . . . . . . . 13
|
||||
9. Navigating 3D . . . . . . . . . . . . . . . . . . . . . . . . 16
|
||||
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.1. Walking surfaces . . . . . . . . . . . . . . . . . . . . 21
|
||||
12.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 21
|
||||
12.2. UX spec . . . . . . . . . . . . . . . . . . . . . . . . 22
|
||||
12.3. Scaling instanced content . . . . . . . . . . . . . . . 22
|
||||
13. XR Fragment: pos . . . . . . . . . . . . . . . . . . . . . . 22
|
||||
14. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 22
|
||||
14. XR Fragment: rot . . . . . . . . . . . . . . . . . . . . . . 23
|
||||
15. XR Fragment: t . . . . . . . . . . . . . . . . . . . . . . . 23
|
||||
16. XR audio/video integration . . . . . . . . . . . . . . . . . 23
|
||||
17. XR Fragment filters . . . . . . . . . . . . . . . . . . . . . 23
|
||||
|
@ -115,26 +115,26 @@ Internet-Draft XR Fragments October 2024
|
|||
|
||||
|
||||
17.2. Filter Parser . . . . . . . . . . . . . . . . . . . . . 25
|
||||
18. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 25
|
||||
18. Visible links . . . . . . . . . . . . . . . . . . . . . . . . 26
|
||||
19. Text in XR (tagging,linking to spatial objects) . . . . . . . 26
|
||||
19.1. Default Data URI mimetype . . . . . . . . . . . . . . . 28
|
||||
19.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 29
|
||||
20. Importing/exporting . . . . . . . . . . . . . . . . . . . . . 30
|
||||
21. Reflection Mapping . . . . . . . . . . . . . . . . . . . . . 30
|
||||
22. Transclusion (broken link) resolution . . . . . . . . . . . . 30
|
||||
23. Topic-based index-less Webrings . . . . . . . . . . . . . . . 31
|
||||
24. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 32
|
||||
25. Additional scene metadata . . . . . . . . . . . . . . . . . . 32
|
||||
26. Accessibility interface . . . . . . . . . . . . . . . . . . . 33
|
||||
26.1. Two-button navigation . . . . . . . . . . . . . . . . . 34
|
||||
26.2. Overlap with fileformat-specific extensions . . . . . . 35
|
||||
26.3. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . 35
|
||||
27. Security Considerations . . . . . . . . . . . . . . . . . . . 38
|
||||
28. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
|
||||
29. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
|
||||
30. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39
|
||||
31. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39
|
||||
32. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 39
|
||||
19.1. Default Data URI mimetype . . . . . . . . . . . . . . . 29
|
||||
19.2. URL and Data URI . . . . . . . . . . . . . . . . . . . . 30
|
||||
20. Importing/exporting . . . . . . . . . . . . . . . . . . . . . 31
|
||||
21. Reflection Mapping . . . . . . . . . . . . . . . . . . . . . 31
|
||||
22. Transclusion (broken link) resolution . . . . . . . . . . . . 31
|
||||
23. Topic-based index-less Webrings . . . . . . . . . . . . . . . 32
|
||||
24. URI Templates (RFC6570) . . . . . . . . . . . . . . . . . . . 33
|
||||
25. Additional scene metadata . . . . . . . . . . . . . . . . . . 33
|
||||
26. Accessibility interface . . . . . . . . . . . . . . . . . . . 34
|
||||
26.1. Two-button navigation . . . . . . . . . . . . . . . . . 35
|
||||
26.2. Overlap with fileformat-specific extensions . . . . . . 36
|
||||
26.3. Vendor Prefixes . . . . . . . . . . . . . . . . . . . . 36
|
||||
27. Security Considerations . . . . . . . . . . . . . . . . . . . 39
|
||||
28. FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
|
||||
29. authors . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
|
||||
30. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40
|
||||
31. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 40
|
||||
32. Appendix: Definitions . . . . . . . . . . . . . . . . . . . . 40
|
||||
|
||||
1. Introduction
|
||||
|
||||
|
@ -287,10 +287,11 @@ Internet-Draft XR Fragments October 2024
|
|||
+=======================+======================================+============+=============+
|
||||
|fragment |type |example |info |
|
||||
+=======================+======================================+============+=============+
|
||||
|#pos |vector3 |#pos=0.5,0,0|positions |
|
||||
| | |#pos=room |camera (or XR|
|
||||
| | |pos=cam2 |floor) to |
|
||||
| | | |xyz- |
|
||||
|#pos |vector3 |#pos=0.5,0,0|positions/ |
|
||||
| | |#pos=room |parents |
|
||||
| | |#pos=cam2 |camera(rig) |
|
||||
| | | |(or XR floor)|
|
||||
| | | |to xyz- |
|
||||
| | | |coord/object/|
|
||||
| | | |camera |
|
||||
+-----------------------+--------------------------------------+------------+-------------+
|
||||
|
@ -331,7 +332,6 @@ Internet-Draft XR Fragments October 2024
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
van Kammen Expires 10 April 2025 [Page 6]
|
||||
|
||||
|
@ -844,16 +844,18 @@ Internet-Draft XR Fragments October 2024
|
|||
|
||||
9. Navigating 3D
|
||||
|
||||
+====================+=========+=============================+
|
||||
+====================+=========+==========================+
|
||||
| fragment | type | functionality |
|
||||
+====================+=========+=============================+
|
||||
| <b>#pos</b>=0,0,0 | vector3 | (re)position camera based |
|
||||
| | or | on coordinates directly, or |
|
||||
| | string | indirectly using objectname |
|
||||
| | | (its worldposition) |
|
||||
+--------------------+---------+-----------------------------+
|
||||
+====================+=========+==========================+
|
||||
| <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>#rot</b>=0,90,0 | vector3 | rotate camera |
|
||||
+--------------------+---------+-----------------------------+
|
||||
+--------------------+---------+--------------------------+
|
||||
|
||||
Table 7
|
||||
|
||||
|
@ -863,34 +865,32 @@ Internet-Draft XR Fragments October 2024
|
|||
» discussion (https://github.com/coderofsalvation/xrfragment/
|
||||
issues/5)
|
||||
|
||||
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).
|
||||
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.
|
||||
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
|
||||
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
|
||||
|
||||
Here's an ascii representation of a 3D scene-graph which contains 3D
|
||||
objects ◻ and their metadata:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
van Kammen Expires 10 April 2025 [Page 16]
|
||||
|
@ -898,6 +898,9 @@ van Kammen Expires 10 April 2025 [Page 16]
|
|||
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 │
|
||||
|
@ -939,13 +942,10 @@ Internet-Draft XR Fragments October 2024
|
|||
5. IF a #cube matches anything else in the XR Word Graph (XRWG) draw
|
||||
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
|
||||
|
||||
|
||||
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 |
|
||||
+========+========+===================================================+
|
||||
|
@ -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
|
||||
|
||||
|
||||
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,
|
||||
| additional filters can be used to include/exclude certain objects.
|
||||
| See next chapter on filtering below.
|
||||
|
@ -1049,6 +1058,14 @@ Internet-Draft XR Fragments October 2024
|
|||
object belongs.
|
||||
12. when only one object was cherrypicked (#cube e.g.), set its
|
||||
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
|
||||
applied to all src mediacontent with a timeline (mp4/mp3 e.g.)
|
||||
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+json
|
||||
* image/png
|
||||
|
||||
|
||||
|
||||
van Kammen Expires 10 April 2025 [Page 19]
|
||||
|
||||
Internet-Draft XR Fragments October 2024
|
||||
|
||||
|
||||
* image/jpg
|
||||
* 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
|
||||
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
|
||||
(in case of javascript: see [here
|
||||
(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/
|
||||
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''
|
||||
always refers to the previous position (see [here (https://github
|
||||
.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
|
||||
| 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
|
||||
|
||||
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
|
||||
XR Fragments).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
van Kammen Expires 10 April 2025 [Page 21]
|
||||
|
||||
Internet-Draft XR Fragments October 2024
|
||||
|
||||
|
||||
12.3. Scaling instanced content
|
||||
|
||||
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/
|
||||
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
|
||||
|
||||
|
||||
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
|
||||
|
||||
[[» 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:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
van Kammen Expires 10 April 2025 [Page 23]
|
||||
|
||||
Internet-Draft XR Fragments October 2024
|
||||
|
||||
|
||||
+====================+===========================================+
|
||||
| example | outcome |
|
||||
+====================+===========================================+
|
||||
|
@ -1281,15 +1307,6 @@ Internet-Draft XR Fragments October 2024
|
|||
|
||||
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
|
||||
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
|
||||
selecting.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
van Kammen Expires 10 April 2025 [Page 24]
|
||||
|
||||
Internet-Draft XR Fragments October 2024
|
||||
|
||||
|
||||
+==========+==============================================+
|
||||
| operator | info |
|
||||
+==========+==============================================+
|
||||
|
@ -1338,14 +1376,6 @@ Internet-Draft XR Fragments October 2024
|
|||
» example implementation
|
||||
(https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/
|
||||
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/
|
||||
assets/filter.gltf#L192) » discussion
|
||||
(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\.]+$/ )
|
||||
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= /^-/ )
|
||||
8. for every filter token split string on =
|
||||
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
|
||||
collected/organized for you during scene-load.
|
||||
|
||||
|
||||
|
||||
|
||||
van Kammen Expires 10 April 2025 [Page 25]
|
||||
|
||||
Internet-Draft XR Fragments October 2024
|
||||
|
||||
|
||||
*UX*
|
||||
|
||||
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/
|
||||
| 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
|
||||
experience (games), what about their tagged/semantical relationships?
|
||||
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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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]
|
||||
|
|
|
@ -135,8 +135,8 @@ But approaches things from a higherlevel feedbackloop/hypermedia browser-perspec
|
|||
<tr>
|
||||
<td><tt>#pos</tt></td>
|
||||
<td>vector3</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><tt>#pos=0.5,0,0</tt> <tt>#pos=room</tt> <tt>#pos=cam2</tt></td>
|
||||
<td>positions/parents camera(rig) (or XR floor) to xyz-coord/object/camera</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -629,8 +629,14 @@ For example, to render a portal with a preview-version of the scene, create an 3
|
|||
<tbody>
|
||||
<tr>
|
||||
<td><b>#pos</b>=0,0,0</td>
|
||||
<td>vector3 or string</td>
|
||||
<td>(re)position camera based on coordinates directly, or indirectly using objectname (its worldposition)</td>
|
||||
<td>vector3</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 <tt>room</tt> (+userheight in VR)</td>
|
||||
</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 />
|
||||
</t>
|
||||
<t>Here's the basic <strong>level1</strong> flow (with optional level2 features):</t>
|
||||
|
||||
<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><tt>rot</tt> sets the rotation of the camera (only for non-VR/AR headsets)</li>
|
||||
<li>mediafragment <tt>t</tt> in the top-URL sets the playbackspeed and animation-range of the global scene animation</li>
|
||||
<li>if the referenced <tt>#pos</tt> object is animated, parent the current camera to that object (so it animates too)</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>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>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>: 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 positional fragment via the hashbus + update top-level URL</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>
|
||||
</ol>
|
||||
<t>Here's an ascii representation of a 3D scene-graph which contains 3D objects <tt>◻</tt> and their metadata:</t>
|
||||
|
|
12
index.html
12
index.html
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue