From 796790990d0e93f4e608e35096ed8c29df94e26c Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Thu, 30 Nov 2023 13:25:27 +0100 Subject: [PATCH] wip --- example/aframe/sandbox/index.html | 3 +- example/assets/index.glb | Bin 2449332 -> 2410876 bytes src/3rd/js/aframe/index.js | 24 ++++++--- src/3rd/js/pubsub.js | 6 +++ src/3rd/js/three/index.js | 2 + src/3rd/js/three/xrf/dynamic/XRWG-lines.js | 22 ++++---- src/3rd/js/three/xrf/src/non-euclidian.js | 58 +++++++++++++++------ 7 files changed, 78 insertions(+), 37 deletions(-) diff --git a/example/aframe/sandbox/index.html b/example/aframe/sandbox/index.html index ebaf27b..5774ba5 100644 --- a/example/aframe/sandbox/index.html +++ b/example/aframe/sandbox/index.html @@ -39,7 +39,7 @@ - + @@ -58,7 +58,6 @@ // reroute console messages to snackbar notifications console.log = ( (log) => function(str){ - if( str.match(/URL:/) ) str += "

(use back-button to go back)" if( String(str).match(/:.*#/) ) window.notify(str) log(str) })(console.log) diff --git a/example/assets/index.glb b/example/assets/index.glb index 7e89f5bd5cf55ac989fd0414a33153eed14f71de..5b049a566c23998a0b68d9370826af5714a51c4f 100644 GIT binary patch delta 65435 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 delta 111859 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 Ln=i*PWchypM@7|d diff --git a/src/3rd/js/aframe/index.js b/src/3rd/js/aframe/index.js index 0f6b61a..01c5509 100644 --- a/src/3rd/js/aframe/index.js +++ b/src/3rd/js/aframe/index.js @@ -37,11 +37,11 @@ window.AFRAME.registerComponent('xrf', { els.map( (mesh) => { mesh.material.visible = false let el = document.createElement("a-entity") - el.setAttribute("xrf-get", `name: ${mesh.name};reparent:true` ) + el.setAttribute("xrf-get", mesh.name ) el.setAttribute("class","floor ray") $('a-scene').appendChild(el) }) - blinkControls = blinkControls.components['blink-controls'].queryCollisionEntities() + blinkControls = blinkControls.components['blink-controls'].update({collisionEntities:true}) } }) @@ -124,12 +124,20 @@ window.AFRAME.registerComponent('xrf', { els.map( (el) => document.querySelector('a-scene').removeChild(el) ) }) - aScene.addEventListener('enter-vr', () => { - // undo lookup-control shenanigans (which blocks updating camerarig position in VR) - document.querySelector('[camera]').object3D.parent.matrixAutoUpdate = true - document.querySelector('[camera]').removeAttribute("look-controls") - document.querySelector('[camera]').removeAttribute("wasd-controls") - }) + // *TODO* workaround no longer needed? + // + // aScene.addEventListener('enter-vr', () => { + // // undo lookup-control shenanigans (which blocks updating camerarig position in VR) + // document.querySelector('[camera]').object3D.parent.matrixAutoUpdate = true + // document.querySelector('[camera]').components['look-controls'].pause() //removeAttribute("look-controls") + // document.querySelector('[camera]').components['wasd-controls'].pause() //removeAttribute("wasd-controls") + // }) + // aScene.addEventListener('exit-vr', () => { + // // redo lookup-control shenanigans (which blocks updating camerarig position in VR) + // document.querySelector('[camera]').object3D.parent.matrixAutoUpdate = false + // document.querySelector('[camera]').components['look-controls'].play() //setAttribute("look-controls",'') + // document.querySelector('[camera]').components['wasd-controls'].play() //setAttribute("wasd-controls",'') + // }) AFRAME.XRF.navigator.to(this.data) .then( (model) => { diff --git a/src/3rd/js/pubsub.js b/src/3rd/js/pubsub.js index 86c4988..a0044e2 100644 --- a/src/3rd/js/pubsub.js +++ b/src/3rd/js/pubsub.js @@ -73,3 +73,9 @@ xrf.emit.promise = function(e, opts){ delete opts.promise }) } + +xrf.addEventListener('reset', () => { +// *TODO* do this nicely +// xrf._listeners['renderPost'] = [] +// xrf._listeners['render'] = [] +}) diff --git a/src/3rd/js/three/index.js b/src/3rd/js/three/index.js index 6a80602..d54206d 100644 --- a/src/3rd/js/three/index.js +++ b/src/3rd/js/three/index.js @@ -80,6 +80,8 @@ xrf.reset = () => { xrf.interactive = xrf.interactiveGroup( xrf.THREE, xrf.renderer, xrf.camera) xrf.add( xrf.interactive ) xrf.layers = 0 + + // reset certain events xrf.emit('reset',{}) // remove mixers xrf.mixers.map( (m) => m.stop()) diff --git a/src/3rd/js/three/xrf/dynamic/XRWG-lines.js b/src/3rd/js/three/xrf/dynamic/XRWG-lines.js index eac1024..708bd52 100644 --- a/src/3rd/js/three/xrf/dynamic/XRWG-lines.js +++ b/src/3rd/js/three/xrf/dynamic/XRWG-lines.js @@ -51,14 +51,16 @@ xrf.drawLineToMesh = (opts) => { } } -xrf.addEventListener('render', (opts) => { - // update focusline - let {time,model} = opts - if( !xrf.clock ) return - xrf.focusLine.material.color.r = (1.0 + Math.sin( xrf.clock.getElapsedTime()*10 ))/2 - xrf.focusLine.material.dashSize = 0.2 + 0.02*Math.sin( xrf.clock.getElapsedTime() ) - xrf.focusLine.material.gapSize = 0.1 + 0.02*Math.sin( xrf.clock.getElapsedTime() *3 ) - xrf.focusLine.material.opacity = (0.25 + 0.15*Math.sin( xrf.clock.getElapsedTime() * 3 )) * xrf.focusLine.opacity; - if( xrf.focusLine.opacity > 0.0 ) xrf.focusLine.opacity -= time*0.2 - if( xrf.focusLine.opacity < 0.0 ) xrf.focusLine.opacity = 0 +xrf.addEventListener('navigateLoaded', (opts) => { + xrf.addEventListener('render', (opts) => { + // update focusline + let {time,model} = opts + if( !xrf.clock ) return + xrf.focusLine.material.color.r = (1.0 + Math.sin( xrf.clock.getElapsedTime()*10 ))/2 + xrf.focusLine.material.dashSize = 0.2 + 0.02*Math.sin( xrf.clock.getElapsedTime() ) + xrf.focusLine.material.gapSize = 0.1 + 0.02*Math.sin( xrf.clock.getElapsedTime() *3 ) + xrf.focusLine.material.opacity = (0.25 + 0.15*Math.sin( xrf.clock.getElapsedTime() * 3 )) * xrf.focusLine.opacity; + if( xrf.focusLine.opacity > 0.0 ) xrf.focusLine.opacity -= time*0.2 + if( xrf.focusLine.opacity < 0.0 ) xrf.focusLine.opacity = 0 + }) }) diff --git a/src/3rd/js/three/xrf/src/non-euclidian.js b/src/3rd/js/three/xrf/src/non-euclidian.js index 076de4e..c631cdb 100644 --- a/src/3rd/js/three/xrf/src/non-euclidian.js +++ b/src/3rd/js/three/xrf/src/non-euclidian.js @@ -14,22 +14,24 @@ xrf.portalNonEuclidian = function(opts){ cameraPosition: new THREE.Vector3(), raycaster: new THREE.Raycaster(), isLocal: opts.isLocal, - isLens: false + isLens: false, + isInside: false, + setStencil: (stencilRef) => mesh.portal.stencilObjects.traverse( (n) => showPortal(n, stencilRef == 0) && n.stencil && n.stencil(stencilRef) ), + positionObjectsIfNeeded: (pos,scale) => !mesh.portal.isLens && mesh.portal.stencilObjects.traverse( (n) => n.positionAtStencil && (n.positionAtStencil(pos,scale)) ) } // allow objects to flip between original and stencil position (which puts them behind stencilplane) const addStencilFeature = (n) => { if( n.stencil ) return n // run once - n.stencil = ( (pos,scale) => (sRef,newPos, newScale) => { - if( !mesh.portal.isLens ){ - n.position.copy( sRef == 0 ? pos : newPos ) - if( sRef > 0 ) n.scale.multiply( newScale ) - else n.scale.copy( scale ) - n.updateMatrixWorld(true) - } - xrf.portalNonEuclidian.selectStencil(n, sRef ) - } - )( n.position.clone(), n.scale.clone() ) + + n.stencil = (sRef ) => xrf.portalNonEuclidian.selectStencil(n, sRef ) + n.positionAtStencil = (pos,scale) => (newPos,newScale) => { + n.position.copy( newPos || pos ) + n.scale.copy( scale ) + n.updateMatrixWorld(true) + } + // curry function + n.positionAtStencil = n.positionAtStencil( n.position.clone(), n.scale.clone() ) return n } @@ -89,22 +91,23 @@ xrf.portalNonEuclidian = function(opts){ xrf.addEventListener('renderPost', (opts) => { let {scene,camera,time,render,renderer} = opts - if( mesh.portal && mesh.portal.stencilObjects ){ + if( mesh.portal.needUpdate && mesh.portal && mesh.portal.stencilObjects ){ + let cameraDirection = mesh.portal.cameraDirection + let cameraPosition = mesh.portal.cameraPosition let stencilRef = mesh.portal.stencilRef let newPos = mesh.portal.posWorld let stencilObject = mesh.portal.stencilObject let newScale = mesh.scale - let cameraDirection = mesh.portal.cameraDirection - let cameraPosition = mesh.portal.cameraPosition let raycaster = mesh.portal.raycaster + let cam = xrf.camera.getCam ? xrf.camera.getCam() : camera cam.getWorldPosition(cameraPosition) - if( cameraPosition.distanceTo(newPos) > 20.0 ) return // dont render far portals cam.getWorldDirection(cameraDirection) + if( cameraPosition.distanceTo(newPos) > 20.0 ) return // dont render far portals // init if( !mesh.portal.isLocal || mesh.portal.isLens ) stencilObject.visible = true - mesh.portal.stencilObjects.traverse( (n) => showPortal(n,false) && n.stencil && n.stencil(stencilRef,newPos,newScale) ) + mesh.portal.setStencil(stencilRef) renderer.autoClear = false renderer.autoClearDepth = false renderer.autoClearColor = false @@ -116,7 +119,7 @@ xrf.portalNonEuclidian = function(opts){ renderer.autoClearDepth = true renderer.autoClearColor = true renderer.autoClearStencil = true - mesh.portal.stencilObjects.traverse( (n) => showPortal(n,true) && n.stencil && (n.stencil(0)) ) + mesh.portal.setStencil(0) if( !mesh.portal.isLocal || mesh.portal.isLens ) stencilObject.visible = false @@ -134,6 +137,9 @@ xrf.portalNonEuclidian = function(opts){ } mesh.portal.needUpdate = false }) + + + return this } @@ -147,6 +153,8 @@ xrf.portalNonEuclidian = function(opts){ .setupListeners() .setupStencilObjects(scene,opts) + // move portal objects to portalposition + mesh.portal.positionObjectsIfNeeded(mesh.portal.posWorld, mesh.scale) } xrf.portalNonEuclidian.selectStencil = (n, stencilRef, nested) => { @@ -179,4 +187,20 @@ xrf.addEventListener('parseModel',(opts) => { }) +// (re)set portalObject when entering/leaving a portal +xrf.addEventListener('href', (opts) => { + let {mesh,v} = opts + if( opts.click && mesh.portal ){ + if( !opts.click ) return + xrf.scene.traverse( (n) => { + if( !n.portal ) return + // since we're leaving this portal destination, lets move objects back to the portal + if( n.portal.isInside ) n.portal.positionObjectsIfNeeded( n.portal.posWorld, n.scale ) + n.portal.isInside = false + }) + mesh.portal.isInside = true + mesh.portal.positionObjectsIfNeeded() // move objects back to original pos (since we are going there) + } +}) + xrf.portalNonEuclidian.stencilRef = 1