three-stdlib 2.28.11 → 2.28.12
Sign up to get free protection for your applications and to get access to all the features.
- package/controls/ArcballControls.cjs.map +1 -1
- package/controls/ArcballControls.js.map +1 -1
- package/controls/DeviceOrientationControls.cjs.map +1 -1
- package/controls/DeviceOrientationControls.js.map +1 -1
- package/controls/DragControls.cjs.map +1 -1
- package/controls/DragControls.js.map +1 -1
- package/controls/FlyControls.cjs +1 -1
- package/controls/FlyControls.cjs.map +1 -1
- package/controls/FlyControls.js +1 -1
- package/controls/FlyControls.js.map +1 -1
- package/controls/OrbitControls.cjs.map +1 -1
- package/controls/OrbitControls.js.map +1 -1
- package/controls/PointerLockControls.cjs.map +1 -1
- package/controls/PointerLockControls.js.map +1 -1
- package/controls/TrackballControls.cjs +0 -2
- package/controls/TrackballControls.cjs.map +1 -1
- package/controls/TrackballControls.js +0 -2
- package/controls/TrackballControls.js.map +1 -1
- package/controls/TransformControls.cjs +2 -2
- package/controls/TransformControls.cjs.map +1 -1
- package/controls/TransformControls.js +2 -2
- package/controls/TransformControls.js.map +1 -1
- package/controls/experimental/CameraControls.cjs.map +1 -1
- package/controls/experimental/CameraControls.js.map +1 -1
- package/loaders/FontLoader.cjs.map +1 -1
- package/loaders/FontLoader.js.map +1 -1
- package/loaders/HDRCubeTextureLoader.cjs +3 -1
- package/loaders/HDRCubeTextureLoader.cjs.map +1 -1
- package/loaders/HDRCubeTextureLoader.d.ts +1 -1
- package/loaders/HDRCubeTextureLoader.js +3 -1
- package/loaders/HDRCubeTextureLoader.js.map +1 -1
- package/modifiers/CurveModifier.cjs.map +1 -1
- package/modifiers/CurveModifier.js.map +1 -1
- package/modifiers/TessellateModifier.cjs.map +1 -1
- package/modifiers/TessellateModifier.js.map +1 -1
- package/package.json +1 -1
- package/postprocessing/BloomPass.cjs.map +1 -1
- package/postprocessing/BloomPass.d.ts +16 -3
- package/postprocessing/BloomPass.js.map +1 -1
- package/postprocessing/DotScreenPass.cjs.map +1 -1
- package/postprocessing/DotScreenPass.d.ts +3 -2
- package/postprocessing/DotScreenPass.js.map +1 -1
- package/postprocessing/FilmPass.cjs.map +1 -1
- package/postprocessing/FilmPass.d.ts +3 -2
- package/postprocessing/FilmPass.js.map +1 -1
- package/postprocessing/GlitchPass.cjs.map +1 -1
- package/postprocessing/GlitchPass.d.ts +3 -2
- package/postprocessing/GlitchPass.js.map +1 -1
- package/postprocessing/WaterPass.cjs +2 -2
- package/postprocessing/WaterPass.cjs.map +1 -1
- package/postprocessing/WaterPass.d.ts +7 -2
- package/postprocessing/WaterPass.js +3 -3
- package/postprocessing/WaterPass.js.map +1 -1
- package/webxr/OculusHandModel.cjs.map +1 -1
- package/webxr/OculusHandModel.js.map +1 -1
@@ -16,12 +16,12 @@ class WaterPass extends Pass.Pass {
|
|
16
16
|
__publicField(this, "factor");
|
17
17
|
__publicField(this, "time");
|
18
18
|
__publicField(this, "uniforms");
|
19
|
-
this.uniforms =
|
19
|
+
this.uniforms = {
|
20
20
|
tex: { value: null },
|
21
21
|
time: { value: 0 },
|
22
22
|
factor: { value: 0 },
|
23
23
|
resolution: { value: new THREE.Vector2(64, 64) }
|
24
|
-
}
|
24
|
+
};
|
25
25
|
this.material = new THREE.ShaderMaterial({
|
26
26
|
uniforms: this.uniforms,
|
27
27
|
vertexShader: `
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"WaterPass.cjs","sources":["../../src/postprocessing/WaterPass.ts"],"sourcesContent":["import { WebGLRenderer, WebGLRenderTarget, ShaderMaterial,
|
1
|
+
{"version":3,"file":"WaterPass.cjs","sources":["../../src/postprocessing/WaterPass.ts"],"sourcesContent":["import { WebGLRenderer, WebGLRenderTarget, ShaderMaterial, Vector2, IUniform, Texture } from 'three'\nimport { Pass, FullScreenQuad } from '../postprocessing/Pass'\n\n/**\n * Simple underwater shader\n * \n \n parameters:\n tex: texture\n time: this should increase with time passing\n factor: to what degree will the shader distort the screen \n\n explaination:\n the shader is quite simple\n it chooses a center and start from there make pixels around it to \"swell\" then \"shrink\" then \"swell\"...\n this is of course nothing really similar to underwater scene\n but you can combine several this shaders together to create the effect you need...\n And yes, this shader could be used for something other than underwater effect, for example, magnifier effect :)\n\n * @author vergil Wang\n */\n\nclass WaterPass extends Pass {\n public material: ShaderMaterial\n public fsQuad: FullScreenQuad\n public factor: number\n public time: number\n public uniforms: {\n tex: IUniform<Texture>\n time: IUniform<number>\n factor: IUniform<number>\n resolution: IUniform<Vector2>\n }\n\n constructor() {\n super()\n this.uniforms = {\n tex: { value: null! },\n time: { value: 0.0 },\n factor: { value: 0.0 },\n resolution: { value: new Vector2(64, 64) },\n }\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: `\n varying vec2 vUv;\n void main(){ \n vUv = uv; \n vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewPosition;\n }`,\n fragmentShader: `\n uniform float time;\n uniform float factor;\n uniform vec2 resolution;\n uniform sampler2D tex;\n varying vec2 vUv;\n void main() { \n vec2 uv1 = vUv;\n vec2 uv = gl_FragCoord.xy/resolution.xy;\n float frequency = 6.0 * factor;\n float amplitude = 0.015 * factor;\n float x = uv1.y * frequency + time * .7; \n float y = uv1.x * frequency + time * .3;\n uv1.x += cos(x+y) * amplitude * cos(y);\n uv1.y += sin(x-y) * amplitude * cos(y);\n vec4 rgba = texture2D(tex, uv1);\n gl_FragColor = rgba;\n }`,\n })\n this.fsQuad = new FullScreenQuad(this.material)\n this.factor = 0\n this.time = 0\n }\n\n public render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget): void {\n this.uniforms['tex'].value = readBuffer.texture\n this.uniforms['time'].value = this.time\n this.uniforms['factor'].value = this.factor\n if (this.renderToScreen) {\n renderer.setRenderTarget(null)\n this.fsQuad.render(renderer)\n } else {\n renderer.setRenderTarget(writeBuffer)\n if (this.clear) renderer.clear()\n this.fsQuad.render(renderer)\n }\n }\n}\n\nexport { WaterPass }\n"],"names":["Pass","Vector2","ShaderMaterial","FullScreenQuad"],"mappings":";;;;;;;;;;AAsBA,MAAM,kBAAkBA,KAAAA,KAAK;AAAA,EAY3B,cAAc;AACN;AAZD;AACA;AACA;AACA;AACA;AASL,SAAK,WAAW;AAAA,MACd,KAAK,EAAE,OAAO,KAAM;AAAA,MACpB,MAAM,EAAE,OAAO,EAAI;AAAA,MACnB,QAAQ,EAAE,OAAO,EAAI;AAAA,MACrB,YAAY,EAAE,OAAO,IAAIC,MAAQ,QAAA,IAAI,EAAE,EAAE;AAAA,IAAA;AAEtC,SAAA,WAAW,IAAIC,qBAAe;AAAA,MACjC,UAAU,KAAK;AAAA,MACf,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOd,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAkBjB;AACD,SAAK,SAAS,IAAIC,KAAe,eAAA,KAAK,QAAQ;AAC9C,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA,EAEO,OAAO,UAAyB,aAAgC,YAAqC;AAC1G,SAAK,SAAS,KAAK,EAAE,QAAQ,WAAW;AACxC,SAAK,SAAS,MAAM,EAAE,QAAQ,KAAK;AACnC,SAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK;AACrC,QAAI,KAAK,gBAAgB;AACvB,eAAS,gBAAgB,IAAI;AACxB,WAAA,OAAO,OAAO,QAAQ;AAAA,IAAA,OACtB;AACL,eAAS,gBAAgB,WAAW;AACpC,UAAI,KAAK;AAAO,iBAAS,MAAM;AAC1B,WAAA,OAAO,OAAO,QAAQ;AAAA,IAC7B;AAAA,EACF;AACF;;"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { WebGLRenderer, WebGLRenderTarget, ShaderMaterial } from 'three';
|
1
|
+
import { WebGLRenderer, WebGLRenderTarget, ShaderMaterial, Vector2, IUniform, Texture } from 'three';
|
2
2
|
import { Pass, FullScreenQuad } from '../postprocessing/Pass';
|
3
3
|
/**
|
4
4
|
* Simple underwater shader
|
@@ -23,7 +23,12 @@ declare class WaterPass extends Pass {
|
|
23
23
|
fsQuad: FullScreenQuad;
|
24
24
|
factor: number;
|
25
25
|
time: number;
|
26
|
-
uniforms:
|
26
|
+
uniforms: {
|
27
|
+
tex: IUniform<Texture>;
|
28
|
+
time: IUniform<number>;
|
29
|
+
factor: IUniform<number>;
|
30
|
+
resolution: IUniform<Vector2>;
|
31
|
+
};
|
27
32
|
constructor();
|
28
33
|
render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget): void;
|
29
34
|
}
|
@@ -4,7 +4,7 @@ var __publicField = (obj, key, value) => {
|
|
4
4
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
5
5
|
return value;
|
6
6
|
};
|
7
|
-
import {
|
7
|
+
import { Vector2, ShaderMaterial } from "three";
|
8
8
|
import { Pass, FullScreenQuad } from "./Pass.js";
|
9
9
|
class WaterPass extends Pass {
|
10
10
|
constructor() {
|
@@ -14,12 +14,12 @@ class WaterPass extends Pass {
|
|
14
14
|
__publicField(this, "factor");
|
15
15
|
__publicField(this, "time");
|
16
16
|
__publicField(this, "uniforms");
|
17
|
-
this.uniforms =
|
17
|
+
this.uniforms = {
|
18
18
|
tex: { value: null },
|
19
19
|
time: { value: 0 },
|
20
20
|
factor: { value: 0 },
|
21
21
|
resolution: { value: new Vector2(64, 64) }
|
22
|
-
}
|
22
|
+
};
|
23
23
|
this.material = new ShaderMaterial({
|
24
24
|
uniforms: this.uniforms,
|
25
25
|
vertexShader: `
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"WaterPass.js","sources":["../../src/postprocessing/WaterPass.ts"],"sourcesContent":["import { WebGLRenderer, WebGLRenderTarget, ShaderMaterial,
|
1
|
+
{"version":3,"file":"WaterPass.js","sources":["../../src/postprocessing/WaterPass.ts"],"sourcesContent":["import { WebGLRenderer, WebGLRenderTarget, ShaderMaterial, Vector2, IUniform, Texture } from 'three'\nimport { Pass, FullScreenQuad } from '../postprocessing/Pass'\n\n/**\n * Simple underwater shader\n * \n \n parameters:\n tex: texture\n time: this should increase with time passing\n factor: to what degree will the shader distort the screen \n\n explaination:\n the shader is quite simple\n it chooses a center and start from there make pixels around it to \"swell\" then \"shrink\" then \"swell\"...\n this is of course nothing really similar to underwater scene\n but you can combine several this shaders together to create the effect you need...\n And yes, this shader could be used for something other than underwater effect, for example, magnifier effect :)\n\n * @author vergil Wang\n */\n\nclass WaterPass extends Pass {\n public material: ShaderMaterial\n public fsQuad: FullScreenQuad\n public factor: number\n public time: number\n public uniforms: {\n tex: IUniform<Texture>\n time: IUniform<number>\n factor: IUniform<number>\n resolution: IUniform<Vector2>\n }\n\n constructor() {\n super()\n this.uniforms = {\n tex: { value: null! },\n time: { value: 0.0 },\n factor: { value: 0.0 },\n resolution: { value: new Vector2(64, 64) },\n }\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: `\n varying vec2 vUv;\n void main(){ \n vUv = uv; \n vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewPosition;\n }`,\n fragmentShader: `\n uniform float time;\n uniform float factor;\n uniform vec2 resolution;\n uniform sampler2D tex;\n varying vec2 vUv;\n void main() { \n vec2 uv1 = vUv;\n vec2 uv = gl_FragCoord.xy/resolution.xy;\n float frequency = 6.0 * factor;\n float amplitude = 0.015 * factor;\n float x = uv1.y * frequency + time * .7; \n float y = uv1.x * frequency + time * .3;\n uv1.x += cos(x+y) * amplitude * cos(y);\n uv1.y += sin(x-y) * amplitude * cos(y);\n vec4 rgba = texture2D(tex, uv1);\n gl_FragColor = rgba;\n }`,\n })\n this.fsQuad = new FullScreenQuad(this.material)\n this.factor = 0\n this.time = 0\n }\n\n public render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget): void {\n this.uniforms['tex'].value = readBuffer.texture\n this.uniforms['time'].value = this.time\n this.uniforms['factor'].value = this.factor\n if (this.renderToScreen) {\n renderer.setRenderTarget(null)\n this.fsQuad.render(renderer)\n } else {\n renderer.setRenderTarget(writeBuffer)\n if (this.clear) renderer.clear()\n this.fsQuad.render(renderer)\n }\n }\n}\n\nexport { WaterPass }\n"],"names":[],"mappings":";;;;;;;;AAsBA,MAAM,kBAAkB,KAAK;AAAA,EAY3B,cAAc;AACN;AAZD;AACA;AACA;AACA;AACA;AASL,SAAK,WAAW;AAAA,MACd,KAAK,EAAE,OAAO,KAAM;AAAA,MACpB,MAAM,EAAE,OAAO,EAAI;AAAA,MACnB,QAAQ,EAAE,OAAO,EAAI;AAAA,MACrB,YAAY,EAAE,OAAO,IAAI,QAAQ,IAAI,EAAE,EAAE;AAAA,IAAA;AAEtC,SAAA,WAAW,IAAI,eAAe;AAAA,MACjC,UAAU,KAAK;AAAA,MACf,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOd,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAkBjB;AACD,SAAK,SAAS,IAAI,eAAe,KAAK,QAAQ;AAC9C,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA,EAEO,OAAO,UAAyB,aAAgC,YAAqC;AAC1G,SAAK,SAAS,KAAK,EAAE,QAAQ,WAAW;AACxC,SAAK,SAAS,MAAM,EAAE,QAAQ,KAAK;AACnC,SAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK;AACrC,QAAI,KAAK,gBAAgB;AACvB,eAAS,gBAAgB,IAAI;AACxB,WAAA,OAAO,OAAO,QAAQ;AAAA,IAAA,OACtB;AACL,eAAS,gBAAgB,WAAW;AACpC,UAAI,KAAK;AAAO,iBAAS,MAAM;AAC1B,WAAA,OAAO,OAAO,QAAQ;AAAA,IAC7B;AAAA,EACF;AACF;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OculusHandModel.cjs","sources":["../../src/webxr/OculusHandModel.ts"],"sourcesContent":["import { Object3D, Sphere, Box3, Mesh, Texture, Vector3 } from 'three'\nimport { XRHandMeshModel } from './XRHandMeshModel'\n\nconst TOUCH_RADIUS = 0.01\nconst POINTING_JOINT = 'index-finger-tip'\n\nexport interface XRButton extends Object3D {\n onPress(): void\n onClear(): void\n isPressed(): boolean\n whilePressed(): void\n}\n\nclass OculusHandModel extends Object3D {\n controller: Object3D\n motionController: XRHandMeshModel | null\n envMap: Texture | null\n mesh: Mesh | null\n xrInputSource: XRInputSource | null\n\n constructor(controller: Object3D, leftModelPath?: string, rightModelPath?: string) {\n super()\n\n this.controller = controller\n this.motionController = null\n this.envMap = null\n\n this.mesh = null\n this.xrInputSource = null\n\n controller.addEventListener('connected', (event) => {\n const xrInputSource = event.data\n\n if (xrInputSource.hand && !this.motionController) {\n this.xrInputSource = xrInputSource\n\n this.motionController = new XRHandMeshModel(\n this,\n controller,\n undefined,\n xrInputSource.handedness,\n xrInputSource.handedness === 'left' ? leftModelPath : rightModelPath,\n )\n }\n })\n\n controller.addEventListener('disconnected', () => {\n this.dispose()\n })\n }\n\n updateMatrixWorld(force?: boolean): void {\n super.updateMatrixWorld(force)\n\n if (this.motionController) {\n this.motionController.updateMesh()\n }\n }\n\n getPointerPosition(): Vector3 | null {\n // @ts-ignore XRController needs to extend Group\n const indexFingerTip = this.controller.joints[POINTING_JOINT]\n if (indexFingerTip) {\n return indexFingerTip.position\n } else {\n return null\n }\n }\n\n intersectBoxObject(boxObject: Object3D): boolean {\n const pointerPosition = this.getPointerPosition()\n if (pointerPosition) {\n const indexSphere = new Sphere(pointerPosition, TOUCH_RADIUS)\n const box = new Box3().setFromObject(boxObject)\n return indexSphere.intersectsBox(box)\n } else {\n return false\n }\n }\n\n checkButton(button: XRButton): void {\n if (this.intersectBoxObject(button)) {\n button.onPress()\n } else {\n button.onClear()\n }\n\n if (button.isPressed()) {\n button.whilePressed()\n }\n }\n\n dispose(): void {\n this.clear()\n this.motionController = null\n }\n}\n\nexport { OculusHandModel }\n"],"names":["Object3D","XRHandMeshModel","Sphere","Box3"],"mappings":";;;;;;;;;;AAGA,MAAM,eAAe;AACrB,MAAM,iBAAiB;AASvB,MAAM,wBAAwBA,MAAAA,SAAS;AAAA,EAOrC,YAAY,YAAsB,eAAwB,gBAAyB;AAC3E;AAPR;AACA;AACA;AACA;AACA;AAKE,SAAK,aAAa;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AAEd,SAAK,OAAO;AACZ,SAAK,gBAAgB;AAEV,eAAA,iBAAiB,aAAa,CAAC,UAAU;AAClD,YAAM,
|
1
|
+
{"version":3,"file":"OculusHandModel.cjs","sources":["../../src/webxr/OculusHandModel.ts"],"sourcesContent":["import { Object3D, Sphere, Box3, Mesh, Texture, Vector3 } from 'three'\nimport { XRHandMeshModel } from './XRHandMeshModel'\n\nconst TOUCH_RADIUS = 0.01\nconst POINTING_JOINT = 'index-finger-tip'\n\nexport interface XRButton extends Object3D {\n onPress(): void\n onClear(): void\n isPressed(): boolean\n whilePressed(): void\n}\n\nclass OculusHandModel extends Object3D {\n controller: Object3D\n motionController: XRHandMeshModel | null\n envMap: Texture | null\n mesh: Mesh | null\n xrInputSource: XRInputSource | null\n\n constructor(controller: Object3D, leftModelPath?: string, rightModelPath?: string) {\n super()\n\n this.controller = controller\n this.motionController = null\n this.envMap = null\n\n this.mesh = null\n this.xrInputSource = null\n\n controller.addEventListener('connected', (event) => {\n const xrInputSource = (event as any).data\n\n if (xrInputSource.hand && !this.motionController) {\n this.xrInputSource = xrInputSource\n\n this.motionController = new XRHandMeshModel(\n this,\n controller,\n undefined,\n xrInputSource.handedness,\n xrInputSource.handedness === 'left' ? leftModelPath : rightModelPath,\n )\n }\n })\n\n controller.addEventListener('disconnected', () => {\n this.dispose()\n })\n }\n\n updateMatrixWorld(force?: boolean): void {\n super.updateMatrixWorld(force)\n\n if (this.motionController) {\n this.motionController.updateMesh()\n }\n }\n\n getPointerPosition(): Vector3 | null {\n // @ts-ignore XRController needs to extend Group\n const indexFingerTip = this.controller.joints[POINTING_JOINT]\n if (indexFingerTip) {\n return indexFingerTip.position\n } else {\n return null\n }\n }\n\n intersectBoxObject(boxObject: Object3D): boolean {\n const pointerPosition = this.getPointerPosition()\n if (pointerPosition) {\n const indexSphere = new Sphere(pointerPosition, TOUCH_RADIUS)\n const box = new Box3().setFromObject(boxObject)\n return indexSphere.intersectsBox(box)\n } else {\n return false\n }\n }\n\n checkButton(button: XRButton): void {\n if (this.intersectBoxObject(button)) {\n button.onPress()\n } else {\n button.onClear()\n }\n\n if (button.isPressed()) {\n button.whilePressed()\n }\n }\n\n dispose(): void {\n this.clear()\n this.motionController = null\n }\n}\n\nexport { OculusHandModel }\n"],"names":["Object3D","XRHandMeshModel","Sphere","Box3"],"mappings":";;;;;;;;;;AAGA,MAAM,eAAe;AACrB,MAAM,iBAAiB;AASvB,MAAM,wBAAwBA,MAAAA,SAAS;AAAA,EAOrC,YAAY,YAAsB,eAAwB,gBAAyB;AAC3E;AAPR;AACA;AACA;AACA;AACA;AAKE,SAAK,aAAa;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AAEd,SAAK,OAAO;AACZ,SAAK,gBAAgB;AAEV,eAAA,iBAAiB,aAAa,CAAC,UAAU;AAClD,YAAM,gBAAiB,MAAc;AAErC,UAAI,cAAc,QAAQ,CAAC,KAAK,kBAAkB;AAChD,aAAK,gBAAgB;AAErB,aAAK,mBAAmB,IAAIC,gBAAA;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA,UACd,cAAc,eAAe,SAAS,gBAAgB;AAAA,QAAA;AAAA,MAE1D;AAAA,IAAA,CACD;AAEU,eAAA,iBAAiB,gBAAgB,MAAM;AAChD,WAAK,QAAQ;AAAA,IAAA,CACd;AAAA,EACH;AAAA,EAEA,kBAAkB,OAAuB;AACvC,UAAM,kBAAkB,KAAK;AAE7B,QAAI,KAAK,kBAAkB;AACzB,WAAK,iBAAiB;IACxB;AAAA,EACF;AAAA,EAEA,qBAAqC;AAEnC,UAAM,iBAAiB,KAAK,WAAW,OAAO,cAAc;AAC5D,QAAI,gBAAgB;AAClB,aAAO,eAAe;AAAA,IAAA,OACjB;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,mBAAmB,WAA8B;AACzC,UAAA,kBAAkB,KAAK;AAC7B,QAAI,iBAAiB;AACnB,YAAM,cAAc,IAAIC,MAAAA,OAAO,iBAAiB,YAAY;AAC5D,YAAM,MAAM,IAAIC,MAAAA,KAAK,EAAE,cAAc,SAAS;AACvC,aAAA,YAAY,cAAc,GAAG;AAAA,IAAA,OAC/B;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,YAAY,QAAwB;AAC9B,QAAA,KAAK,mBAAmB,MAAM,GAAG;AACnC,aAAO,QAAQ;AAAA,IAAA,OACV;AACL,aAAO,QAAQ;AAAA,IACjB;AAEI,QAAA,OAAO,aAAa;AACtB,aAAO,aAAa;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,MAAM;AACX,SAAK,mBAAmB;AAAA,EAC1B;AACF;;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OculusHandModel.js","sources":["../../src/webxr/OculusHandModel.ts"],"sourcesContent":["import { Object3D, Sphere, Box3, Mesh, Texture, Vector3 } from 'three'\nimport { XRHandMeshModel } from './XRHandMeshModel'\n\nconst TOUCH_RADIUS = 0.01\nconst POINTING_JOINT = 'index-finger-tip'\n\nexport interface XRButton extends Object3D {\n onPress(): void\n onClear(): void\n isPressed(): boolean\n whilePressed(): void\n}\n\nclass OculusHandModel extends Object3D {\n controller: Object3D\n motionController: XRHandMeshModel | null\n envMap: Texture | null\n mesh: Mesh | null\n xrInputSource: XRInputSource | null\n\n constructor(controller: Object3D, leftModelPath?: string, rightModelPath?: string) {\n super()\n\n this.controller = controller\n this.motionController = null\n this.envMap = null\n\n this.mesh = null\n this.xrInputSource = null\n\n controller.addEventListener('connected', (event) => {\n const xrInputSource = event.data\n\n if (xrInputSource.hand && !this.motionController) {\n this.xrInputSource = xrInputSource\n\n this.motionController = new XRHandMeshModel(\n this,\n controller,\n undefined,\n xrInputSource.handedness,\n xrInputSource.handedness === 'left' ? leftModelPath : rightModelPath,\n )\n }\n })\n\n controller.addEventListener('disconnected', () => {\n this.dispose()\n })\n }\n\n updateMatrixWorld(force?: boolean): void {\n super.updateMatrixWorld(force)\n\n if (this.motionController) {\n this.motionController.updateMesh()\n }\n }\n\n getPointerPosition(): Vector3 | null {\n // @ts-ignore XRController needs to extend Group\n const indexFingerTip = this.controller.joints[POINTING_JOINT]\n if (indexFingerTip) {\n return indexFingerTip.position\n } else {\n return null\n }\n }\n\n intersectBoxObject(boxObject: Object3D): boolean {\n const pointerPosition = this.getPointerPosition()\n if (pointerPosition) {\n const indexSphere = new Sphere(pointerPosition, TOUCH_RADIUS)\n const box = new Box3().setFromObject(boxObject)\n return indexSphere.intersectsBox(box)\n } else {\n return false\n }\n }\n\n checkButton(button: XRButton): void {\n if (this.intersectBoxObject(button)) {\n button.onPress()\n } else {\n button.onClear()\n }\n\n if (button.isPressed()) {\n button.whilePressed()\n }\n }\n\n dispose(): void {\n this.clear()\n this.motionController = null\n }\n}\n\nexport { OculusHandModel }\n"],"names":[],"mappings":";;;;;;;;AAGA,MAAM,eAAe;AACrB,MAAM,iBAAiB;AASvB,MAAM,wBAAwB,SAAS;AAAA,EAOrC,YAAY,YAAsB,eAAwB,gBAAyB;AAC3E;AAPR;AACA;AACA;AACA;AACA;AAKE,SAAK,aAAa;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AAEd,SAAK,OAAO;AACZ,SAAK,gBAAgB;AAEV,eAAA,iBAAiB,aAAa,CAAC,UAAU;AAClD,YAAM,
|
1
|
+
{"version":3,"file":"OculusHandModel.js","sources":["../../src/webxr/OculusHandModel.ts"],"sourcesContent":["import { Object3D, Sphere, Box3, Mesh, Texture, Vector3 } from 'three'\nimport { XRHandMeshModel } from './XRHandMeshModel'\n\nconst TOUCH_RADIUS = 0.01\nconst POINTING_JOINT = 'index-finger-tip'\n\nexport interface XRButton extends Object3D {\n onPress(): void\n onClear(): void\n isPressed(): boolean\n whilePressed(): void\n}\n\nclass OculusHandModel extends Object3D {\n controller: Object3D\n motionController: XRHandMeshModel | null\n envMap: Texture | null\n mesh: Mesh | null\n xrInputSource: XRInputSource | null\n\n constructor(controller: Object3D, leftModelPath?: string, rightModelPath?: string) {\n super()\n\n this.controller = controller\n this.motionController = null\n this.envMap = null\n\n this.mesh = null\n this.xrInputSource = null\n\n controller.addEventListener('connected', (event) => {\n const xrInputSource = (event as any).data\n\n if (xrInputSource.hand && !this.motionController) {\n this.xrInputSource = xrInputSource\n\n this.motionController = new XRHandMeshModel(\n this,\n controller,\n undefined,\n xrInputSource.handedness,\n xrInputSource.handedness === 'left' ? leftModelPath : rightModelPath,\n )\n }\n })\n\n controller.addEventListener('disconnected', () => {\n this.dispose()\n })\n }\n\n updateMatrixWorld(force?: boolean): void {\n super.updateMatrixWorld(force)\n\n if (this.motionController) {\n this.motionController.updateMesh()\n }\n }\n\n getPointerPosition(): Vector3 | null {\n // @ts-ignore XRController needs to extend Group\n const indexFingerTip = this.controller.joints[POINTING_JOINT]\n if (indexFingerTip) {\n return indexFingerTip.position\n } else {\n return null\n }\n }\n\n intersectBoxObject(boxObject: Object3D): boolean {\n const pointerPosition = this.getPointerPosition()\n if (pointerPosition) {\n const indexSphere = new Sphere(pointerPosition, TOUCH_RADIUS)\n const box = new Box3().setFromObject(boxObject)\n return indexSphere.intersectsBox(box)\n } else {\n return false\n }\n }\n\n checkButton(button: XRButton): void {\n if (this.intersectBoxObject(button)) {\n button.onPress()\n } else {\n button.onClear()\n }\n\n if (button.isPressed()) {\n button.whilePressed()\n }\n }\n\n dispose(): void {\n this.clear()\n this.motionController = null\n }\n}\n\nexport { OculusHandModel }\n"],"names":[],"mappings":";;;;;;;;AAGA,MAAM,eAAe;AACrB,MAAM,iBAAiB;AASvB,MAAM,wBAAwB,SAAS;AAAA,EAOrC,YAAY,YAAsB,eAAwB,gBAAyB;AAC3E;AAPR;AACA;AACA;AACA;AACA;AAKE,SAAK,aAAa;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AAEd,SAAK,OAAO;AACZ,SAAK,gBAAgB;AAEV,eAAA,iBAAiB,aAAa,CAAC,UAAU;AAClD,YAAM,gBAAiB,MAAc;AAErC,UAAI,cAAc,QAAQ,CAAC,KAAK,kBAAkB;AAChD,aAAK,gBAAgB;AAErB,aAAK,mBAAmB,IAAI;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA,UACd,cAAc,eAAe,SAAS,gBAAgB;AAAA,QAAA;AAAA,MAE1D;AAAA,IAAA,CACD;AAEU,eAAA,iBAAiB,gBAAgB,MAAM;AAChD,WAAK,QAAQ;AAAA,IAAA,CACd;AAAA,EACH;AAAA,EAEA,kBAAkB,OAAuB;AACvC,UAAM,kBAAkB,KAAK;AAE7B,QAAI,KAAK,kBAAkB;AACzB,WAAK,iBAAiB;IACxB;AAAA,EACF;AAAA,EAEA,qBAAqC;AAEnC,UAAM,iBAAiB,KAAK,WAAW,OAAO,cAAc;AAC5D,QAAI,gBAAgB;AAClB,aAAO,eAAe;AAAA,IAAA,OACjB;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,mBAAmB,WAA8B;AACzC,UAAA,kBAAkB,KAAK;AAC7B,QAAI,iBAAiB;AACnB,YAAM,cAAc,IAAI,OAAO,iBAAiB,YAAY;AAC5D,YAAM,MAAM,IAAI,KAAK,EAAE,cAAc,SAAS;AACvC,aAAA,YAAY,cAAc,GAAG;AAAA,IAAA,OAC/B;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,YAAY,QAAwB;AAC9B,QAAA,KAAK,mBAAmB,MAAM,GAAG;AACnC,aAAO,QAAQ;AAAA,IAAA,OACV;AACL,aAAO,QAAQ;AAAA,IACjB;AAEI,QAAA,OAAO,aAAa;AACtB,aAAO,aAAa;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,MAAM;AACX,SAAK,mBAAmB;AAAA,EAC1B;AACF;"}
|