1
0
mirror of https://github.com/troisjs/trois.git synced 2024-11-24 04:12:02 +08:00
trois/build/trois.module.cdn.min.js.map
Kevin Levron ce00e726f2 0.1.9
2021-03-05 09:17:16 +01:00

1 line
137 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"trois.module.cdn.min.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/use/useBindProp.js","../src/core/OrthographicCamera.js","../src/core/PerspectiveCamera.js","../src/core/Group.js","../src/core/Scene.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/CircleGeometry.js","../src/geometries/ConeGeometry.js","../src/geometries/CylinderGeometry.js","../src/geometries/DodecahedronGeometry.js","../src/geometries/IcosahedronGeometry.js","../src/geometries/LatheGeometry.js","../src/geometries/OctahedronGeometry.js","../src/geometries/PolyhedronGeometry.js","../src/geometries/RingGeometry.js","../src/geometries/SphereGeometry.js","../src/geometries/TetrahedronGeometry.js","../src/geometries/TorusGeometry.js","../src/geometries/TorusKnotGeometry.js","../src/geometries/TubeGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.js","../src/lights/DirectionalLight.js","../src/lights/PointLight.js","../src/lights/SpotLight.js","../src/materials/Material.js","../src/materials/BasicMaterial.js","../src/materials/LambertMaterial.js","../src/materials/MatcapMaterial.js","../src/materials/PhongMaterial.js","../src/materials/StandardMaterial.js","../src/materials/PhysicalMaterial.js","../src/materials/SubsurfaceScatteringShader.js","../src/materials/SubSurfaceMaterial.js","../src/materials/ShaderMaterial.js","../src/materials/ToonMaterial.js","../src/materials/Texture.js","../src/materials/CubeTexture.js","../src/meshes/Mesh.js","../src/meshes/Box.js","../src/meshes/Circle.js","../src/meshes/Cone.js","../src/meshes/Cylinder.js","../src/meshes/Dodecahedron.js","../src/meshes/Icosahedron.js","../src/meshes/Lathe.js","../src/meshes/Octahedron.js","../src/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.js","../src/meshes/TextProps.js","../src/meshes/Text.js","../src/meshes/Torus.js","../src/meshes/TorusKnot.js","../src/meshes/Tube.js","../src/meshes/Gem.js","../src/meshes/Image.js","../src/meshes/InstancedMesh.js","../src/meshes/MirrorMesh.js","../src/meshes/RefractionMesh.js","../src/meshes/Sprite.js","../src/effects/EffectComposer.js","../src/effects/EffectPass.js","../src/effects/RenderPass.js","../src/effects/BokehPass.js","../src/effects/FilmPass.js","../src/effects/FXAAPass.js","../src/effects/HalftonePass.js","../src/effects/SMAAPass.js","../src/shaders/default.js","../src/shaders/TiltShift.js","../src/use/useBindPropValue.js","../src/effects/TiltShiftPass.js","../src/effects/UnrealBloomPass.js","../src/shaders/ZoomBlur.js","../src/effects/ZoomBlurPass.js","../src/plugin.js"],"sourcesContent":["import {\n Plane,\n Raycaster,\n Vector2,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\n/**\n * Three.js helper\n */\nexport default function useThree() {\n // default conf\n const conf = {\n canvas: null,\n antialias: true,\n alpha: false,\n autoClear: true,\n orbit_ctrl: false,\n mouse_move: false,\n mouse_raycast: false,\n mouse_over: false,\n click: false,\n resize: true,\n width: 0,\n height: 0,\n };\n\n // size\n const size = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n };\n\n // handlers\n const afterInitCallbacks = [];\n let afterResizeCallbacks = [];\n let beforeRenderCallbacks = [];\n\n // mouse tracking\n const mouse = new Vector2();\n const mouseV3 = new Vector3();\n const mousePlane = new Plane(new Vector3(0, 0, 1), 0);\n const raycaster = new Raycaster();\n\n // raycast objects\n const intersectObjects = [];\n\n // returned object\n const obj = {\n conf,\n renderer: null,\n camera: null,\n cameraCtrl: null,\n materials: {},\n scene: null,\n size,\n mouse, mouseV3,\n init,\n dispose,\n render,\n renderC,\n setSize,\n onAfterInit,\n onAfterResize, offAfterResize,\n onBeforeRender, offBeforeRender,\n addIntersectObject, removeIntersectObject,\n };\n\n /**\n * init three\n */\n function init(params) {\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n conf[key] = value;\n });\n }\n\n if (!obj.scene) {\n console.error('Missing Scene');\n return;\n }\n\n if (!obj.camera) {\n console.error('Missing Camera');\n return;\n }\n\n obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha });\n obj.renderer.autoClear = conf.autoClear;\n\n if (conf.orbit_ctrl) {\n obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement);\n if (conf.orbit_ctrl instanceof Object) {\n Object.entries(conf.orbit_ctrl).forEach(([key, value]) => {\n obj.orbitCtrl[key] = value;\n });\n }\n }\n\n if (conf.resize) {\n onResize();\n window.addEventListener('resize', onResize);\n } else {\n setSize(conf.width | 300, conf.height | 150);\n }\n\n conf.mouse_move = conf.mouse_move || conf.mouse_over;\n if (conf.mouse_move) {\n if (conf.mouse_move === 'body') {\n obj.mouse_move_element = document.body;\n } else {\n obj.mouse_move_element = obj.renderer.domElement;\n }\n obj.mouse_move_element.addEventListener('mousemove', onMousemove);\n obj.mouse_move_element.addEventListener('mouseleave', onMouseleave);\n }\n\n if (conf.click) {\n obj.renderer.domElement.addEventListener('click', onClick);\n }\n\n afterInitCallbacks.forEach(c => c());\n\n return true;\n };\n\n /**\n * add after init callback\n */\n function onAfterInit(callback) {\n afterInitCallbacks.push(callback);\n }\n\n /**\n * add after resize callback\n */\n function onAfterResize(callback) {\n afterResizeCallbacks.push(callback);\n }\n\n /**\n * remove after resize callback\n */\n function offAfterResize(callback) {\n afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback);\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(callback) {\n beforeRenderCallbacks.push(callback);\n }\n\n /**\n * remove before render callback\n */\n function offBeforeRender(callback) {\n beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback);\n }\n\n /**\n * default render\n */\n function render() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.renderer.render(obj.scene, obj.camera);\n }\n\n /**\n * composer render\n */\n function renderC() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.composer.render();\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o);\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o) {\n const i = intersectObjects.indexOf(o);\n if (i !== -1) {\n intersectObjects.splice(i, 1);\n }\n }\n\n /**\n * remove listeners\n */\n function dispose() {\n beforeRenderCallbacks = [];\n window.removeEventListener('resize', onResize);\n if (obj.mouse_move_element) {\n obj.mouse_move_element.removeEventListener('mousemove', onMousemove);\n obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave);\n }\n obj.renderer.domElement.removeEventListener('click', onClick);\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\n this.renderer.dispose();\n }\n\n /**\n */\n function updateMouse(e) {\n const rect = e.target.getBoundingClientRect();\n mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1;\n mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1;\n }\n\n /**\n * click listener\n */\n function onClick(e) {\n updateMouse(e);\n raycaster.setFromCamera(mouse, obj.camera);\n const objects = raycaster.intersectObjects(intersectObjects);\n for (let i = 0; i < objects.length; i++) {\n const o = objects[i].object;\n if (o.onClick) o.onClick(e);\n }\n }\n\n /**\n * mousemove listener\n */\n function onMousemove(e) {\n updateMouse(e);\n onMousechange(e);\n }\n\n /**\n * mouseleave listener\n */\n function onMouseleave(e) {\n // mouse.x = 0;\n // mouse.y = 0;\n onMousechange(e);\n }\n\n /**\n * mouse change\n */\n function onMousechange(e) {\n if (conf.mouse_over || conf.mouse_raycast) {\n raycaster.setFromCamera(mouse, obj.camera);\n\n if (conf.mouse_raycast) {\n // get mouse 3d position\n obj.camera.getWorldDirection(mousePlane.normal);\n mousePlane.normal.normalize();\n raycaster.ray.intersectPlane(mousePlane, mouseV3);\n }\n\n if (conf.mouse_over) {\n const onObjects = raycaster.intersectObjects(intersectObjects);\n const offObjects = [...intersectObjects];\n for (let i = 0; i < onObjects.length; i++) {\n const o = onObjects[i].object;\n if (!o.hover && o.onHover) {\n o.hover = true;\n o.onHover(true);\n }\n offObjects.splice(offObjects.indexOf(o), 1);\n }\n for (let i = 0; i < offObjects.length; i++) {\n const o = offObjects[i];\n if (o.hover && o.onHover) {\n o.hover = false;\n o.onHover(false);\n }\n }\n }\n }\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (conf.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight);\n } else {\n const elt = obj.renderer.domElement.parentNode;\n setSize(elt.clientWidth, elt.clientHeight);\n }\n afterResizeCallbacks.forEach(c => c());\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width, height) {\n size.width = width;\n size.height = height;\n size.ratio = width / height;\n\n obj.renderer.setSize(width, height, false);\n obj.camera.aspect = size.ratio;\n obj.camera.updateProjectionMatrix();\n\n if (obj.composer) {\n obj.composer.setSize(width, height);\n }\n\n if (obj.camera.type === 'OrthographicCamera') {\n size.wWidth = obj.camera.right - obj.camera.left;\n size.wHeight = obj.camera.top - obj.camera.bottom;\n } else {\n const wsize = getCameraSize();\n size.wWidth = wsize[0]; size.wHeight = wsize[1];\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const vFOV = (obj.camera.fov * Math.PI) / 180;\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z);\n const w = h * obj.camera.aspect;\n return [w, h];\n }\n\n return obj;\n}\n","import { h } from 'vue';\nimport useThree from './useThree';\n\nexport default {\n props: {\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n mouseMove: { type: [Boolean, String], default: false },\n mouseRaycast: { type: Boolean, default: false },\n mouseOver: { type: Boolean, default: false },\n click: { type: Boolean, default: false },\n orbitCtrl: { type: [Boolean, Object], default: false },\n resize: { type: [Boolean, String], default: false },\n shadow: Boolean,\n width: String,\n height: String,\n },\n setup() {\n return {\n three: useThree(),\n raf: true,\n onMountedCallbacks: [],\n };\n },\n provide() {\n return {\n three: this.three,\n // renderer: this.three.renderer,\n rendererComponent: this,\n };\n },\n mounted() {\n const params = {\n canvas: this.$el,\n antialias: this.antialias,\n alpha: this.alpha,\n autoClear: this.autoClear,\n orbit_ctrl: this.orbitCtrl,\n mouse_move: this.mouseMove,\n mouse_raycast: this.mouseRaycast,\n mouse_over: this.mouseOver,\n click: this.click,\n resize: this.resize,\n width: this.width,\n height: this.height,\n };\n\n if (this.three.init(params)) {\n this.three.renderer.shadowMap.enabled = this.shadow;\n if (this.three.composer) this.animateC();\n else this.animate();\n };\n\n this.onMountedCallbacks.forEach(c => c());\n },\n beforeUnmount() {\n this.raf = false;\n this.three.dispose();\n },\n methods: {\n onMounted(callback) {\n this.onMountedCallbacks.push(callback);\n },\n onBeforeRender(callback) {\n this.three.onBeforeRender(callback);\n },\n onAfterResize(callback) {\n this.three.onAfterResize(callback);\n },\n animate() {\n if (this.raf) requestAnimationFrame(this.animate);\n this.three.render();\n },\n animateC() {\n if (this.raf) requestAnimationFrame(this.animateC);\n this.three.renderC();\n },\n },\n render() {\n return h('canvas', {}, this.$slots.default());\n },\n};\n","export function setFromProp(o, prop) {\n if (prop instanceof Object) {\n Object.entries(prop).forEach(([key, value]) => {\n o[key] = value;\n });\n }\n};\n\nexport function propsValues(props, exclude) {\n const values = {};\n Object.entries(props).forEach(([key, value]) => {\n if (!exclude || (exclude && !exclude.includes(key))) {\n values[key] = value;\n }\n });\n return values;\n};\n\nexport function lerp(value1, value2, amount) {\n amount = amount < 0 ? 0 : amount;\n amount = amount > 1 ? 1 : amount;\n return value1 + (value2 - value1) * amount;\n};\n\nexport function lerpv2(v1, v2, amount) {\n v1.x = lerp(v1.x, v2.x, amount);\n v1.y = lerp(v1.y, v2.y, amount);\n};\n\nexport function lerpv3(v1, v2, amount) {\n v1.x = lerp(v1.x, v2.x, amount);\n v1.y = lerp(v1.y, v2.y, amount);\n v1.z = lerp(v1.z, v2.z, amount);\n};\n\nexport function limit(val, min, max) {\n return val < min ? min : (val > max ? max : val);\n};\n\n// from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';\n\nexport function getMatcapUrl(hash, format = 1024) {\n const fileName = `${hash}${getMatcapFormatString(format)}.png`;\n return `${MATCAP_ROOT}/${format}/${fileName}`;\n};\n\nfunction getMatcapFormatString(format) {\n switch (format) {\n case 64:\n return '-64px';\n case 128:\n return '-128px';\n case 256:\n return '-256px';\n case 512:\n return '-512px';\n default:\n return '';\n }\n}\n","import { toRef, watch } from 'vue';\nimport { setFromProp } from '../tools.js';\n\nexport default function useBindProp(comp, prop, object) {\n if (comp[prop]) {\n const ref = toRef(comp, prop);\n setFromProp(object, ref.value);\n watch(ref, () => {\n setFromProp(object, ref.value);\n }, { deep: true });\n }\n};\n","import { OrthographicCamera, Vector3 } from 'three';\nimport { watch } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: ['three'],\n props: {\n left: { type: Number, default: -1 },\n right: { type: Number, default: 1 },\n top: { type: Number, default: 1 },\n bottom: { type: Number, default: -1 },\n near: { type: Number, default: 0.1 },\n far: { type: Number, default: 2000 },\n zoom: { type: Number, default: 1 },\n position: { type: [Object, Vector3], default: { x: 0, y: 0, z: 0 } },\n },\n created() {\n this.camera = new OrthographicCamera(this.left, this.right, this.top, this.bottom, this.near, this.far);\n useBindProp(this, 'position', this.camera.position);\n\n ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => {\n watch(() => this[p], () => {\n this.camera[p] = this[p];\n this.camera.updateProjectionMatrix();\n });\n });\n\n this.three.camera = this.camera;\n },\n render() {\n return [];\n },\n __hmrId: 'OrthographicCamera',\n};\n","import { PerspectiveCamera, Vector3 } from 'three';\nimport { watch } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: ['three'],\n props: {\n aspect: { type: Number, default: 1 },\n far: { type: Number, default: 2000 },\n fov: { type: Number, default: 50 },\n near: { type: Number, default: 0.1 },\n position: { type: [Object, Vector3], default: { x: 0, y: 0, z: 0 } },\n lookAt: { type: [Object, Vector3], default: null },\n },\n created() {\n this.camera = new PerspectiveCamera(this.fov, this.aspect, this.near, this.far);\n useBindProp(this, 'position', this.camera.position);\n\n if (this.lookAt) this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z);\n watch(() => this.lookAt, (v) => { this.camera.lookAt(v.x, v.y, v.z); }, { deep: true });\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n watch(() => this[p], () => {\n this.camera[p] = this[p];\n this.camera.updateProjectionMatrix();\n });\n });\n\n // this.camera.updateProjectionMatrix();\n this.three.camera = this.camera;\n },\n render() {\n return [];\n },\n __hmrId: 'PerspectiveCamera',\n};\n","import { Group } from 'three';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n inject: {\r\n three: 'three',\r\n scene: 'scene',\r\n group: { default: null },\r\n },\r\n props: {\r\n position: Object,\r\n rotation: Object,\r\n scale: Object,\r\n },\r\n provide() {\r\n return {\r\n group: this.group,\r\n };\r\n },\r\n created() {\r\n this.parent = this.group ? this.group : this.scene;\r\n\r\n this.group = new Group();\r\n useBindProp(this, 'position', this.group.position);\r\n useBindProp(this, 'rotation', this.group.rotation);\r\n useBindProp(this, 'scale', this.group.scale);\r\n\r\n this.parent.add(this.group);\r\n },\r\n unmounted() {\r\n this.parent.remove(this.group);\r\n },\r\n render() {\r\n if (this.$slots.default) {\r\n return this.$slots.default();\r\n }\r\n return [];\r\n },\r\n __hmrId: 'Group',\r\n};\r\n","import { Scene, Color } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['three'],\n props: {\n id: String,\n background: [String, Number],\n },\n setup(props) {\n const scene = new Scene();\n if (props.background) scene.background = new Color(props.background);\n watch(() => props.background, (value) => { scene.background = new Color(value); });\n return { scene };\n },\n provide() {\n return {\n scene: this.scene,\n };\n },\n mounted() {\n if (!this.three.scene) {\n this.three.scene = this.scene;\n }\n },\n methods: {\n // add(o) {\n // this.scene.add(o);\n // },\n // remove(o) {\n // this.scene.remove(o);\n // },\n },\n render() {\n if (this.$slots.default) {\n return this.$slots.default();\n }\n return [];\n },\n};\n","import { watch } from 'vue';\n\nexport default {\n emits: ['ready'],\n inject: ['mesh'],\n props: {\n rotateX: Number,\n rotateY: Number,\n rotateZ: Number,\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh');\n }\n this.watchProps = [];\n Object.entries(this.$props).forEach(e => this.watchProps.push(e[0]));\n },\n beforeMount() {\n this.createGeometry();\n this.rotateGeometry();\n this.mesh.setGeometry(this.geometry);\n },\n mounted() {\n this.addWatchers();\n },\n unmounted() {\n this.geometry.dispose();\n },\n methods: {\n rotateGeometry() {\n if (this.rotateX) this.geometry.rotateX(this.rotateX);\n if (this.rotateY) this.geometry.rotateY(this.rotateY);\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ);\n },\n addWatchers() {\n this.watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n refreshGeometry() {\n const oldGeo = this.geometry;\n this.createGeometry();\n this.rotateGeometry();\n this.mesh.setGeometry(this.geometry);\n oldGeo.dispose();\n },\n },\n render() {\n return [];\n },\n};\n","import { BoxBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n methods: {\n createGeometry() {\n let w = this.width, h = this.height, d = this.depth;\n if (this.size) {\n w = this.size; h = this.size; d = this.size;\n }\n this.geometry = new BoxBufferGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments);\n },\n },\n};\n","import { CircleBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { ConeBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { CylinderBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { LatheBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n};\n","import { RingBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { SphereBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n};\n","import { TetrahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 64 },\n tubularSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.p, this.q);\n },\n },\n};\n","import { Curve, TubeBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radiusSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeBufferGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed);\n },\n },\n};\n","import { Color } from 'three';\nimport { watch } from 'vue';\nimport { setFromProp } from '../tools.js';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: {\n scene: 'scene',\n group: { default: null },\n },\n props: {\n color: {\n type: String,\n default: '#ffffff',\n },\n intensity: {\n type: Number,\n default: 1,\n },\n castShadow: {\n type: Boolean,\n default: false,\n },\n shadowMapSize: Object,\n position: Object,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n created() {\n this.parent = this.group ? this.group : this.scene;\n },\n mounted() {\n useBindProp(this, 'position', this.light.position);\n\n if (this.light.target) {\n useBindProp(this, 'target', this.light.target.position);\n }\n\n if (this.light.shadow) {\n this.light.castShadow = this.castShadow;\n setFromProp(this.light.shadow.mapSize, this.shadowMapSize);\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n watch(() => this[p], () => {\n if (p === 'color') {\n this.light.color = new Color(this.color);\n } else {\n this.light[p] = this[p];\n }\n });\n });\n\n this.parent.add(this.light);\n if (this.light.target) this.parent.add(this.light.target);\n },\n unmounted() {\n this.parent.remove(this.light);\n if (this.light.target) this.parent.remove(this.light.target);\n },\n render() {\n return [];\n },\n __hmrId: 'Light',\n};\n","import { AmbientLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n created() {\n this.light = new AmbientLight(this.color, this.intensity);\n },\n __hmrId: 'AmbientLight',\n};\n","import { DirectionalLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n target: Object,\n },\n created() {\n this.light = new DirectionalLight(this.color, this.intensity);\n },\n __hmrId: 'DirectionalLight',\n};\n","import { PointLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n distance: {\n type: Number,\n default: 0,\n },\n decay: {\n type: Number,\n default: 1,\n },\n },\n created() {\n this.light = new PointLight(this.color, this.intensity, this.distance, this.decay);\n },\n __hmrId: 'PointLight',\n};\n","import { SpotLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n angle: {\n type: Number,\n default: Math.PI / 3,\n },\n decay: {\n type: Number,\n default: 1,\n },\n distance: {\n type: Number,\n default: 0,\n },\n penumbra: {\n type: Number,\n default: 0,\n },\n target: Object,\n },\n created() {\n this.light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay);\n ['angle', 'decay', 'distance', 'penumbra'].forEach(p => {\n watch(() => this[p], () => {\n this.light[p] = this[p];\n });\n });\n },\n __hmrId: 'SpotLight',\n};\n","import { watch } from 'vue';\nimport { FrontSide } from 'three';\n\nexport default {\n inject: ['three', 'mesh'],\n props: {\n id: String,\n color: { type: [String, Number], default: '#ffffff' },\n depthTest: { type: Boolean, default: true },\n depthWrite: { type: Boolean, default: true },\n flatShading: Boolean,\n fog: { type: Boolean, default: true },\n opacity: { type: Number, default: 1 },\n side: { type: Number, default: FrontSide },\n transparent: Boolean,\n vertexColors: Boolean,\n },\n provide() {\n return {\n material: this,\n };\n },\n beforeMount() {\n this.createMaterial();\n if (this.id) this.three.materials[this.id] = this.material;\n this.mesh.setMaterial(this.material);\n },\n mounted() {\n this._addWatchers();\n if (this.addWatchers) this.addWatchers();\n },\n unmounted() {\n this.material.dispose();\n if (this.id) delete this.three.materials[this.id];\n },\n methods: {\n setProp(key, value, needsUpdate = false) {\n this.material[key] = value;\n this.material.needsUpdate = needsUpdate;\n },\n setTexture(texture, key = 'map') {\n this.setProp(key, texture, true);\n },\n _addWatchers() {\n // don't work for flatShading\n ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(p => {\n watch(() => this[p], () => {\n if (p === 'color') {\n this.material.color.set(this.color);\n } else {\n this.material[p] = this[p];\n }\n });\n });\n },\n },\n render() {\n if (this.$slots.default) {\n return this.$slots.default();\n }\n return [];\n },\n __hmrId: 'Material',\n};\n","import { MeshBasicMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n methods: {\n createMaterial() {\n this.material = new MeshBasicMaterial(propsValues(this.$props, ['id']));\n },\n },\n __hmrId: 'BasicMaterial',\n};\n","import { MeshLambertMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n methods: {\n createMaterial() {\n this.material = new MeshLambertMaterial(propsValues(this.$props, ['id']));\n },\n },\n __hmrId: 'LambertMaterial',\n};\n","import { MeshMatcapMaterial, TextureLoader } from 'three';\n// import { watch } from 'vue';\nimport { propsValues, getMatcapUrl } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n props: {\n src: String,\n name: String,\n },\n methods: {\n createMaterial() {\n const src = this.name ? getMatcapUrl(this.name) : this.src;\n const opts = propsValues(this.$props, ['id', 'src', 'name']);\n opts.matcap = new TextureLoader().load(src);\n this.material = new MeshMatcapMaterial(opts);\n },\n },\n __hmrId: 'MatcapMaterial',\n};\n","import { MeshPhongMaterial } from 'three';\nimport { watch } from 'vue';\nimport { propsValues } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n props: {\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n reflectivity: { type: Number, default: 1 },\n shininess: { type: Number, default: 30 },\n specular: { type: [String, Number], default: 0x111111 },\n },\n methods: {\n createMaterial() {\n this.material = new MeshPhongMaterial(propsValues(this.$props, ['id']));\n },\n addWatchers() {\n ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(p => {\n watch(() => this[p], (value) => {\n if (p === 'emissive' || p === 'specular') {\n this.material[p].set(value);\n } else {\n this.material[p] = value;\n }\n });\n });\n },\n },\n __hmrId: 'PhongMaterial',\n};\n","import { MeshStandardMaterial, Vector2 } from 'three';\nimport { watch } from 'vue';\nimport { propsValues } from '../tools.js';\nimport useBindProp from '../use/useBindProp.js';\nimport Material from './Material';\n\nconst props = {\n aoMapIntensity: { type: Number, default: 1 },\n bumpScale: { type: Number, default: 1 },\n displacementBias: { type: Number, default: 0 },\n displacementScale: { type: Number, default: 1 },\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n envMapIntensity: { type: Number, default: 1 },\n lightMapIntensity: { type: Number, default: 1 },\n metalness: { type: Number, default: 0 },\n normalScale: { type: Object, default: () => new Vector2(1, 1) },\n roughness: { type: Number, default: 1 },\n refractionRatio: { type: Number, default: 0.98 },\n wireframe: Boolean,\n};\n\nexport default {\n extends: Material,\n props,\n methods: {\n createMaterial() {\n this.material = new MeshStandardMaterial(propsValues(this.$props, ['id', 'normalScale']));\n },\n addWatchers() {\n // todo : use setProp ?\n Object.keys(props).forEach(p => {\n if (p === 'normalScale') return;\n watch(() => this[p], (value) => {\n if (p === 'emissive') {\n this.material[p].set(value);\n } else {\n this.material[p] = value;\n }\n });\n });\n useBindProp(this, 'normalScale', this.material.normalScale);\n },\n },\n __hmrId: 'StandardMaterial',\n};\n","import { MeshPhysicalMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport StandardMaterial from './StandardMaterial';\n\nexport default {\n extends: StandardMaterial,\n methods: {\n createMaterial() {\n this.material = new MeshPhysicalMaterial(propsValues(this.$props, ['id']));\n },\n },\n __hmrId: 'PhysicalMaterial',\n};\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three';\n\nfunction replaceAll(string, find, replace) {\n return string.split(find).join(replace);\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'));\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'));\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0x668597) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include <lights_fragment_begin>',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\nimport ShaderMaterial from './ShaderMaterial';\n\nexport default {\n extends: ShaderMaterial,\n props: {\n color: { type: String, default: '#ffffff' },\n thicknessColor: { type: String, default: '#ffffff' },\n thicknessDistortion: { type: Number, default: 0.4 },\n thicknessAmbient: { type: Number, default: 0.01 },\n thicknessAttenuation: { type: Number, default: 0.7 },\n thicknessPower: { type: Number, default: 2 },\n thicknessScale: { type: Number, default: 4 },\n transparent: { type: Boolean, default: false },\n opacity: { type: Number, default: 1 },\n vertexColors: { type: Boolean, default: false },\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader;\n const uniforms = UniformsUtils.clone(params.uniforms);\n\n Object.entries(this.$props).forEach(([key, value]) => {\n let _key = key, _value = value;\n if (['color', 'thicknessColor'].includes(key)) {\n if (key === 'color') _key = 'diffuse';\n _value = new Color(value);\n }\n if (!['id', 'transparent', 'vertexColors'].includes(key)) {\n uniforms[_key].value = _value;\n }\n });\n\n this.material = new TShaderMaterial({\n ...params,\n uniforms,\n lights: true,\n transparent: this.transparent,\n vertexColors: this.vertexColors,\n });\n },\n },\n __hmrId: 'SubSurfaceMaterial',\n};\n","export default {\n inject: ['three', 'mesh'],\n props: {\n id: String,\n uniforms: Object,\n vertexShader: String,\n fragmentShader: String,\n },\n beforeMount() {\n this.createMaterial();\n if (this.id) this.three.materials[this.id] = this.material;\n this.mesh.setMaterial(this.material);\n },\n mounted() {\n if (this.addWatchers) this.addWatchers();\n },\n unmounted() {\n this.material.dispose();\n if (this.id) delete this.three.materials[this.id];\n },\n render() {\n return [];\n },\n __hmrId: 'ShaderMaterial',\n};\n","import { MeshToonMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n methods: {\n createMaterial() {\n this.material = new MeshToonMaterial(propsValues(this.$props, ['id']));\n },\n },\n __hmrId: 'ToonMaterial',\n};\n","import { TextureLoader } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n src: String,\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n id: { type: String, default: 'map' },\n },\n created() {\n this.refreshTexture();\n watch(() => this.src, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() {\n return [];\n },\n};\n","import { CubeTextureLoader, CubeRefractionMapping } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n path: String,\n urls: {\n type: Array,\n default: ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n id: { type: String, default: 'envMap' },\n refraction: Boolean,\n // todo: remove ?\n refractionRatio: { type: Number, default: 0.98 },\n },\n created() {\n this.refreshTexture();\n watch(() => this.path, this.refreshTexture);\n watch(() => this.urls, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError);\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n if (this.refraction) {\n this.texture.mapping = CubeRefractionMapping;\n this.material.setProp('refractionRatio', this.refractionRatio);\n }\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() {\n return [];\n },\n};\n","import { Mesh } from 'three';\nimport { watch } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: {\n three: 'three',\n scene: 'scene',\n rendererComponent: 'rendererComponent',\n group: { default: null },\n },\n emits: ['ready'],\n props: {\n materialId: String,\n position: Object,\n rotation: Object,\n scale: Object,\n castShadow: Boolean,\n receiveShadow: Boolean,\n onHover: Function,\n onClick: Function,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n created() {\n this.parent = this.group ? this.group : this.scene;\n },\n provide() {\n return {\n mesh: this,\n };\n },\n mounted() {\n if (this.geometry && !this.mesh) this.initMesh();\n },\n unmounted() {\n if (this.mesh) {\n this.three.removeIntersectObject(this.mesh);\n this.parent.remove(this.mesh);\n }\n if (this.geometry) this.geometry.dispose();\n if (this.material && !this.materialId) this.material.dispose();\n },\n methods: {\n initMesh() {\n if (!this.material && this.materialId) {\n this.material = this.three.materials[this.materialId];\n }\n this.mesh = new Mesh(this.geometry, this.material);\n\n if (this.onHover) {\n this.mesh.onHover = (over) => { this.onHover({ component: this, over }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n if (this.onClick) {\n this.mesh.onClick = (e) => { this.onClick({ component: this, event: e }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n this.bindProps();\n this.parent.add(this.mesh);\n this.$emit('ready');\n },\n bindProps() {\n useBindProp(this, 'position', this.mesh.position);\n useBindProp(this, 'rotation', this.mesh.rotation);\n useBindProp(this, 'scale', this.mesh.scale);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n watch(() => this.materialId, () => {\n this.mesh.material = this.three.materials[this.materialId];\n });\n },\n setGeometry(geometry) {\n this.geometry = geometry;\n if (this.mesh) this.mesh.geometry = geometry;\n },\n setMaterial(material) {\n this.material = material;\n if (this.mesh) this.mesh.material = material;\n },\n refreshGeometry() {\n const oldGeo = this.geometry;\n this.createGeometry();\n this.mesh.geometry = this.geometry;\n oldGeo.dispose();\n },\n },\n render() {\n if (this.$slots.default) {\n return this.$slots.default();\n }\n return [];\n },\n __hmrId: 'Mesh',\n};\n","import { BoxBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n if (this.size) {\n this.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\n } else {\n this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\n }\n },\n },\n __hmrId: 'Box',\n};\n","import { CircleBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Circle',\n};\n","import { ConeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cone',\n};\n","import { CylinderBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cylinder',\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Dodecahedron',\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Icosahedron',\n};\n","import { LatheBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['points', 'segments', 'phiStart', 'phiLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n __hmrId: 'Lathe',\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Octahedron',\n};\n","import { PlaneBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['width', 'height', 'widthSegments', 'heightSegments'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Plane',\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['vertices', 'indices', 'radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n __hmrId: 'Polyhedron',\n};\n","import { RingBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Ring',\n};\n","import { SphereBufferGeometry } from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: Number,\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n watch: {\n radius() { this.refreshGeometry(); },\n widthSegments() { this.refreshGeometry(); },\n heightSegments() { this.refreshGeometry(); },\n },\n created() {\n this.createGeometry();\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Sphere',\n};\n","import { TetrahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Tetrahedron',\n};\n","export default {\n text: String,\n fontSrc: String,\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String], default: false },\n};\n","import { FontLoader, TextBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport TextProps from './TextProps.js';\n\nexport default {\n extends: Mesh,\n props: {\n ...TextProps,\n },\n created() {\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ];\n watchProps.forEach(p => {\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry();\n });\n });\n\n const loader = new FontLoader();\n loader.load(this.fontSrc, (font) => {\n this.font = font;\n this.createGeometry();\n this.initMesh();\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TextBufferGeometry(this.text, {\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n });\n\n if (this.align === 'center') {\n this.geometry.center();\n }\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n __hmrId: 'Torus',\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n __hmrId: 'TorusKnot',\n};\n","import { Curve, TubeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['path', 'tubularSegments', 'radius', 'radialSegments', 'closed'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeBufferGeometry(this.path, this.tubularSegments, this.radius, this.radialSegments, this.closed);\n },\n },\n __hmrId: 'Tube',\n};\n","import {\n BackSide,\n CubeCamera,\n FrontSide,\n LinearMipmapLinearFilter,\n Mesh as TMesh,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\n// import { watch } from 'vue';\nimport Mesh from '../meshes/Mesh.js';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initGem();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.meshBack) this.parent.remove(this.meshBack);\n if (this.materialBack) this.materialBack.dispose();\n },\n methods: {\n initGem() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n useBindProp(this, 'position', this.cubeCamera.position);\n this.parent.add(this.cubeCamera);\n\n this.material.side = FrontSide;\n this.material.envMap = cubeRT.texture;\n this.material.envMapIntensity = 10;\n this.material.metalness = 0;\n this.material.roughness = 0;\n this.material.opacity = 0.75;\n this.material.transparent = true;\n this.material.premultipliedAlpha = true;\n this.material.needsUpdate = true;\n\n this.materialBack = this.material.clone();\n this.materialBack.side = BackSide;\n this.materialBack.envMapIntensity = 5;\n this.materialBack.metalness = 1;\n this.materialBack.roughness = 0;\n this.materialBack.opacity = 0.5;\n\n this.meshBack = new TMesh(this.geometry, this.materialBack);\n\n useBindProp(this, 'position', this.meshBack.position);\n useBindProp(this, 'rotation', this.meshBack.rotation);\n useBindProp(this, 'scale', this.meshBack.scale);\n this.parent.add(this.meshBack);\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.meshBack.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n this.meshBack.visible = true;\n },\n },\n __hmrId: 'Gem',\n};\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry, TextureLoader } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: String,\n width: Number,\n height: Number,\n keepSize: Boolean,\n },\n created() {\n this.createGeometry();\n this.createMaterial();\n this.initMesh();\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], this.resize);\n });\n\n if (this.keepSize) this.three.onAfterResize(this.resize);\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(1, 1, 1, 1);\n },\n createMaterial() {\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\n },\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded);\n },\n refreshTexture() {\n if (this.texture) this.texture.dispose();\n this.material.map = this.loadTexture();\n this.material.needsUpdate = true;\n },\n onLoaded(texture) {\n this.texture = texture;\n this.resize();\n this.$emit('loaded');\n },\n resize() {\n if (!this.texture) return;\n const screen = this.three.size;\n const iW = this.texture.image.width;\n const iH = this.texture.image.height;\n const iRatio = iW / iH;\n let w, h;\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width;\n h = this.height * screen.wHeight / screen.height;\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width;\n h = w / iRatio;\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height;\n w = h * iRatio;\n }\n this.mesh.scale.x = w;\n this.mesh.scale.y = h;\n },\n },\n __hmrId: 'Image',\n};\n","import { InstancedMesh } from 'three';\nimport { watch } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: {\n three: 'three',\n scene: 'scene',\n group: { default: null },\n },\n props: {\n materialId: String,\n count: Number,\n position: Object,\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n provide() {\n return {\n mesh: this,\n };\n },\n created() {\n this.parent = this.group ? this.group : this.scene;\n },\n beforeMount() {\n if (!this.$slots.default) {\n console.error('Missing Geometry');\n }\n },\n mounted() {\n this.initMesh();\n },\n unmounted() {\n this.parent.remove(this.mesh);\n },\n methods: {\n initMesh() {\n if (!this.material && this.materialId) {\n this.material = this.three.materials[this.materialId];\n }\n\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\n\n useBindProp(this, 'position', this.mesh.position);\n useBindProp(this, 'rotation', this.mesh.rotation);\n useBindProp(this, 'scale', this.mesh.scale);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n // watch(() => this.materialId, () => {\n // this.mesh.material = this.three.materials[this.materialId];\n // });\n\n this.parent.add(this.mesh);\n },\n setGeometry(geometry) {\n this.geometry = geometry;\n if (this.mesh) this.mesh.geometry = geometry;\n },\n setMaterial(material) {\n this.material = material;\n if (this.mesh) this.mesh.material = material;\n },\n },\n render() {\n return this.$slots.default();\n },\n __hmrId: 'InstancedMesh',\n};\n","import {\n CubeCamera,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\n// import { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n this.parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'MirrorMesh',\n};\n","import {\n CubeCamera,\n CubeRefractionMapping,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\n// import { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n refractionRatio: { type: Number, default: 0.98 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n useBindProp(this, 'position', this.cubeCamera.position);\n this.parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.refractionRatio = this.refractionRatio;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'RefractionMesh',\n};\n","import { Sprite, SpriteMaterial, TextureLoader } from 'three';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n emits: ['ready', 'loaded'],\n inject: {\n three: 'three',\n scene: 'scene',\n group: { default: null },\n },\n props: {\n src: String,\n position: Object,\n scale: Object,\n },\n created() {\n this.parent = this.group ? this.group : this.scene;\n },\n mounted() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded);\n this.material = new SpriteMaterial({ map: this.texture });\n this.sprite = new Sprite(this.material);\n this.geometry = this.sprite.geometry;\n useBindProp(this, 'position', this.sprite.position);\n useBindProp(this, 'scale', this.sprite.scale);\n\n this.parent.add(this.sprite);\n this.$emit('ready');\n },\n unmounted() {\n this.texture.dispose();\n this.material.dispose();\n this.parent.remove(this.sprite);\n },\n methods: {\n onLoaded() {\n this.updateUV();\n this.$emit('loaded');\n },\n updateUV() {\n this.iWidth = this.texture.image.width;\n this.iHeight = this.texture.image.height;\n this.iRatio = this.iWidth / this.iHeight;\n\n let x = 0.5, y = 0.5;\n if (this.iRatio > 1) {\n y = 0.5 / this.iRatio;\n } else {\n x = 0.5 / this.iRatio;\n }\n\n const positions = this.geometry.attributes.position.array;\n positions[0] = -x; positions[1] = -y;\n positions[5] = x; positions[6] = -y;\n positions[10] = x; positions[11] = y;\n positions[15] = -x; positions[16] = y;\n this.geometry.attributes.position.needsUpdate = true;\n },\n },\n render() {\n return [];\n },\n __hmrId: 'Sprite',\n};\n","import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\n\nexport default {\n setup() {\n return {\n passes: [],\n };\n },\n inject: ['three'],\n provide() {\n return {\n passes: this.passes,\n };\n },\n mounted() {\n this.three.onAfterInit(() => {\n this.composer = new EffectComposer(this.three.renderer);\n this.three.renderer.autoClear = false;\n this.passes.forEach(pass => {\n this.composer.addPass(pass);\n });\n this.three.composer = this.composer;\n\n this.resize();\n this.three.onAfterResize(this.resize);\n });\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n this.composer.setSize(this.three.size.width, this.three.size.height);\n },\n },\n render() {\n return this.$slots.default();\n },\n __hmrId: 'EffectComposer',\n};\n","export default {\n inject: ['three', 'passes'],\n beforeMount() {\n if (!this.passes) {\n console.error('Missing parent EffectComposer');\n }\n },\n unmounted() {\n if (this.pass.dispose) this.pass.dispose();\n },\n render() {\n return [];\n },\n __hmrId: 'EffectPass',\n};\n","import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const pass = new RenderPass(this.three.scene, this.three.camera);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'RenderPass',\n};\n","import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n focus: {\n type: Number,\n default: 1,\n },\n aperture: {\n type: Number,\n default: 0.025,\n },\n maxblur: {\n type: Number,\n default: 0.01,\n },\n },\n watch: {\n focus() { this.pass.uniforms.focus.value = this.focus; },\n aperture() { this.pass.uniforms.aperture.value = this.aperture; },\n maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; },\n },\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.three.size.width,\n height: this.three.size.height,\n };\n const pass = new BokehPass(this.three.scene, this.three.camera, params);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'BokehPass',\n};\n","import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n noiseIntensity: {\n type: Number,\n default: 0.5,\n },\n scanlinesIntensity: {\n type: Number,\n default: 0.05,\n },\n scanlinesCount: {\n type: Number,\n default: 4096,\n },\n grayscale: {\n type: Number,\n default: 0,\n },\n },\n watch: {\n noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; },\n scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; },\n scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; },\n grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; },\n },\n mounted() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'FilmPass',\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n const pass = new ShaderPass(FXAAShader);\n this.passes.push(pass);\n this.pass = pass;\n\n // resize will be called in three init\n this.three.onAfterResize(this.resize);\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n const { resolution } = this.pass.material.uniforms;\n resolution.value.x = 1 / this.three.size.width;\n resolution.value.y = 1 / this.three.size.height;\n },\n },\n __hmrId: 'FXAAPass',\n};\n","import { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n },\n mounted() {\n const pass = new HalftonePass(this.three.size.width, this.three.size.height, {});\n\n ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => {\n pass.uniforms[p].value = this[p];\n watch(() => this[p], () => {\n pass.uniforms[p].value = this[p];\n });\n });\n\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'HalftonePass',\n};\n","import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n // three size is not set yet, but this pass will be resized by effect composer\n const pass = new SMAAPass(this.three.size.width, this.three.size.height);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'SMAAPass',\n};\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { watch } from 'vue';\n\nexport default function useBindPropValue(src, srcProp, dst, dstProp = 'value') {\n if (src[srcProp]) {\n dst[dstProp] = src[srcProp];\n watch(() => src[srcProp], (value) => {\n dst[dstProp] = value;\n });\n }\n};\n","import { Vector2 } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\nimport TiltShift from '../shaders/TiltShift.js';\nimport useBindPropValue from '../use/useBindPropValue.js';\n\nexport default {\n extends: EffectPass,\n props: {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object, default: { x: 0, y: 100 } },\n end: { type: Object, default: { x: 10, y: 100 } },\n },\n mounted() {\n this.pass = new ShaderPass(TiltShift);\n this.passes.push(this.pass);\n\n this.pass1 = new ShaderPass(TiltShift);\n this.passes.push(this.pass1);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n const uniforms1 = this.uniforms1 = this.pass1.uniforms;\n uniforms1.blurRadius = uniforms.blurRadius;\n uniforms1.gradientRadius = uniforms.gradientRadius;\n uniforms1.start = uniforms.start;\n uniforms1.end = uniforms.end;\n uniforms1.texSize = uniforms.texSize;\n\n useBindPropValue(this, 'blurRadius', uniforms.blurRadius);\n useBindPropValue(this, 'gradientRadius', uniforms.gradientRadius);\n\n this.updateFocusLine();\n ['start', 'end'].forEach(p => {\n watch(() => this[p], this.updateFocusLine, { deep: true });\n });\n\n this.pass.setSize = (width, height) => {\n uniforms.texSize.value.set(width, height);\n };\n },\n methods: {\n updateFocusLine() {\n this.uniforms.start.value.copy(this.start);\n this.uniforms.end.value.copy(this.end);\n const dv = new Vector2().copy(this.end).sub(this.start).normalize();\n this.uniforms.delta.value.copy(dv);\n this.uniforms1.delta.value.set(-dv.y, dv.x);\n },\n },\n __hmrId: 'TiltShiftPass',\n};\n","import { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n },\n watch: {\n strength() { this.pass.strength = this.strength; },\n radius() { this.pass.radius = this.radius; },\n threshold() { this.pass.threshold = this.threshold; },\n },\n mounted() {\n const size = new Vector2(this.three.size.width, this.three.size.height);\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'UnrealBloomPass',\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport ZoomBlur from '../shaders/ZoomBlur.js';\nimport useBindProp from '../use/useBindProp.js';\nimport useBindPropValue from '../use/useBindPropValue.js';\n\nexport default {\n extends: EffectPass,\n props: {\n center: { type: Object, default: { x: 0.5, y: 0.5 } },\n strength: { type: Number, default: 0.5 },\n },\n mounted() {\n this.pass = new ShaderPass(ZoomBlur);\n this.passes.push(this.pass);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n useBindProp(this, 'center', uniforms.center.value);\n useBindPropValue(this, 'strength', uniforms.strength);\n },\n __hmrId: 'ZoomBlurPass',\n};\n","import * as TROIS from './index.js';\n\nexport const TroisJSVuePlugin = {\n install: (app) => {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'BoxGeometry',\n 'CircleGeometry',\n 'ConeGeometry',\n 'CylinderGeometry',\n 'DodecahedronGeometry',\n 'IcosahedronGeometry',\n 'LatheGeometry',\n 'OctahedronGeometry',\n 'PolyhedronGeometry',\n 'RingGeometry',\n 'SphereGeometry',\n 'TetrahedronGeometry',\n 'TorusGeometry',\n 'TorusKnotGeometry',\n 'TubeGeometry',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'PointLight',\n 'SpotLight',\n\n 'BasicMaterial',\n 'LambertMaterial',\n 'MatcapMaterial',\n 'PhongMaterial',\n 'PhysicalMaterial',\n 'ShaderMaterial',\n 'StandardMaterial',\n 'SubSurfaceMaterial',\n 'ToonMaterial',\n\n 'Texture',\n 'CubeTexture',\n\n 'Box',\n 'Circle',\n 'Cone',\n 'Cylinder',\n 'Dodecahedron',\n 'Icosahedron',\n 'Mesh',\n 'Lathe',\n 'Octahedron',\n 'Plane',\n 'Polyhedron',\n 'Ring',\n 'Sphere',\n 'Tetrahedron',\n 'Text',\n 'Torus',\n 'TorusKnot',\n 'Tube',\n\n 'Gem',\n 'Image',\n 'InstancedMesh',\n 'MirrorMesh',\n 'RefractionMesh',\n 'Sprite',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'TiltShiftPass',\n 'UnrealBloomPass',\n 'ZoomBlurPass',\n\n 'GLTFViewer',\n ];\n\n comps.forEach(comp => {\n app.component(comp, TROIS[comp]);\n });\n },\n};\n"],"names":["useThree","const","conf","canvas","antialias","alpha","autoClear","orbit_ctrl","mouse_move","mouse_raycast","mouse_over","click","resize","width","height","size","wWidth","wHeight","ratio","afterInitCallbacks","afterResizeCallbacks","beforeRenderCallbacks","mouse","Vector2","mouseV3","Vector3","mousePlane","Plane","raycaster","Raycaster","intersectObjects","obj","renderer","camera","cameraCtrl","materials","scene","params","Object","entries","forEach","key","value","console","error","WebGLRenderer","orbitCtrl","OrbitControls","domElement","onResize","window","addEventListener","setSize","mouse_move_element","document","body","onMousemove","onMouseleave","onClick","c","removeEventListener","dispose","this","update","render","composer","callback","push","filter","o","indexOf","i","splice","updateMouse","e","rect","target","getBoundingClientRect","x","clientX","left","y","clientY","top","setFromCamera","objects","length","object","onMousechange","getWorldDirection","normal","normalize","ray","intersectPlane","onObjects","offObjects","hover","onHover","let","innerWidth","innerHeight","elt","parentNode","clientWidth","clientHeight","aspect","updateProjectionMatrix","type","right","bottom","wsize","vFOV","fov","Math","PI","h","tan","abs","position","z","getCameraSize","props","Boolean","default","mouseMove","String","mouseRaycast","mouseOver","shadow","setup","three","raf","onMountedCallbacks","provide","rendererComponent","mounted","$el","init","shadowMap","enabled","animateC","animate","beforeUnmount","methods","onMounted","onBeforeRender","onAfterResize","requestAnimationFrame","renderC","$slots","setFromProp","prop","propsValues","exclude","values","includes","lerp","value1","value2","amount","lerpv2","v1","v2","lerpv3","limit","val","min","max","getMatcapUrl","hash","format","MATCAP_ROOT","useBindProp","comp","ref","toRef","watch","deep","inject","Number","near","far","zoom","created","OrthographicCamera","p","__hmrId","lookAt","PerspectiveCamera","v","group","rotation","scale","parent","Group","add","unmounted","remove","id","background","Scene","Color","emits","rotateX","rotateY","rotateZ","mesh","watchProps","$props","beforeMount","createGeometry","rotateGeometry","setGeometry","geometry","addWatchers","refreshGeometry","oldGeo","extends","Geometry","depth","widthSegments","heightSegments","depthSegments","w","d","BoxBufferGeometry","radius","segments","thetaStart","thetaLength","CircleBufferGeometry","radialSegments","openEnded","ConeBufferGeometry","radiusTop","radiusBottom","CylinderBufferGeometry","detail","DodecahedronBufferGeometry","IcosahedronBufferGeometry","points","Array","phiStart","phiLength","LatheBufferGeometry","OctahedronBufferGeometry","vertices","indices","PolyhedronBufferGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","SphereBufferGeometry","TetrahedronBufferGeometry","tube","tubularSegments","arc","TorusBufferGeometry","q","TorusKnotBufferGeometry","path","Curve","radiusSegments","closed","TubeBufferGeometry","color","intensity","castShadow","shadowMapSize","light","mapSize","Light","AmbientLight","DirectionalLight","distance","decay","PointLight","angle","penumbra","SpotLight","depthTest","depthWrite","flatShading","fog","opacity","side","FrontSide","transparent","vertexColors","material","createMaterial","setMaterial","_addWatchers","setProp","needsUpdate","setTexture","texture","set","Material","MeshBasicMaterial","MeshLambertMaterial","src","name","opts","matcap","TextureLoader","load","MeshMatcapMaterial","emissive","emissiveIntensity","reflectivity","shininess","specular","MeshPhongMaterial","aoMapIntensity","bumpScale","displacementBias","displacementScale","envMapIntensity","lightMapIntensity","metalness","normalScale","roughness","refractionRatio","wireframe","MeshStandardMaterial","keys","StandardMaterial","MeshPhysicalMaterial","string","find","replace","meshphongFragHead","ShaderChunk","meshphong_frag","slice","meshphongFragBody","SubsurfaceScatteringShader","uniforms","UniformsUtils","merge","ShaderLib","phong","thicknessColor","thicknessDistortion","thicknessAmbient","thicknessAttenuation","thicknessPower","thicknessScale","vertexShader","fragmentShader","lights_fragment_begin","split","join","clone","_key","_value","TShaderMaterial","lights","MeshToonMaterial","onLoad","Function","onProgress","onError","refreshTexture","createTexture","onLoaded","$emit","urls","refraction","CubeTextureLoader","setPath","mapping","CubeRefractionMapping","materialId","receiveShadow","initMesh","removeIntersectObject","Mesh","over","component","addIntersectObject","event","bindProps","PlaneBufferGeometry","text","fontSrc","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align","TextProps","font","FontLoader","TextBufferGeometry","center","cubeRTSize","cubeCameraNear","cubeCameraFar","autoUpdate","initGem","updateCubeRT","offBeforeRender","meshBack","materialBack","cubeRT","WebGLCubeRenderTarget","RGBFormat","generateMipmaps","minFilter","LinearMipmapLinearFilter","cubeCamera","CubeCamera","envMap","premultipliedAlpha","BackSide","TMesh","visible","keepSize","DoubleSide","map","loadTexture","screen","iRatio","image","count","InstancedMesh","initMirrorMesh","SpriteMaterial","sprite","Sprite","updateUV","iWidth","iHeight","positions","attributes","array","passes","onAfterInit","EffectComposer","pass","addPass","offAfterResize","EffectPass","RenderPass","focus","aperture","maxblur","BokehPass","noiseIntensity","scanlinesIntensity","scanlinesCount","grayscale","nIntensity","sIntensity","sCount","FilmPass","ShaderPass","FXAAShader","resolution","shape","rotateR","rotateG","rotateB","scatter","HalftonePass","SMAAPass","tDiffuse","blurRadius","gradientRadius","start","end","delta","texSize","DefaultShader","useBindPropValue","srcProp","dst","dstProp","TiltShift","pass1","uniforms1","updateFocusLine","copy","dv","sub","strength","threshold","UnrealBloomPass","ZoomBlur","TroisJSVuePlugin","install","app","TROIS"],"mappings":"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"}