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, -#pos=0,0,0 -vector3 -position camera to 0,0,0 (+userheight in VR) - - - -#pos=room +#=room1 string -position camera to position of objectname room (+userheight in VR) - - - -#rot=0,90,0 -vector3 -rotate camera +position camera to position of objectname room1 (+userheight in VR) @@ -755,16 +743,10 @@ The sidecar will define (or override already existing) extras,

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. -
  3. set the position of the camera accordingly to the vector3 values of #pos
  4. -
  5. if the referenced #pos object is animated, parent the current camera to that object (so it animates too)
  6. -
  7. rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)
  8. -
  9. level2: mediafragment t in the top-URL sets the playbackspeed and animation-range of the global scene animation
  10. -
  11. before scene load: the scene is cleared
  12. -
  13. 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)
  14. -
  15. 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
  16. -
  17. level2: in case of no default # view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.
  18. -
  19. in case a href does not mention any pos-coordinate, the current position will be assumed
  20. +
  21. 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.
  22. +
  23. set the position of the camera accordingly to the vector3 values of room1
  24. +
  25. if the referenced #room1 object is animated, parent the current camera to that object (so it animates too)
  26. +
  27. 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:

@@ -786,6 +768,17 @@ 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,0

+

Non-normative:

+ +
    +
  1. rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)
  2. +
  3. level2: mediafragment t in the top-URL sets the playbackspeed and animation-range of the global scene animation
  4. +
  5. before scene load: the scene is cleared
  6. +
  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. +
  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. +
  11. level2: in case of no default # view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.
  12. +
+

Top-level URL processing

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):
    -
  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. -
  3. set the position of the camera accordingly to the vector3 values of #pos
  4. -
  5. if the referenced #pos object is animated, parent the current camera to that object (so it animates too)
  6. -
  7. rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)
  8. -
  9. level2: mediafragment t in the top-URL sets the playbackspeed and animation-range of the global scene animation
  10. -
  11. before scene load: the scene is cleared
  12. -
  13. 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)
  14. -
  15. 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
  16. -
  17. level2: in case of no default # view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.
  18. -
  19. in case a href does not mention any pos-coordinate, the current position will be assumed
  20. +
  21. 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.
  22. +
  23. set the position of the camera accordingly to the vector3 values of room1
  24. +
  25. if the referenced #room1 object is animated, parent the current camera to that object (so it animates too)
  26. +
  27. 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,0
+Non-normative: + +
    +
  1. rot sets the rotation of the camera (only for non-VR/AR headsets, however a camera-value overrules this)
  2. +
  3. level2: mediafragment t in the top-URL sets the playbackspeed and animation-range of the global scene animation
  4. +
  5. before scene load: the scene is cleared
  6. +
  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. +
  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. +
  11. level2: in case of no default # view on the scene (rootnode), default player(rig) position 0,0,0 is assumed.
  12. +
Top-level URL processing