From e9f910c8b1ef82873a6044e430e8b96fa2485cf3 Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Fri, 23 Apr 2021 09:39:48 +0100 Subject: [PATCH] Bring dat.gui inside vr (#21700) * Bring dat.gui inside vr * Example code clean up. * Refactored interaction code. * InteractiveGroup: Added pointer events support * Improved webxr_vr_sandbox scene --- editor/js/Viewport.VR.js | 54 ++------- editor/sw.js | 4 +- .../jsm/interactive/HTMLMesh.js | 55 ++++++--- examples/jsm/interactive/InteractiveGroup.js | 114 ++++++++++++++++++ examples/screenshots/webxr_vr_sandbox.jpg | Bin 52704 -> 53300 bytes examples/webxr_vr_sandbox.html | 102 +++++++++++++--- 6 files changed, 248 insertions(+), 81 deletions(-) rename editor/js/libs/three.html.js => examples/jsm/interactive/HTMLMesh.js (81%) create mode 100644 examples/jsm/interactive/InteractiveGroup.js diff --git a/editor/js/Viewport.VR.js b/editor/js/Viewport.VR.js index 4b3d649db7..5c54c710af 100644 --- a/editor/js/Viewport.VR.js +++ b/editor/js/Viewport.VR.js @@ -1,6 +1,7 @@ import * as THREE from '../../build/three.module.js'; -import { HTMLMesh } from './libs/three.html.js'; +import { HTMLMesh } from '../../examples/jsm/interactive/HTMLMesh.js'; +import { InteractiveGroup } from '../../examples/jsm/interactive/InteractiveGroup.js'; import { XRControllerModelFactory } from '../../examples/jsm/webxr/XRControllerModelFactory.js'; @@ -29,31 +30,29 @@ class VR { if ( group === null ) { - group = new THREE.Group(); + group = new InteractiveGroup( renderer ); editor.sceneHelpers.add( group ); const mesh = new HTMLMesh( sidebar ); mesh.position.set( 1, 1.5, - 0.5 ); mesh.rotation.y = - 0.5; + mesh.scale.setScalar( 2 ); group.add( mesh ); intersectables.push( mesh ); // controllers - const controller1 = renderer.xr.getController( 0 ); - controller1.addEventListener( 'select', onSelect ); - group.add( controller1 ); - - const controller2 = renderer.xr.getController( 1 ); - controller2.addEventListener( 'selectstart', onSelect ); - group.add( controller2 ); - const geometry = new THREE.BufferGeometry(); geometry.setFromPoints( [ new THREE.Vector3( 0, 0, 0 ), new THREE.Vector3( 0, 0, - 5 ) ] ); + const controller1 = renderer.xr.getController( 0 ); controller1.add( new THREE.Line( geometry ) ); + group.add( controller1 ); + + const controller2 = renderer.xr.getController( 1 ); controller2.add( new THREE.Line( geometry ) ); + group.add( controller2 ); // @@ -101,41 +100,6 @@ class VR { }; - // - - function onSelect( event ) { - - const controller = event.target; - - const intersections = getIntersections( controller ); - - if ( intersections.length > 0 ) { - - const intersection = intersections[ 0 ]; - - const object = intersection.object; - const uv = intersection.uv; - - object.material.map.click( uv.x, 1 - uv.y ); - - } - - } - - const raycaster = new THREE.Raycaster(); - const tempMatrix = new THREE.Matrix4(); - - function getIntersections( controller ) { - - tempMatrix.identity().extractRotation( controller.matrixWorld ); - - raycaster.ray.origin.setFromMatrixPosition( controller.matrixWorld ); - raycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix ); - - return raycaster.intersectObjects( intersectables ); - - } - // signals signals.toggleVR.add( () => { diff --git a/editor/sw.js b/editor/sw.js index 580c0281ae..e6480ee245 100644 --- a/editor/sw.js +++ b/editor/sw.js @@ -57,6 +57,9 @@ const assets = [ '../examples/jsm/curves/NURBSCurve.js', '../examples/jsm/curves/NURBSUtils.js', + '../examples/jsm/interactive/HTMLMesh.js', + '../examples/jsm/interactive/InteractiveGroup.js', + '../examples/jsm/environments/RoomEnvironment.js', '../examples/jsm/exporters/ColladaExporter.js', @@ -108,7 +111,6 @@ const assets = [ './js/libs/tern-threejs/threejs.js', './js/libs/signals.min.js', - './js/libs/three.html.js', './js/libs/ui.js', './js/libs/ui.three.js', diff --git a/editor/js/libs/three.html.js b/examples/jsm/interactive/HTMLMesh.js similarity index 81% rename from editor/js/libs/three.html.js rename to examples/jsm/interactive/HTMLMesh.js index 2e043709ec..b50b5503dc 100644 --- a/editor/js/libs/three.html.js +++ b/examples/jsm/interactive/HTMLMesh.js @@ -1,21 +1,39 @@ -import * as THREE from '../../../build/three.module.js'; +import { + CanvasTexture, + LinearFilter, + Mesh, + MeshBasicMaterial, + PlaneGeometry, + sRGBEncoding +} from '../../../build/three.module.js'; -class HTMLMesh extends THREE.Mesh { +class HTMLMesh extends Mesh { constructor( dom ) { const texture = new HTMLTexture( dom ); - const geometry = new THREE.PlaneGeometry( texture.image.width * 0.002, texture.image.height * 0.002 ); - const material = new THREE.MeshBasicMaterial( { map: texture, toneMapped: false } ); + const geometry = new PlaneGeometry( texture.image.width * 0.001, texture.image.height * 0.001 ); + const material = new MeshBasicMaterial( { map: texture, toneMapped: false } ); super( geometry, material ); + function onEvent( event ) { + + material.map.dispatchEvent( event ); + + } + + this.addEventListener( 'mousedown', onEvent ); + this.addEventListener( 'mousemove', onEvent ); + this.addEventListener( 'mouseup', onEvent ); + this.addEventListener( 'click', onEvent ); + } } -class HTMLTexture extends THREE.CanvasTexture { +class HTMLTexture extends CanvasTexture { constructor( dom ) { @@ -24,15 +42,15 @@ class HTMLTexture extends THREE.CanvasTexture { this.dom = dom; this.anisotropy = 16; - this.encoding = THREE.sRGBEncoding; - this.minFilter = THREE.LinearFilter; - this.magFilter = THREE.LinearFilter; + this.encoding = sRGBEncoding; + this.minFilter = LinearFilter; + this.magFilter = LinearFilter; } - click( x, y ) { + dispatchEvent( event ) { - htmlclick( this.dom, x, y ); + htmlevent( this.dom, event.type, event.data.x, event.data.y ); this.update(); @@ -93,12 +111,14 @@ function html2canvas( element ) { } return { + add: function ( clip ) { clips.push( clip ); doClip(); }, + remove: function () { clips.pop(); @@ -235,26 +255,25 @@ function html2canvas( element ) { var clipper = new Clipper( context ); - console.time( 'drawElement' ); + // console.time( 'drawElement' ); drawElement( element ); - console.timeEnd( 'drawElement' ); + // console.timeEnd( 'drawElement' ); return canvas; } -function htmlclick( element, x, y ) { +function htmlevent( element, event, x, y ) { - /* const mouseEventInit = { clientX: ( x * element.offsetWidth ) + element.offsetLeft, clientY: ( y * element.offsetHeight ) + element.offsetTop, view: element.ownerDocument.defaultView }; - element.dispatchEvent( new MouseEvent( 'click', mouseEventInit ) ); - */ + + window.dispatchEvent( new MouseEvent( event, mouseEventInit ) ); const rect = element.getBoundingClientRect(); @@ -269,7 +288,7 @@ function htmlclick( element, x, y ) { if ( x > rect.left && x < rect.right && y > rect.top && y < rect.bottom ) { - element.click(); + element.dispatchEvent( new MouseEvent( event, mouseEventInit ) ); } @@ -287,4 +306,4 @@ function htmlclick( element, x, y ) { } -export { HTMLMesh, HTMLTexture }; +export { HTMLMesh }; diff --git a/examples/jsm/interactive/InteractiveGroup.js b/examples/jsm/interactive/InteractiveGroup.js new file mode 100644 index 0000000000..68e9c08d50 --- /dev/null +++ b/examples/jsm/interactive/InteractiveGroup.js @@ -0,0 +1,114 @@ +import { + Group, + Matrix4, + Raycaster, + Vector2 +} from '../../../build/three.module.js'; + +const _pointer = new Vector2(); +const _event = { type: '', data: _pointer }; + +class InteractiveGroup extends Group { + + constructor( renderer, camera ) { + + super(); + + const scope = this; + + const raycaster = new Raycaster(); + const tempMatrix = new Matrix4(); + + // Pointer Events + + const element = renderer.domElement; + + function onPointerEvent( event ) { + + event.stopPropagation(); + + _pointer.x = ( event.clientX / element.clientWidth ) * 2 - 1; + _pointer.y = - ( event.clientY / element.clientHeight ) * 2 + 1; + + raycaster.setFromCamera( _pointer, camera ); + + const intersects = raycaster.intersectObjects( scope.children ); + + if ( intersects.length > 0 ) { + + const intersection = intersects[ 0 ]; + + const object = intersection.object; + const uv = intersection.uv; + + _event.type = event.type; + _event.data.set( uv.x, 1 - uv.y ); + + object.dispatchEvent( _event ); + + } + + } + + element.addEventListener( 'pointerdown', onPointerEvent ); + element.addEventListener( 'pointerup', onPointerEvent ); + element.addEventListener( 'pointermove', onPointerEvent ); + element.addEventListener( 'mousedown', onPointerEvent ); + element.addEventListener( 'mouseup', onPointerEvent ); + element.addEventListener( 'mousemove', onPointerEvent ); + element.addEventListener( 'click', onPointerEvent ); + + // WebXR Controller Events + // TODO: Dispatch pointerevents too + + const events = { + 'move': 'mousemove', + 'select': 'click', + 'selectstart': 'mousedown', + 'selectend': 'mouseup' + }; + + function onXRControllerEvent( event ) { + + const controller = event.target; + + tempMatrix.identity().extractRotation( controller.matrixWorld ); + + raycaster.ray.origin.setFromMatrixPosition( controller.matrixWorld ); + raycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix ); + + const intersections = raycaster.intersectObjects( scope.children ); + + if ( intersections.length > 0 ) { + + const intersection = intersections[ 0 ]; + + const object = intersection.object; + const uv = intersection.uv; + + _event.type = events[ event.type ]; + _event.data.set( uv.x, 1 - uv.y ); + + object.dispatchEvent( _event ); + + } + + } + + const controller1 = renderer.xr.getController( 0 ); + controller1.addEventListener( 'move', onXRControllerEvent ); + controller1.addEventListener( 'select', onXRControllerEvent ); + controller1.addEventListener( 'selectstart', onXRControllerEvent ); + controller1.addEventListener( 'selectend', onXRControllerEvent ); + + const controller2 = renderer.xr.getController( 1 ); + controller2.addEventListener( 'move', onXRControllerEvent ); + controller2.addEventListener( 'select', onXRControllerEvent ); + controller2.addEventListener( 'selectstart', onXRControllerEvent ); + controller2.addEventListener( 'selectend', onXRControllerEvent ); + + } + +} + +export { InteractiveGroup }; diff --git a/examples/screenshots/webxr_vr_sandbox.jpg b/examples/screenshots/webxr_vr_sandbox.jpg index b756594722b0eed536f3b0dcee5a1d7d869561d0..9f731b29b526096b4081444b773b7049a04b500d 100644 GIT binary patch delta 35926 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 PO#4^y&vX2AlL^h&Xh;`? delta 35325 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 V&T>ALt=mjG0qLJ=p5l{T&(|6-VhjKP diff --git a/examples/webxr_vr_sandbox.html b/examples/webxr_vr_sandbox.html index 0c9309309a..5c0cd9c5b0 100644 --- a/examples/webxr_vr_sandbox.html +++ b/examples/webxr_vr_sandbox.html @@ -15,10 +15,24 @@ import { Reflector } from './jsm/objects/Reflector.js'; import { VRButton } from './jsm/webxr/VRButton.js'; - let camera, scene, renderer; + import { HTMLMesh } from './jsm/interactive/HTMLMesh.js'; + import { InteractiveGroup } from './jsm/interactive/InteractiveGroup.js'; + import { XRControllerModelFactory } from './jsm/webxr/XRControllerModelFactory.js'; + + import { GUI } from './jsm/libs/dat.gui.module.js'; + let camera, scene, renderer; let reflector; + const parameters = { + radius: 0.5, + tube: 0.2, + tubularSegments: 150, + radialSegments: 20, + p: 2, + q: 3 + }; + init(); animate(); @@ -32,25 +46,27 @@ scene.background = background; camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 10 ); - camera.position.set( 0, 1.6, 2 ); + camera.position.set( 0, 1.6, 1.5 ); + + // - const torusGeometry = new THREE.TorusKnotGeometry( 0.4, 0.15, 150, 20 ); + const torusGeometry = new THREE.TorusKnotGeometry( ...Object.values( parameters ) ); const torusMaterial = new THREE.MeshStandardMaterial( { roughness: 0.01, metalness: 0.2, envMap: background } ); const torus = new THREE.Mesh( torusGeometry, torusMaterial ); - torus.position.y = 0.75; + torus.name = 'torus'; + torus.position.y = 1.25; torus.position.z = - 2; torus.castShadow = true; torus.receiveShadow = true; scene.add( torus ); - const boxGeometry = new THREE.BoxGeometry( 1.5, 0.1, 1.5 ); - const boxMaterial = new THREE.MeshPhongMaterial(); - const box = new THREE.Mesh( boxGeometry, boxMaterial ); - box.position.y = - 0.2; - box.position.z = - 2; - box.castShadow = true; - box.receiveShadow = true; - scene.add( box ); + const cylinderGeometry = new THREE.CylinderGeometry( 1, 1, 0.1, 50 ); + const cylinderMaterial = new THREE.MeshPhongMaterial(); + const cylinder = new THREE.Mesh( cylinderGeometry, cylinderMaterial ); + cylinder.position.z = - 2; + cylinder.castShadow = true; + cylinder.receiveShadow = true; + scene.add( cylinder ); const light1 = new THREE.DirectionalLight( 0x8800ff ); light1.position.set( - 1, 1.5, - 1.5 ); @@ -90,17 +106,17 @@ // - reflector = new Reflector( new THREE.PlaneGeometry( 1.4, 1.4 ), { + reflector = new Reflector( new THREE.PlaneGeometry( 2, 2 ), { textureWidth: window.innerWidth * window.devicePixelRatio, textureHeight: window.innerHeight * window.devicePixelRatio } ); reflector.position.x = 1; - reflector.position.y = 0.5; + reflector.position.y = 1.25; reflector.position.z = - 3; reflector.rotation.y = - Math.PI / 4; scene.add( reflector ); - const frameGeometry = new THREE.BoxGeometry( 1.5, 1.5, 0.1 ); + const frameGeometry = new THREE.BoxGeometry( 2.1, 2.1, 0.1 ); const frameMaterial = new THREE.MeshPhongMaterial(); const frame = new THREE.Mesh( frameGeometry, frameMaterial ); frame.position.z = - 0.07; @@ -120,9 +136,61 @@ document.body.appendChild( VRButton.createButton( renderer ) ); + window.addEventListener( 'resize', onWindowResize ); + // - window.addEventListener( 'resize', onWindowResize ); + const geometry = new THREE.BufferGeometry(); + geometry.setFromPoints( [ new THREE.Vector3( 0, 0, 0 ), new THREE.Vector3( 0, 0, - 5 ) ] ); + + const controller1 = renderer.xr.getController( 0 ); + controller1.add( new THREE.Line( geometry ) ); + scene.add( controller1 ); + + const controller2 = renderer.xr.getController( 1 ); + controller2.add( new THREE.Line( geometry ) ); + scene.add( controller2 ); + + // + + const controllerModelFactory = new XRControllerModelFactory(); + + const controllerGrip1 = renderer.xr.getControllerGrip( 0 ); + controllerGrip1.add( controllerModelFactory.createControllerModel( controllerGrip1 ) ); + scene.add( controllerGrip1 ); + + const controllerGrip2 = renderer.xr.getControllerGrip( 1 ); + controllerGrip2.add( controllerModelFactory.createControllerModel( controllerGrip2 ) ); + scene.add( controllerGrip2 ); + + // GUI + + function onChange() { + + torus.geometry.dispose(); + torus.geometry = new THREE.TorusKnotGeometry( ...Object.values( parameters ) ); + + } + + const gui = new GUI( { width: 300 } ); + gui.add( parameters, 'radius', 0.0, 1.0 ).onChange( onChange ); + gui.add( parameters, 'tube', 0.0, 1.0 ).onChange( onChange ); + gui.add( parameters, 'tubularSegments', 10, 150, 1 ).onChange( onChange ); + gui.add( parameters, 'radialSegments', 2, 20, 1 ).onChange( onChange ); + gui.add( parameters, 'p', 1, 10, 1 ).onChange( onChange ); + gui.add( parameters, 'q', 0, 10, 1 ).onChange( onChange ); + gui.domElement.style.visibility = 'hidden'; + + const group = new InteractiveGroup( renderer, camera ); + scene.add( group ); + + const mesh = new HTMLMesh( gui.domElement ); + mesh.position.x = - 0.75; + mesh.position.y = 1.5; + mesh.position.z = - 0.5; + mesh.rotation.y = Math.PI / 4; + mesh.scale.setScalar( 2 ); + group.add( mesh ); } @@ -144,7 +212,7 @@ function render() { const time = performance.now() * 0.0002; - const torus = scene.children[ 0 ]; + const torus = scene.getObjectByName( 'torus' ); torus.rotation.x = time * 2; torus.rotation.y = time * 5; -- GitLab