{"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/glsl/snoise2.glsl.js","../src/components/noisy/NoisyImage.js","../src/components/noisy/NoisyPlane.js","../src/components/noisy/NoisySphere.js","../src/components/noisy/NoisyText.js","../src/components/sliders/AnimatedPlane.js","../src/components/sliders/Slider1.vue","../src/use/useTextures.js","../src/components/sliders/Slider1.vue?vue&type=template&id=23f29a93&lang.js","../src/components/viewers/GLTFViewer.vue","../src/components/viewers/GLTFViewer.vue?vue&type=template&id=683b03c7&lang.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.width && conf.height) {\n setSize(conf.width, conf.height);\n } else if (conf.resize) {\n onResize();\n window.addEventListener('resize', onResize);\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 * click listener\n */\n function onClick(e) {\n mouse.x = (e.clientX / size.width) * 2 - 1;\n mouse.y = -(e.clientY / size.height) * 2 + 1;\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 mouse.x = (e.clientX / size.width) * 2 - 1;\n mouse.y = -(e.clientY / size.height) * 2 + 1;\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: true },\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 },\n created() {\n this.camera = new PerspectiveCamera(this.fov, this.aspect, this.near, this.far);\n useBindProp(this, 'position', this.camera.position);\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.three.camera = this.camera;\n },\n render() {\n return [];\n },\n __hmrId: 'PerspectiveCamera',\n};\n","import { Group } from 'three';\r\nimport { inject } from 'vue';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n inject: ['three', 'scene'],\r\n props: {\r\n position: Object,\r\n rotation: Object,\r\n scale: Object,\r\n },\r\n setup(props) {\r\n const parent = inject('group', inject('scene'));\r\n const group = new Group();\r\n useBindProp(props, 'position', group.position);\r\n useBindProp(props, 'rotation', group.rotation);\r\n useBindProp(props, 'scale', group.scale);\r\n return { parent, group };\r\n },\r\n provide() {\r\n return {\r\n group: this.group,\r\n };\r\n },\r\n created() {\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 { inject, watch } from 'vue';\nimport { setFromProp } from '../tools.js';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: ['scene'],\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 = inject('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 ',\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 diffuse: { 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 Object.entries(this.$props).forEach(([key, value]) => {\n if (key === 'diffuse' || key === 'thicknessColor') {\n value = new Color(value);\n }\n if (key !== 'id' && key !== 'transparent' && key !== 'vertexColors') {\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 { inject, watch } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: ['three', 'scene', 'rendererComponent'],\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 = inject('group', this.scene);\n },\n provide() {\n return {\n mesh: this,\n };\n },\n mounted() {\n // console.log('Mesh mounted');\n if (this.geometry && !this.mesh) this.initMesh();\n },\n unmounted() {\n // console.log('Mesh 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 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 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.radialSegments, this.tubularSegments, 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 { inject, watch } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: ['three', 'scene'],\n props: {\n materialId: String,\n count: Number,\n position: Object,\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n created() {\n this.parent = inject('group', this.scene);\n },\n provide() {\n return {\n mesh: this,\n };\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 { inject } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n emits: ['ready', 'loaded'],\n inject: ['three', 'scene'],\n props: {\n src: String,\n position: Object,\n scale: Object,\n },\n created() {\n this.parent = inject('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);\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","export default `\n//\n// Description : Array and textureless GLSL 2D simplex noise function.\n// Author : Ian McEwan, Ashima Arts.\n// Maintainer : ijm\n// Lastmod : 20110822 (ijm)\n// License : Copyright (C) 2011 Ashima Arts. All rights reserved.\n// Distributed under the MIT License. See LICENSE file.\n// https://github.com/ashima/webgl-noise\n//\n\nvec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec2 mod289(vec2 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec3 permute(vec3 x) {\n return mod289(((x*34.0)+1.0)*x);\n}\n\nfloat snoise(vec2 v)\n{\n const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0\n 0.366025403784439, // 0.5*(sqrt(3.0)-1.0)\n -0.577350269189626, // -1.0 + 2.0 * C.x\n 0.024390243902439); // 1.0 / 41.0\n // First corner\n vec2 i = floor(v + dot(v, C.yy) );\n vec2 x0 = v - i + dot(i, C.xx);\n\n // Other corners\n vec2 i1;\n i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n vec4 x12 = x0.xyxy + C.xxzz;\n x12.xy -= i1;\n\n // Permutations\n i = mod289(i); // Avoid truncation effects in permutation\n vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))\n + i.x + vec3(0.0, i1.x, 1.0 ));\n\n vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);\n m = m*m ;\n m = m*m ;\n\n // Gradients: 41 points uniformly over a line, mapped onto a diamond.\n // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)\n\n vec3 x = 2.0 * fract(p * C.www) - 1.0;\n vec3 h = abs(x) - 0.5;\n vec3 ox = floor(x + 0.5);\n vec3 a0 = x - ox;\n\n // Normalise gradients implicitly by scaling m\n // Approximation of: m *= inversesqrt( a0*a0 + h*h );\n m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );\n\n // Compute final noise value at P\n vec3 g;\n g.x = a0.x * x0.x + h.x * x0.y;\n g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n return 130.0 * dot(m, g);\n}\n`;\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Image from '../../meshes/Image.js';\nimport snoise2 from '../../glsl/snoise2.glsl.js';\n\nexport default {\n extends: Image,\n props: {\n widthSegments: { type: Number, default: 20 },\n heightSegments: { type: Number, default: 20 },\n timeCoef: { type: Number, default: 0.001 },\n noiseCoef: { type: Number, default: 1 },\n zCoef: { type: Number, default: 5 },\n dispCoef: { type: Number, default: 0.05 },\n },\n setup(props) {\n // uniforms\n const uTime = { value: 0 };\n const uNoiseCoef = { value: props.noiseCoef };\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\n const uZCoef = { value: props.zCoef };\n watch(() => props.zCoef, (value) => { uZCoef.value = value; });\n const uDispCoef = { value: props.dispCoef };\n watch(() => props.dispCoef, (value) => { uDispCoef.value = value; });\n\n return {\n uTime, uNoiseCoef, uZCoef, uDispCoef,\n };\n },\n mounted() {\n this.startTime = Date.now();\n this.three.onBeforeRender(this.updateTime);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateTime);\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(1, 1, this.widthSegments, this.heightSegments);\n },\n createMaterial() {\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\n this.material.onBeforeCompile = (shader) => {\n shader.uniforms.uTime = this.uTime;\n shader.uniforms.uNoiseCoef = this.uNoiseCoef;\n shader.uniforms.uZCoef = this.uZCoef;\n shader.uniforms.uDispCoef = this.uDispCoef;\n shader.vertexShader = `\n uniform float uTime;\n uniform float uNoiseCoef;\n uniform float uZCoef;\n varying float vNoise;\n ${snoise2}\n ` + shader.vertexShader;\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n ` \n vec3 p = vec3(position * uNoiseCoef);\n p.x += uTime;\n vNoise = snoise(p.xy);\n vec3 transformed = vec3(position);\n transformed.z += vNoise * uZCoef;\n `\n );\n\n shader.fragmentShader = `\n uniform float uDispCoef;\n varying float vNoise;\n ` + shader.fragmentShader;\n\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include ',\n `\n vec4 texelColor = texture2D(map, vUv);\n vec4 dispTexel = texture2D(map, vUv + vec2(vNoise * uDispCoef, 0));\n texelColor.r = dispTexel.r;\n diffuseColor = texelColor;\n `\n );\n this.materialShader = shader;\n };\n },\n updateTime() {\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\n },\n },\n __hmrId: 'NoisyImage',\n};\n","import { ObjectSpaceNormalMap, ShaderMaterial, Vector2, WebGLRenderTarget } from 'three';\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass.js';\nimport { watch } from 'vue';\nimport Plane from '../../meshes/Plane.js';\nimport snoise3 from '../../glsl/snoise3.glsl.js';\n\nexport default {\n extends: Plane,\n props: {\n timeCoef: { type: Number, default: 0.001 },\n noiseCoef: { type: Number, default: 5 },\n deltaCoef: { type: Number, default: 1 / 512 },\n displacementScale: { type: Number, default: 5 },\n },\n setup(props) {\n // uniforms\n const uTime = { value: 0 };\n const uNoiseCoef = { value: props.noiseCoef };\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\n const uDelta = { value: new Vector2(props.deltaCoef, props.deltaCoef) };\n watch(() => props.deltaCoef, (value) => { uDelta.value.set(value, value); });\n\n return {\n uTime, uNoiseCoef, uDelta,\n };\n },\n mounted() {\n this.init();\n\n watch(() => this.displacementScale, (value) => { this.material.displacementScale = value; });\n\n this.startTime = Date.now();\n this.three.onBeforeRender(this.update);\n },\n unmounted() {\n this.three.offBeforeRender(this.update);\n this.fsQuad.dispose();\n this.dispRT.dispose();\n this.dispMat.dispose();\n this.normRT.dispose();\n this.normMat.dispose();\n },\n methods: {\n init() {\n this.fsQuad = new Pass.FullScreenQuad();\n\n // displacement map\n this.dispRT = new WebGLRenderTarget(512, 512, { depthBuffer: false, stencilBuffer: false });\n this.dispMat = new ShaderMaterial({\n uniforms: {\n uTime: this.uTime,\n uNoiseCoef: this.uNoiseCoef,\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n // gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n gl_Position = vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform float uTime;\n uniform float uNoiseCoef;\n varying vec2 vUv;\n ${snoise3}\n void main() {\n vec2 p = vec2(vUv * uNoiseCoef);\n float noise = (snoise(vec3(p.x, p.y, uTime)) + 1.0) / 2.0;\n gl_FragColor = vec4(noise, 0.0, 0.0, 1.0);\n }\n `,\n });\n\n // normal map\n this.normRT = new WebGLRenderTarget(512, 512, { depthBuffer: false, stencilBuffer: false });\n this.normMat = new ShaderMaterial({\n uniforms: {\n dispMap: { value: this.dispRT.texture },\n delta: this.uDelta,\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n // gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n gl_Position = vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform sampler2D dispMap;\n uniform vec2 delta;\n varying vec2 vUv;\n void main() {\n // gl_FragColor = vec4(0.5, 0.5, 1.0, 0.0);\n float x1 = texture2D(dispMap, vec2(vUv.x - delta.x, vUv.y)).r;\n float x2 = texture2D(dispMap, vec2(vUv.x + delta.x, vUv.y)).r;\n float y1 = texture2D(dispMap, vec2(vUv.x, vUv.y - delta.y)).r;\n float y2 = texture2D(dispMap, vec2(vUv.x, vUv.y + delta.y)).r;\n gl_FragColor = vec4(0.5 + (x1 - x2), 0.5 + (y1 - y2), 1.0, 1.0);\n }\n `,\n });\n\n this.material.displacementMap = this.dispRT.texture;\n this.material.displacementScale = this.displacementScale;\n this.material.normalMap = this.normRT.texture;\n this.material.normalMapType = ObjectSpaceNormalMap;\n // this.material.needsUpdate = true;\n },\n update() {\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\n this.renderDisp();\n },\n renderDisp() {\n this.renderMat(this.dispMat, this.dispRT);\n this.renderMat(this.normMat, this.normRT);\n },\n renderMat(mat, target) {\n const renderer = this.three.renderer;\n this.fsQuad.material = mat;\n const oldTarget = renderer.getRenderTarget();\n renderer.setRenderTarget(target);\n this.fsQuad.render(renderer);\n renderer.setRenderTarget(oldTarget);\n },\n },\n __hmrId: 'NoisyPlane',\n};\n","import { watch } from 'vue';\nimport Sphere from '../../meshes/Sphere.js';\nimport snoise4 from '../../glsl/snoise4.glsl.js';\n\nexport default {\n extends: Sphere,\n props: {\n radius: { type: Number, default: 20 },\n widthSegments: { type: Number, default: 128 },\n heightSegments: { type: Number, default: 128 },\n timeCoef: { type: Number, default: 0.001 },\n noiseCoef: { type: Number, default: 0.05 },\n dispCoef: { type: Number, default: 5 },\n },\n setup(props) {\n // uniforms\n const uTime = { value: 0 };\n const uNoiseCoef = { value: props.noiseCoef };\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\n const uDispCoef = { value: props.dispCoef };\n watch(() => props.dispCoef, (value) => { uDispCoef.value = value; });\n\n return {\n uTime, uNoiseCoef, uDispCoef,\n };\n },\n mounted() {\n this.updateMaterial();\n\n this.startTime = Date.now();\n this.three.onBeforeRender(this.updateTime);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateTime);\n },\n methods: {\n updateMaterial() {\n this.material.onBeforeCompile = (shader) => {\n shader.uniforms.uTime = this.uTime;\n shader.uniforms.uNoiseCoef = this.uNoiseCoef;\n shader.uniforms.uDispCoef = this.uDispCoef;\n shader.vertexShader = `\n uniform float uTime;\n uniform float uNoiseCoef;\n uniform float uDispCoef;\n varying float vNoise;\n ${snoise4}\n ` + shader.vertexShader;\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n `\n vec4 p = vec4(vec3(position * uNoiseCoef), uTime);\n vNoise = snoise(p);\n vec3 transformed = vec3(position);\n transformed += normalize(position) * vNoise * uDispCoef;\n `\n );\n this.materialShader = shader;\n };\n this.material.needsupdate = true;\n },\n updateTime() {\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\n },\n },\n __hmrId: 'NoisySphere',\n};\n","import { watch } from 'vue';\nimport Text from '../../meshes/Text.js';\nimport snoise2 from '../../glsl/snoise2.glsl.js';\n\nexport default {\n extends: Text,\n props: {\n timeCoef: { type: Number, default: 0.001 },\n noiseCoef: { type: Number, default: 0.015 },\n zCoef: { type: Number, default: 10 },\n },\n setup(props) {\n // uniforms\n const uTime = { value: 0 };\n const uNoiseCoef = { value: props.noiseCoef };\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\n const uZCoef = { value: props.zCoef };\n watch(() => props.zCoef, (value) => { uZCoef.value = value; });\n\n return {\n uTime, uNoiseCoef, uZCoef,\n };\n },\n mounted() {\n this.updateMaterial();\n\n this.startTime = Date.now();\n this.three.onBeforeRender(this.updateTime);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateTime);\n },\n methods: {\n updateMaterial() {\n this.material.onBeforeCompile = (shader) => {\n shader.uniforms.uTime = this.uTime;\n shader.uniforms.uNoiseCoef = this.uNoiseCoef;\n shader.uniforms.uZCoef = this.uZCoef;\n shader.vertexShader = `\n uniform float uTime;\n uniform float uNoiseCoef;\n uniform float uZCoef;\n ${snoise2}\n ` + shader.vertexShader;\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n ` \n vec3 p = vec3(position * uNoiseCoef);\n p.x += uTime;\n float noise = snoise(p.xy);\n vec3 transformed = vec3(position);\n transformed.z += noise * uZCoef;\n `\n );\n this.materialShader = shader;\n };\n this.material.needsupdate = true;\n },\n updateTime() {\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\n },\n },\n __hmrId: 'NoisyText',\n};\n","import {\n DoubleSide,\n Face3,\n InstancedBufferAttribute,\n InstancedMesh,\n MathUtils,\n MeshBasicMaterial,\n Object3D,\n Vector2,\n Vector3,\n} from 'three';\n\nimport { Geometry } from 'three/examples/jsm/deprecated/Geometry.js';\n\nexport default class AnimatedPlane {\n constructor(params) {\n Object.entries(params).forEach(([key, value]) => {\n this[key] = value;\n });\n\n this.o3d = new Object3D();\n this.uProgress = { value: 0 };\n this.uvScale = new Vector2();\n\n this.initMaterial();\n this.initPlane();\n }\n\n initMaterial() {\n this.material = new MeshBasicMaterial({\n side: DoubleSide,\n transparent: true,\n map: this.texture,\n onBeforeCompile: shader => {\n shader.uniforms.progress = this.uProgress;\n shader.uniforms.uvScale = { value: this.uvScale };\n shader.vertexShader = `\n uniform float progress;\n uniform vec2 uvScale;\n\n attribute vec3 offset;\n attribute vec3 rotation;\n attribute vec2 uvOffset;\n\n mat3 rotationMatrixXYZ(vec3 r)\n {\n float cx = cos(r.x);\n float sx = sin(r.x);\n float cy = cos(r.y);\n float sy = sin(r.y);\n float cz = cos(r.z);\n float sz = sin(r.z);\n\n return mat3(\n cy * cz, cx * sz + sx * sy * cz, sx * sz - cx * sy * cz,\n -cy * sz, cx * cz - sx * sy * sz, sx * cz + cx * sy * sz,\n sy, -sx * cy, cx * cy\n );\n }\n ` + shader.vertexShader;\n\n shader.vertexShader = shader.vertexShader.replace('#include ', `\n #include \n vUv = vUv * uvScale + uvOffset;\n `);\n\n shader.vertexShader = shader.vertexShader.replace('#include ', `\n mat3 rotMat = rotationMatrixXYZ(progress * rotation);\n transformed = rotMat * transformed;\n\n vec4 mvPosition = vec4(transformed, 1.0);\n #ifdef USE_INSTANCING\n mvPosition = instanceMatrix * mvPosition;\n #endif\n\n mvPosition.xyz += progress * offset;\n\n mvPosition = modelViewMatrix * mvPosition;\n gl_Position = projectionMatrix * mvPosition;\n `);\n },\n });\n }\n\n initPlane() {\n const { width, wWidth, wHeight } = this.screen;\n this.wSize = this.size * wWidth / width;\n this.nx = Math.ceil(wWidth / this.wSize) + 1;\n this.ny = Math.ceil(wHeight / this.wSize) + 1;\n this.icount = this.nx * this.ny;\n\n this.initGeometry();\n this.initUV();\n this.initAnimAttributes();\n\n if (this.imesh) {\n this.o3d.remove(this.imesh);\n }\n this.imesh = new InstancedMesh(this.bGeometry, this.material, this.icount);\n this.o3d.add(this.imesh);\n\n const dummy = new Object3D();\n let index = 0;\n let x = -(wWidth - (wWidth - this.nx * this.wSize)) / 2 + this.dx;\n for (let i = 0; i < this.nx; i++) {\n let y = -(wHeight - (wHeight - this.ny * this.wSize)) / 2 + this.dy;\n for (let j = 0; j < this.ny; j++) {\n dummy.position.set(x, y, 0);\n dummy.updateMatrix();\n this.imesh.setMatrixAt(index++, dummy.matrix);\n y += this.wSize;\n }\n x += this.wSize;\n }\n }\n\n initGeometry() {\n // square\n const geometry = new Geometry();\n geometry.vertices.push(new Vector3(0, 0, 0));\n geometry.vertices.push(new Vector3(this.wSize, 0, 0));\n geometry.vertices.push(new Vector3(0, this.wSize, 0));\n geometry.vertices.push(new Vector3(this.wSize, this.wSize, 0));\n geometry.faces.push(new Face3(0, 2, 1));\n geometry.faces.push(new Face3(2, 3, 1));\n\n geometry.faceVertexUvs[0].push([\n new Vector2(0, 0),\n new Vector2(0, 1),\n new Vector2(1, 0),\n ]);\n geometry.faceVertexUvs[0].push([\n new Vector2(0, 1),\n new Vector2(1, 1),\n new Vector2(1, 0),\n ]);\n\n // geometry.computeFaceNormals();\n // geometry.computeVertexNormals();\n\n // center\n this.dx = this.wSize / 2;\n this.dy = this.wSize / 2;\n geometry.translate(-this.dx, -this.dy, 0);\n\n this.bGeometry = geometry.toBufferGeometry();\n }\n\n initAnimAttributes() {\n const { randFloat: rnd, randFloatSpread: rndFS } = MathUtils;\n const v3 = new Vector3();\n\n const offsets = new Float32Array(this.icount * 3);\n for (let i = 0; i < offsets.length; i += 3) {\n if (this.anim === 1) v3.set(rndFS(10), rnd(50, 100), rnd(20, 50)).toArray(offsets, i);\n else v3.set(rndFS(20), rndFS(20), rnd(20, 200)).toArray(offsets, i);\n }\n this.bGeometry.setAttribute('offset', new InstancedBufferAttribute(offsets, 3));\n\n const rotations = new Float32Array(this.icount * 3);\n const angle = Math.PI * 4;\n for (let i = 0; i < rotations.length; i += 3) {\n rotations[i] = rndFS(angle);\n rotations[i + 1] = rndFS(angle);\n rotations[i + 2] = rndFS(angle);\n }\n this.bGeometry.setAttribute('rotation', new InstancedBufferAttribute(rotations, 3));\n }\n\n initUV() {\n const ratio = this.nx / this.ny;\n const tRatio = this.texture.image.width / this.texture.image.height;\n if (ratio > tRatio) this.uvScale.set(1 / this.nx, (tRatio / ratio) / this.ny);\n else this.uvScale.set((ratio / tRatio) / this.nx, 1 / this.ny);\n const nW = this.uvScale.x * this.nx;\n const nH = this.uvScale.y * this.ny;\n\n const v2 = new Vector2();\n const uvOffsets = new Float32Array(this.icount * 2);\n for (let i = 0; i < this.nx; i++) {\n for (let j = 0; j < this.ny; j++) {\n v2.set(\n this.uvScale.x * i + (1 - nW) / 2,\n this.uvScale.y * j + (1 - nH) / 2\n ).toArray(uvOffsets, (i * this.ny + j) * 2);\n }\n }\n this.bGeometry.setAttribute('uvOffset', new InstancedBufferAttribute(uvOffsets, 2));\n }\n\n setTexture(texture) {\n this.texture = texture;\n this.material.map = texture;\n this.initUV();\n }\n\n resize() {\n this.initPlane();\n }\n}\n","\n\n\n","import { TextureLoader } from 'three';\n\nexport default function useTextures() {\n const obj = {\n loader: new TextureLoader(),\n count: 0,\n textures: [],\n loadProgress: 0,\n loadTextures,\n dispose,\n };\n return obj;\n\n function loadTextures(images, cb) {\n obj.count = images.length;\n obj.textures.splice(0);\n obj.loadProgress = 0;\n Promise.all(images.map(loadTexture)).then(cb);\n };\n\n function loadTexture(img, index) {\n return new Promise(resolve => {\n obj.loader.load(\n img.src,\n texture => {\n obj.loadProgress += 1 / obj.count;\n obj.textures[index] = texture;\n resolve(texture);\n }\n );\n });\n };\n\n function dispose() {\n obj.textures.forEach(t => t.dispose());\n }\n};\n","\n\n\n","\n\n\n","\n\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","setSize","onResize","window","addEventListener","mouse_move_element","document","body","onMousemove","onMouseleave","onClick","c","removeEventListener","dispose","this","update","render","composer","callback","push","filter","o","indexOf","i","splice","e","x","clientX","y","clientY","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","left","top","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","PerspectiveCamera","rotation","scale","parent","group","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","target","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","diffuse","clone","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","Image","timeCoef","noiseCoef","zCoef","dispCoef","uNoiseCoef","uZCoef","uDispCoef","startTime","Date","now","updateTime","onBeforeCompile","shader","uTime","snoise2","materialShader","deltaCoef","uDelta","fsQuad","dispRT","dispMat","normRT","normMat","Pass","FullScreenQuad","WebGLRenderTarget","depthBuffer","stencilBuffer","ShaderMaterial","dispMap","displacementMap","normalMap","normalMapType","ObjectSpaceNormalMap","renderDisp","renderMat","mat","oldTarget","getRenderTarget","setRenderTarget","Sphere","updateMaterial","needsupdate","Text","AnimatedPlane","o3d","Object3D","uProgress","uvScale","initMaterial","initPlane","progress","wSize","nx","ceil","ny","icount","initGeometry","initUV","initAnimAttributes","imesh","bGeometry","dummy","index","dx","dy","j","updateMatrix","setMatrixAt","matrix","faces","Face3","faceVertexUvs","translate","toBufferGeometry","v3","offsets","Float32Array","anim","rndFS","rnd","toArray","setAttribute","InstancedBufferAttribute","rotations","tRatio","nW","nH","uvOffsets","images","events","wheel","keyup","loader","textures","loadProgress","cb","Promise","all","then","t","img","resolve","useTextures","targetProgress","$refs","loadTextures","onKeyup","onWheel","initScene","gsap","fromTo","plane1","duration","ease","Power4","easeOut","updateProgress","plane2","setPlanesProgress","planes","deltaY","setTargetProgress","navPrevious","navNext","keyCode","isInteger","floor","progress1","pdiff","p0","p1","_createBlock","_createVNode","cameraPosition","GLTFLoader","gltf","orbit-ctrl","_renderSlot","TroisJSVuePlugin","install","app","TROIS"],"mappings":"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"}