diff --git a/doc/RFC_XR_Fragments.html b/doc/RFC_XR_Fragments.html index bdb8cc2..880718e 100644 --- a/doc/RFC_XR_Fragments.html +++ b/doc/RFC_XR_Fragments.html @@ -731,21 +731,9 @@ The sidecar will define (or override already existing) extras,
room (+userheight in VR)room1 (+userheight in VR)Here’s the basic level1 flow (with optional level2 features):
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.#pos#pos object is animated, parent the current camera to that object (so it animates too)rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)t in the top-URL sets the playbackspeed and animation-range of the global scene animation# default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change)# default view with a fragment value: execute positional fragment via the hashbus + update top-level URL# view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.href does not mention any pos-coordinate, the current position will be assumedroom1#room1 object is animated, parent the current camera to that object (so it animates too)href does not mention any 3D object, the current position will be assumedHere’s an ascii representation of a 3D scene-graph which contains 3D objects ◻ and their metadata:
An XR Fragment-compatible browser viewing this scene, allows the end-user to interact with the buttonA and buttonB.
In case of buttonA the end-user will be teleported to another location and time in the current loaded scene, but buttonB will replace the current scene with a new one, like other.fbx, and assume camera coordinate 0,0,0
Non-normative:
+ +rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)t in the top-URL sets the playbackspeed and animation-range of the global scene animation# default view with a fragment value: execute non-positional fragments via the hashbus (no top-level URL change)# default view with a fragment value: execute positional fragment via the hashbus + update top-level URL# view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.diff --git a/doc/RFC_XR_Fragments.md b/doc/RFC_XR_Fragments.md index 94eaf15..0e2a12a 100644 --- a/doc/RFC_XR_Fragments.md +++ b/doc/RFC_XR_Fragments.md @@ -442,25 +442,17 @@ Example URI's: | fragment | type | functionality | |----------|--------|------------------------------| -| #pos=0,0,0 | vector3 |position camera to 0,0,0 (+userheight in VR) | -| #pos=room | string | position camera to position of objectname `room` (+userheight in VR) | -| #rot=0,90,0 | vector3 | rotate camera | +| #=room1 | string | position camera to position of objectname `room1` (+userheight in VR) | [» example implementation](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/pos.js)
[» discussion](https://github.com/coderofsalvation/xrfragment/issues/5)
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. 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 +1. the Y-coordinate of `room1 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 `room1` +3. if the referenced `#room1` object is animated, parent the current camera to that object (so it animates too) +4. in case a `href` does not mention any 3D object, the current position will be assumed Here's an ascii representation of a 3D scene-graph which contains 3D objects `◻` and their metadata: @@ -482,6 +474,15 @@ Here's an ascii representation of a 3D scene-graph which contains 3D objects ` An XR Fragment-compatible browser viewing this scene, allows the end-user to interact with the `buttonA` and `buttonB`.
In case of `buttonA` the end-user will be teleported to another location and time in the **current loaded scene**, but `buttonB` will **replace the current scene** with a new one, like `other.fbx`, and assume camera coordinate `0,0,0` +**Non-normative**: + +5. `rot` sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this) +6. **level2**: mediafragment `t` in the top-URL sets the playbackspeed and animation-range of the global scene animation +7. before scene load: the scene is cleared +8. **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) +9. **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 +10. **level2**: in case of no default `#` view on the scene (rootnode), default player(rig) position `0,0,0` is assumed. + # Top-level URL processing > Example URL: `://foo/world.gltf#room1&t=10` diff --git a/doc/RFC_XR_Fragments.txt b/doc/RFC_XR_Fragments.txt index 504bfcc..1a4edfd 100644 --- a/doc/RFC_XR_Fragments.txt +++ b/doc/RFC_XR_Fragments.txt @@ -870,20 +870,14 @@ Internet-Draft XR Fragments September 2025 11. Navigating 3D - +====================+=========+==========================+ - | fragment | type | functionality | - +====================+=========+==========================+ - | #pos=0,0,0 | vector3 | position camera to 0,0,0 | - | | | (+userheight in VR) | - +--------------------+---------+--------------------------+ - | #pos=room | string | position camera to | - | | | position of objectname | - | | | room (+userheight in VR) | - +--------------------+---------+--------------------------+ - | #rot=0,90,0 | vector3 | rotate camera | - +--------------------+---------+--------------------------+ + +================+========+======================================+ + | fragment | type | functionality | + +================+========+======================================+ + | #=room1 | string | position camera to position of | + | | | objectname room1 (+userheight in VR) | + +----------------+--------+--------------------------------------+ - Table 7 + Table 7 » example implementation (https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/ @@ -891,6 +885,12 @@ Internet-Draft XR Fragments September 2025 » discussion (https://github.com/coderofsalvation/xrfragment/ issues/5) + Here's the basic *level1* flow (with optional level2 features): + + + + + van Kammen Expires 5 March 2026 [Page 16] @@ -898,31 +898,16 @@ van Kammen Expires 5 March 2026 [Page 16] Internet-Draft XR Fragments September 2025 - 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. 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 + 1. the Y-coordinate of `room1 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 room1 + 3. if the referenced #room1 object is animated, parent the current + camera to that object (so it animates too) + 4. in case a href does not mention any 3D object, the current + position will be assumed Here's an ascii representation of a 3D scene-graph which contains 3D objects ◻ and their metadata: @@ -946,6 +931,21 @@ Internet-Draft XR Fragments September 2025 *replace the current scene* with a new one, like other.fbx, and assume camera coordinate 0,0,0 + *Non-normative*: + + 5. rot sets the rotation of the camera (only for non-VR/AR headsets, + however a camera-value overrules this) + 6. *level2*: mediafragment t in the top-URL sets the playbackspeed + and animation-range of the global scene animation + 7. before scene load: the scene is cleared + 8. *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) + 9. *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 + 10. *level2*: in case of no default # view on the scene (rootnode), + default player(rig) position 0,0,0 is assumed. diff --git a/doc/RFC_XR_Fragments.xml b/doc/RFC_XR_Fragments.xml index 5481391..0efa7c1 100644 --- a/doc/RFC_XR_Fragments.xml +++ b/doc/RFC_XR_Fragments.xml @@ -610,21 +610,9 @@ The sidecar will define (or override already existing) extras,- - -<b>#pos</b>=0,0,0 -vector3 -position camera to 0,0,0 (+userheight in VR) -- - -<b>#pos</b>=room +<b>#</b>=room1 string -position camera to position of objectname room (+userheight in VR) -- <b>#rot</b>=0,90,0 -vector3 -rotate camera +position camera to position of objectname room1 (+userheight in VR) » example implementation
@@ -634,16 +622,10 @@ The sidecar will define (or override already existing) extras,Here's the basic level1 flow (with optional level2 features): -
- 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.
-- set the position of the camera accordingly to the vector3 values of #pos
-- if the referenced #pos object is animated, parent the current camera to that object (so it animates too)
-- rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)
-- level2: mediafragment t in the top-URL sets the playbackspeed and animation-range of the global scene animation
-- before scene load: the scene is cleared
-- 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)
-- 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
-- level2: in case of no default # view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.
-- in case a href does not mention any pos-coordinate, the current position will be assumed
+- the Y-coordinate of `room1 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.
+- set the position of the camera accordingly to the vector3 values of room1
+- if the referenced #room1 object is animated, parent the current camera to that object (so it animates too)
+- in case a href does not mention any 3D object, the current position will be assumed
Here's an ascii representation of a 3D scene-graph which contains 3D objects ◻ and their metadata: @@ -664,6 +646,16 @@ The sidecar will define (or override already existing) extras,An XR Fragment-compatible browser viewing this scene, allows the end-user to interact with the buttonA and buttonB. +
In case of buttonA the end-user will be teleported to another location and time in the current loaded scene, but buttonB will replace the current scene with a new one, like other.fbx, and assume camera coordinate 0,0,0Non-normative: + ++
- rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)
+- level2: mediafragment t in the top-URL sets the playbackspeed and animation-range of the global scene animation
+- before scene load: the scene is cleared
+- 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)
+- 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
+- level2: in case of no default # view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.
+Top-level URL processing