1
0
mirror of https://github.com/troisjs/trois.git synced 2024-11-24 04:12:02 +08:00
trois/build/trois.module.cdn.min.js.map
Kevin Levron 405d7bfa65 0.2.1
2021-04-04 22:02:11 +02:00

1 line
151 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

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

{"version":3,"file":"trois.module.cdn.min.js","sources":["../src/core/usePointer.js","../src/core/useRaycaster.js","../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/core/Camera.js","../src/core/OrthographicCamera.js","../src/core/PerspectiveCamera.js","../src/core/Object3D.js","../src/core/Group.js","../src/core/Scene.js","../src/core/Raycaster.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/HemisphereLight.js","../src/lights/PointLight.js","../src/lights/RectAreaLight.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/ShaderMaterial.js","../src/materials/SubsurfaceScatteringShader.js","../src/materials/SubSurfaceMaterial.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/geometries/PlaneGeometry.js","../src/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.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/models/Model.js","../src/models/GLTF.js","../src/models/FBX.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/effects/SSAOPass.js","../src/shaders/default.js","../src/shaders/TiltShift.js","../src/effects/TiltShiftPass.js","../src/effects/UnrealBloomPass.js","../src/shaders/ZoomBlur.js","../src/effects/ZoomBlurPass.js","../src/plugin.js"],"sourcesContent":["import { InstancedMesh, Vector2, Vector3 } from 'three';\r\nimport useRaycaster from './useRaycaster';\r\n\r\nexport default function usePointer(options) {\r\n const {\r\n camera,\r\n domElement,\r\n intersectObjects,\r\n touch = true,\r\n resetOnEnd = false,\r\n resetPosition = new Vector2(0, 0),\r\n resetPositionV3 = new Vector3(0, 0, 0),\r\n onEnter = () => {},\r\n onMove = () => {},\r\n onLeave = () => {},\r\n onIntersectEnter = () => {},\r\n onIntersectOver = () => {},\r\n onIntersectMove = () => {},\r\n onIntersectLeave = () => {},\r\n onIntersectClick = () => {},\r\n } = options;\r\n\r\n const position = resetPosition.clone();\r\n const positionN = new Vector2(0, 0);\r\n\r\n const raycaster = useRaycaster({ camera });\r\n const positionV3 = raycaster.position;\r\n\r\n const obj = {\r\n position,\r\n positionN,\r\n positionV3,\r\n intersectObjects,\r\n listeners: false,\r\n addListeners,\r\n removeListeners,\r\n intersect,\r\n };\r\n\r\n return obj;\r\n\r\n function reset() {\r\n position.copy(resetPosition);\r\n positionV3.copy(resetPositionV3);\r\n };\r\n\r\n function updatePosition(event) {\r\n let x, y;\r\n if (event.touches && event.touches.length > 0) {\r\n x = event.touches[0].clientX;\r\n y = event.touches[0].clientY;\r\n } else {\r\n x = event.clientX;\r\n y = event.clientY;\r\n }\r\n\r\n const rect = domElement.getBoundingClientRect();\r\n position.x = x - rect.left;\r\n position.y = y - rect.top;\r\n positionN.x = (position.x / rect.width) * 2 - 1;\r\n positionN.y = -(position.y / rect.height) * 2 + 1;\r\n raycaster.updatePosition(positionN);\r\n };\r\n\r\n function intersect() {\r\n if (intersectObjects.length) {\r\n const intersects = raycaster.intersect(positionN, intersectObjects);\r\n const offObjects = [...intersectObjects];\r\n const iMeshes = [];\r\n\r\n intersects.forEach(intersect => {\r\n const { object } = intersect;\r\n const { component } = object;\r\n\r\n // only once for InstancedMesh\r\n if (object instanceof InstancedMesh) {\r\n if (iMeshes.indexOf(object) !== -1) return;\r\n iMeshes.push(object);\r\n }\r\n\r\n if (!object.over) {\r\n object.over = true;\r\n const overEvent = { type: 'pointerover', over: true, component, intersect };\r\n const enterEvent = { ...overEvent, type: 'pointerenter' };\r\n onIntersectOver(overEvent);\r\n onIntersectEnter(enterEvent);\r\n component.onPointerOver?.(overEvent);\r\n component.onPointerEnter?.(enterEvent);\r\n }\r\n\r\n const moveEvent = { type: 'pointermove', component, intersect };\r\n onIntersectMove(moveEvent);\r\n component.onPointerMove?.(moveEvent);\r\n\r\n offObjects.splice(offObjects.indexOf(object), 1);\r\n });\r\n\r\n offObjects.forEach(object => {\r\n const { component } = object;\r\n if (object.over) {\r\n object.over = false;\r\n const overEvent = { type: 'pointerover', over: false, component };\r\n const leaveEvent = { ...overEvent, type: 'pointerleave' };\r\n onIntersectOver(overEvent);\r\n onIntersectLeave(leaveEvent);\r\n component.onPointerOver?.(overEvent);\r\n component.onPointerLeave?.(leaveEvent);\r\n }\r\n });\r\n }\r\n };\r\n\r\n function pointerEnter(event) {\r\n updatePosition(event);\r\n onEnter({ type: 'pointerenter', position, positionN, positionV3 });\r\n };\r\n\r\n function pointerMove(event) {\r\n updatePosition(event);\r\n onMove({ type: 'pointermove', position, positionN, positionV3 });\r\n intersect();\r\n };\r\n\r\n function pointerClick(event) {\r\n updatePosition(event);\r\n if (intersectObjects.length) {\r\n const intersects = raycaster.intersect(positionN, intersectObjects);\r\n const iMeshes = [];\r\n intersects.forEach(intersect => {\r\n const { object } = intersect;\r\n const { component } = object;\r\n\r\n // only once for InstancedMesh\r\n if (object instanceof InstancedMesh) {\r\n if (iMeshes.indexOf(object) !== -1) return;\r\n iMeshes.push(object);\r\n }\r\n\r\n const event = { type: 'click', component, intersect };\r\n onIntersectClick(event);\r\n component.onClick?.(event);\r\n });\r\n }\r\n };\r\n\r\n function pointerLeave() {\r\n if (resetOnEnd) reset();\r\n onLeave({ type: 'pointerleave' });\r\n };\r\n\r\n function addListeners() {\r\n domElement.addEventListener('mouseenter', pointerEnter);\r\n domElement.addEventListener('mousemove', pointerMove);\r\n domElement.addEventListener('mouseleave', pointerLeave);\r\n domElement.addEventListener('click', pointerClick);\r\n if (touch) {\r\n domElement.addEventListener('touchstart', pointerEnter);\r\n domElement.addEventListener('touchmove', pointerMove);\r\n domElement.addEventListener('touchend', pointerLeave);\r\n }\r\n obj.listeners = true;\r\n };\r\n\r\n function removeListeners() {\r\n domElement.removeEventListener('mouseenter', pointerEnter);\r\n domElement.removeEventListener('mousemove', pointerMove);\r\n domElement.removeEventListener('mouseleave', pointerLeave);\r\n domElement.removeEventListener('click', pointerClick);\r\n\r\n domElement.removeEventListener('touchstart', pointerEnter);\r\n domElement.removeEventListener('touchmove', pointerMove);\r\n domElement.removeEventListener('touchend', pointerLeave);\r\n obj.listeners = false;\r\n };\r\n};\r\n","import { Plane, Raycaster, Vector3 } from 'three';\r\n\r\nexport default function useRaycaster(options) {\r\n const {\r\n camera,\r\n resetPosition = new Vector3(0, 0, 0),\r\n } = options;\r\n\r\n const raycaster = new Raycaster();\r\n const position = resetPosition.clone();\r\n const plane = new Plane(new Vector3(0, 0, 1), 0);\r\n\r\n const updatePosition = (coords) => {\r\n raycaster.setFromCamera(coords, camera);\r\n camera.getWorldDirection(plane.normal);\r\n raycaster.ray.intersectPlane(plane, position);\r\n };\r\n\r\n const intersect = (coords, objects) => {\r\n raycaster.setFromCamera(coords, camera);\r\n return raycaster.intersectObjects(objects);\r\n };\r\n\r\n return {\r\n position,\r\n updatePosition,\r\n intersect,\r\n };\r\n};\r\n","import { WebGLRenderer } from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport usePointer from './usePointer';\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 pointer: false,\n resize: false,\n width: 300,\n height: 150,\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 const intersectObjects = [];\n\n // returned object\n const obj = {\n conf,\n renderer: null,\n camera: null,\n cameraCtrl: null,\n scene: null,\n pointer: null,\n size,\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.resize) {\n onResize();\n window.addEventListener('resize', onResize);\n } else {\n setSize(conf.width, conf.height);\n }\n\n initPointer();\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 afterInitCallbacks.forEach(c => c());\n\n return true;\n };\n\n function initPointer() {\n let pointerConf = {\n camera: obj.camera,\n domElement: obj.renderer.domElement,\n intersectObjects,\n };\n\n if (conf.pointer && conf.pointer instanceof Object) {\n pointerConf = { ...pointerConf, ...conf.pointer };\n }\n\n obj.pointer = usePointer(pointerConf);\n if (conf.pointer || intersectObjects.length) {\n obj.pointer.addListeners();\n if (conf.pointer.intersectMode === 'frame') {\n onBeforeRender(() => {\n obj.pointer.intersect();\n });\n }\n }\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 // add listeners if needed\n if (obj.pointer && !obj.pointer.listeners) {\n obj.pointer.addListeners();\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 // remove listeners if needed\n if (obj.pointer && !conf.pointer && intersectObjects.length === 0) {\n obj.pointer.removeListeners();\n }\n }\n\n /**\n * remove listeners and dispose\n */\n function dispose() {\n beforeRenderCallbacks = [];\n window.removeEventListener('resize', onResize);\n if (obj.pointer) obj.pointer.removeListeners();\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\n obj.renderer.dispose();\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 { defineComponent, h } from 'vue';\nimport { VRButton } from 'three/examples/jsm/webxr/VRButton.js';\nimport useThree from './useThree';\n\nexport default defineComponent({\n name: 'Renderer',\n props: {\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n orbitCtrl: { type: [Boolean, Object], default: false },\n pointer: { type: [Boolean, Object], default: false },\n resize: { type: [Boolean, String], default: false },\n shadow: Boolean,\n width: String,\n height: String,\n xr: Boolean,\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 pointer: this.pointer,\n resize: this.resize,\n width: this.width,\n height: this.height,\n };\n\n if (this.three.init(params)) {\n this.renderer = this.three.renderer;\n this.renderer.shadowMap.enabled = this.shadow;\n\n if (this.xr) {\n this.vrButton = VRButton.createButton(this.renderer);\n this.renderer.domElement.parentNode.appendChild(this.vrButton);\n this.renderer.xr.enabled = true;\n if (this.three.composer) this.renderer.setAnimationLoop(this.animateXRC);\n else this.renderer.setAnimationLoop(this.animateXR);\n } else {\n if (this.three.composer) this.animateC();\n else this.animate();\n }\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 animateXR() { this.three.render(); },\n animateXRC() { this.three.renderC(); },\n },\n render() {\n return h('canvas', {}, this.$slots.default());\n },\n __hmrId: 'Renderer',\n});\n","import { toRef, watch } from 'vue';\n\nexport 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 bindProps(src, props, dst) {\n props.forEach(prop => {\n bindProp(src, prop, dst);\n });\n};\n\nexport function bindProp(src, srcProp, dst, dstProp) {\n if (!dstProp) dstProp = srcProp;\n const ref = toRef(src, srcProp);\n if (ref.value instanceof Object) {\n setFromProp(dst[dstProp], ref.value);\n watch(ref, (value) => { setFromProp(dst[dstProp], value); }, { deep: true });\n } else {\n if (ref.value) dst[dstProp] = src[srcProp];\n watch(ref, (value) => { dst[dstProp] = value; });\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 { defineComponent } from 'vue';\n// import Object3D from '../core/Object3D.js';\n\nexport default defineComponent({\n // TODO: eventually extend Object3D, for now: error 'injection \"scene\" not found'\n // because camera is a sibling of scene in Trois\n // extends: Object3D,\n inject: ['three'],\n render() {\n return this.$slots.default ? this.$slots.default() : [];\n },\n});\n","import { defineComponent, watch } from 'vue';\nimport { OrthographicCamera } from 'three';\nimport { bindProp } from '../tools';\nimport Camera from './Camera.js';\n\nexport default defineComponent({\n extends: Camera,\n name: 'OrthographicCamera',\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, 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 bindProp(this, 'position', this.camera);\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 __hmrId: 'OrthographicCamera',\n});\n","import { defineComponent, watch } from 'vue';\nimport { PerspectiveCamera } from 'three';\nimport { bindProp } from '../tools';\nimport Camera from './Camera.js';\n\nexport default defineComponent({\n extends: Camera,\n name: 'PerspectiveCamera',\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, default: { x: 0, y: 0, z: 0 } },\n lookAt: { type: Object, default: null },\n },\n created() {\n this.camera = new PerspectiveCamera(this.fov, this.aspect, this.near, this.far);\n bindProp(this, 'position', this.camera);\n\n if (this.lookAt) this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z);\n watch(() => this.lookAt, (v) => { this.camera.lookAt(v.x, v.y, v.z); }, { deep: true });\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n watch(() => this[p], () => {\n this.camera[p] = this[p];\n this.camera.updateProjectionMatrix();\n });\n });\n\n this.three.camera = this.camera;\n },\n __hmrId: 'PerspectiveCamera',\n});\n","import { defineComponent, watch } from 'vue';\nimport { bindProp } from '../tools';\n\nexport default defineComponent({\n name: 'Object3D',\n inject: ['three', 'scene', 'rendererComponent'],\n emits: ['created', 'ready'],\n props: {\n position: { type: Object, default: { x: 0, y: 0, z: 0 } },\n rotation: { type: Object, default: { x: 0, y: 0, z: 0 } },\n scale: { type: Object, default: { x: 1, y: 1, z: 1 } },\n lookAt: { type: Object, default: null },\n autoRemove: { type: Boolean, default: true },\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this.autoRemove) this.removeFromParent();\n },\n methods: {\n initObject3D(o3d) {\n this.o3d = o3d;\n this.$emit('created', this.o3d);\n\n bindProp(this, 'position', this.o3d);\n bindProp(this, 'rotation', this.o3d);\n bindProp(this, 'scale', this.o3d);\n\n // TODO : fix lookat.x\n if (this.lookAt) this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z);\n watch(() => this.lookAt, (v) => { this.o3d.lookAt(v.x, v.y, v.z); }, { deep: true });\n\n this._parent = this.getParent();\n if (this.addToParent()) this.$emit('ready', this);\n else console.error('Missing parent (Scene, Group...)');\n },\n getParent() {\n let parent = this.$parent;\n while (parent) {\n if (parent.add) return parent;\n parent = parent.$parent;\n }\n return false;\n },\n addToParent(o) {\n const o3d = o || this.o3d;\n if (this._parent) {\n this._parent.add(o3d);\n return true;\n }\n return false;\n },\n removeFromParent(o) {\n const o3d = o || this.o3d;\n if (this._parent) {\n this._parent.remove(o3d);\n return true;\n }\n return false;\n },\n add(o) { this.o3d.add(o); },\n remove(o) { this.o3d.remove(o); },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : [];\n },\n __hmrId: 'Object3D',\n});\n","import { defineComponent } from 'vue';\nimport { Group } from 'three';\nimport Object3D from './Object3D.js';\n\nexport default defineComponent({\n name: 'Group',\n extends: Object3D,\n created() {\n this.group = new Group();\n this.initObject3D(this.group);\n },\n __hmrId: 'Group',\n});\n","import { defineComponent, watch } from 'vue';\nimport { Scene, Color } from 'three';\n\nexport default defineComponent({\n name: 'Scene',\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.set(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) { this.scene.add(o); },\n remove(o) { this.scene.remove(o); },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : [];\n },\n __hmrId: 'Scene',\n});\n","import { defineComponent } from 'vue';\r\nimport usePointer from './usePointer';\r\n\r\nexport default defineComponent({\r\n name: 'Raycaster',\r\n inject: ['three', 'rendererComponent'],\r\n props: {\r\n onPointerEnter: { type: Function, default: () => {} },\r\n onPointerOver: { type: Function, default: () => {} },\r\n onPointerMove: { type: Function, default: () => {} },\r\n onPointerLeave: { type: Function, default: () => {} },\r\n onClick: { type: Function, default: () => {} },\r\n intersectMode: { type: String, default: 'move' },\r\n },\r\n mounted() {\r\n this.rendererComponent.onMounted(() => {\r\n this.pointer = usePointer({\r\n camera: this.three.camera,\r\n domElement: this.three.renderer.domElement,\r\n intersectObjects: this.getIntersectObjects(),\r\n onIntersectEnter: this.onPointerEnter,\r\n onIntersectOver: this.onPointerOver,\r\n onIntersectMove: this.onPointerMove,\r\n onIntersectLeave: this.onPointerLeave,\r\n onIntersectClick: this.onClick,\r\n });\r\n this.pointer.addListeners();\r\n\r\n if (this.intersectMode === 'frame') {\r\n this.three.onBeforeRender(this.pointer.intersect);\r\n }\r\n });\r\n },\r\n unmounted() {\r\n if (this.pointer) {\r\n this.pointer.removeListeners();\r\n this.three.offBeforeRender(this.pointer.intersect);\r\n }\r\n },\r\n methods: {\r\n getIntersectObjects() {\r\n return this.three.scene.children.filter(e => e.type === 'Mesh');\r\n },\r\n },\r\n render() {\r\n return [];\r\n },\r\n __hmrId: 'Raycaster',\r\n});\r\n","import { defineComponent, watch } from 'vue';\n\nconst Geometry = defineComponent({\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\n this.watchProps = [];\n Object.entries(this.$props).forEach(e => this.watchProps.push(e[0]));\n\n this.createGeometry();\n this.rotateGeometry();\n this.mesh.setGeometry(this.geometry);\n\n this.addWatchers();\n },\n unmounted() {\n this.geometry.dispose();\n },\n methods: {\n addWatchers() {\n this.watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\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 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() { return []; },\n});\n\nexport default Geometry;\n\nexport function geometryComponent(name, props, createGeometry) {\n return defineComponent({\n name,\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this);\n },\n },\n });\n};\n","import { geometryComponent } from './Geometry.js';\nimport { BoxGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n if (comp.size) {\n return new BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments);\n } else {\n return new BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments);\n }\n};\n\nexport default geometryComponent('BoxGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { CircleGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n return new CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength);\n};\n\nexport default geometryComponent('CircleGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { ConeGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n return new ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength);\n};\n\nexport default geometryComponent('ConeGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { CylinderGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n return new CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength);\n};\n\nexport default geometryComponent('CylinderGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { DodecahedronGeometry } from 'three';\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n};\n\nexport function createGeometry(comp) {\n return new DodecahedronGeometry(comp.radius, comp.detail);\n};\n\nexport default geometryComponent('DodecahedronGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { IcosahedronGeometry } from 'three';\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n};\n\nexport function createGeometry(comp) {\n return new IcosahedronGeometry(comp.radius, comp.detail);\n};\n\nexport default geometryComponent('IcosahedronGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { LatheGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n return new LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength);\n};\n\nexport default geometryComponent('LatheGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { OctahedronGeometry } from 'three';\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n};\n\nexport function createGeometry(comp) {\n return new OctahedronGeometry(comp.radius, comp.detail);\n};\n\nexport default geometryComponent('OctahedronGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { PolyhedronGeometry } from 'three';\n\nexport const props = {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n};\n\nexport function createGeometry(comp) {\n return new PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail);\n};\n\nexport default geometryComponent('PolyhedronGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { RingGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n return new RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength);\n};\n\nexport default geometryComponent('RingGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { SphereGeometry } from 'three';\n\nexport const props = {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n};\n\nexport function createGeometry(comp) {\n return new SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments);\n};\n\nexport default geometryComponent('SphereGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { TetrahedronGeometry } from 'three';\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n};\n\nexport function createGeometry(comp) {\n return new TetrahedronGeometry(comp.radius, comp.detail);\n};\n\nexport default geometryComponent('TetrahedronGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { TorusGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n return new TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc);\n};\n\nexport default geometryComponent('TorusGeometry', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { TorusKnotGeometry } from 'three';\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n};\n\nexport function createGeometry(comp) {\n return new TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q);\n};\n\nexport default geometryComponent('TorusKnotGeometry', props, createGeometry);\n","import { defineComponent } from 'vue';\nimport { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three';\nimport Geometry from './Geometry.js';\n\nexport const props = {\n points: Array,\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\nexport function createGeometry(comp) {\n let curve;\n if (comp.points) {\n curve = new CatmullRomCurve3(comp.points);\n } else if (comp.path) {\n curve = comp.path;\n } else {\n console.error('Missing path curve or points.');\n }\n return new TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed);\n};\n\nexport default defineComponent({\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this);\n },\n // update points (without using prop, faster)\n updatePoints(points) {\n updateTubeGeometryPoints(this.geometry, points);\n },\n },\n});\n\nexport function updateTubeGeometryPoints(tube, points) {\n const curve = new CatmullRomCurve3(points);\n const { radialSegments, radius, tubularSegments, closed } = tube.parameters;\n const frames = curve.computeFrenetFrames(tubularSegments, closed);\n tube.tangents = frames.tangents;\n tube.normals = frames.normals;\n tube.binormals = frames.binormals;\n tube.parameters.path = curve;\n\n const pArray = tube.attributes.position.array;\n const nArray = tube.attributes.normal.array;\n const normal = new Vector3();\n let P;\n\n for (let i = 0; i < tubularSegments; i++) {\n updateSegment(i);\n }\n updateSegment(tubularSegments);\n\n tube.attributes.position.needsUpdate = true;\n tube.attributes.normal.needsUpdate = true;\n\n function updateSegment(i) {\n P = curve.getPointAt(i / tubularSegments, P);\n const N = frames.normals[i];\n const B = frames.binormals[i];\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2;\n const sin = Math.sin(v);\n const cos = -Math.cos(v);\n normal.x = (cos * N.x + sin * B.x);\n normal.y = (cos * N.y + sin * B.y);\n normal.z = (cos * N.z + sin * B.z);\n normal.normalize();\n const index = (i * (radialSegments + 1) + j) * 3;\n nArray[index] = normal.x;\n nArray[index + 1] = normal.y;\n nArray[index + 2] = normal.z;\n pArray[index] = P.x + radius * normal.x;\n pArray[index + 1] = P.y + radius * normal.y;\n pArray[index + 2] = P.z + radius * normal.z;\n }\n }\n}\n","import { defineComponent, watch } from 'vue';\nimport Object3D from '../core/Object3D.js';\nimport { bindProp, setFromProp } from '../tools';\n\nexport default defineComponent({\n extends: Object3D,\n name: 'Light',\n props: {\n color: { type: String, default: '#ffffff' },\n intensity: { type: Number, default: 1 },\n castShadow: { type: Boolean, default: false },\n shadowMapSize: { type: Object, default: { x: 512, y: 512 } },\n shadowCamera: { type: Object, default: {} },\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this.light.target) this.removeFromParent(this.light.target);\n },\n methods: {\n initLight() {\n if (this.light.target) {\n bindProp(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 setFromProp(this.light.shadow.camera, this.shadowCamera);\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n watch(() => this[p], () => {\n if (p === 'color') {\n this.light.color.set(this.color);\n } else {\n this.light[p] = this[p];\n }\n });\n });\n\n this.initObject3D(this.light);\n if (this.light.target) this.addToParent(this.light.target);\n },\n },\n __hmrId: 'Light',\n});\n","import { defineComponent } from 'vue';\nimport { AmbientLight } from 'three';\nimport Light from './Light.js';\n\nexport default defineComponent({\n extends: Light,\n created() {\n this.light = new AmbientLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'AmbientLight',\n});\n","import { defineComponent } from 'vue';\nimport { DirectionalLight } from 'three';\nimport Light from './Light.js';\n\nexport default defineComponent({\n extends: Light,\n props: {\n target: Object,\n },\n created() {\n this.light = new DirectionalLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'DirectionalLight',\n});\n","import { defineComponent, watch } from 'vue';\nimport { HemisphereLight } from 'three';\nimport Light from './Light.js';\n\nexport default defineComponent({\n extends: Light,\n props: {\n groundColor: { type: String, default: '#444444' },\n },\n created() {\n this.light = new HemisphereLight(this.color, this.groundColor, this.intensity);\n watch(() => this.groundColor, (value) => { this.light.groundColor.set(value); });\n this.initLight();\n },\n __hmrId: 'HemisphereLight',\n});\n","import { defineComponent } from 'vue';\nimport { PointLight } from 'three';\nimport Light from './Light.js';\n\nexport default defineComponent({\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 this.initLight();\n },\n __hmrId: 'PointLight',\n});\n","import { defineComponent, watch } from 'vue';\nimport { RectAreaLight } from 'three';\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js';\nimport Light from './Light.js';\n\nexport default defineComponent({\n extends: Light,\n props: {\n width: { type: Number, default: 10 },\n height: { type: Number, default: 10 },\n helper: Boolean,\n },\n created() {\n RectAreaLightUniformsLib.init();\n this.light = new RectAreaLight(this.color, this.intensity, this.width, this.height);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], () => {\n this.light[p] = this[p];\n });\n });\n\n if (this.helper) {\n this.lightHelper = new RectAreaLightHelper(this.light);\n this.light.add(this.lightHelper);\n }\n\n this.initLight();\n },\n unmounted() {\n if (this.lightHelper) this.removeFromParent(this.lightHelper);\n },\n __hmrId: 'RectAreaLight',\n});\n","import { defineComponent, watch } from 'vue';\nimport { SpotLight } from 'three';\nimport Light from './Light.js';\n\nexport default defineComponent({\n extends: Light,\n props: {\n angle: { type: Number, default: Math.PI / 3 },\n decay: { type: Number, default: 1 },\n distance: { type: Number, default: 0 },\n penumbra: { type: Number, default: 0 },\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 this.initLight();\n },\n __hmrId: 'SpotLight',\n});\n","import { defineComponent, watch } from 'vue';\nimport { FrontSide } from 'three';\n\nexport default defineComponent({\n inject: ['three', 'mesh'],\n props: {\n color: { type: [String, Number], default: '#ffffff' },\n depthTest: { type: Boolean, default: true },\n depthWrite: { type: Boolean, default: true },\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 created() {\n this.createMaterial();\n this.mesh.setMaterial(this.material);\n\n this._addWatchers();\n if (this.addWatchers) this.addWatchers();\n },\n unmounted() {\n this.material.dispose();\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 ['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 return this.$slots.default ? this.$slots.default() : [];\n },\n __hmrId: 'Material',\n});\n\nexport const wireframeProps = {\n wireframe: { type: Boolean, default: false },\n // not needed for WebGL\n // wireframeLinecap: { type: String, default: 'round' },\n // wireframeLinejoin: { type: String, default: 'round' },\n wireframeLinewidth: { type: Number, default: 1 }, // not really useful\n};\n","import { defineComponent } from 'vue';\nimport { MeshBasicMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools';\nimport Material, { wireframeProps } from './Material';\n\nexport default defineComponent({\n extends: Material,\n props: {\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshBasicMaterial(propsValues(this.$props));\n },\n addWatchers() {\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'BasicMaterial',\n});\n","import { defineComponent } from 'vue';\nimport { MeshLambertMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools';\nimport Material, { wireframeProps } from './Material';\n\nexport default defineComponent({\n extends: Material,\n props: {\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshLambertMaterial(propsValues(this.$props));\n },\n addWatchers() {\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'LambertMaterial',\n});\n","import { defineComponent } from 'vue';\nimport { MeshMatcapMaterial, TextureLoader } from 'three';\nimport { propsValues, getMatcapUrl } from '../tools';\nimport Material from './Material';\n\nexport default defineComponent({\n extends: Material,\n props: {\n src: String,\n name: String,\n flatShading: Boolean,\n },\n methods: {\n createMaterial() {\n const src = this.name ? getMatcapUrl(this.name) : this.src;\n const opts = propsValues(this.$props, ['src', 'name']);\n opts.matcap = new TextureLoader().load(src);\n this.material = new MeshMatcapMaterial(opts);\n },\n addWatchers() {\n // TODO\n },\n },\n __hmrId: 'MatcapMaterial',\n});\n","import { defineComponent, watch } from 'vue';\nimport { MeshPhongMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools';\nimport Material, { wireframeProps } from './Material';\n\nexport default defineComponent({\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 flatShading: Boolean,\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshPhongMaterial(propsValues(this.$props));\n },\n addWatchers() {\n // TODO : handle flatShading ?\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 bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'PhongMaterial',\n});\n","import { defineComponent, watch } from 'vue';\nimport { MeshStandardMaterial } from 'three';\nimport { bindProp, bindProps, propsValues } from '../tools';\nimport Material, { wireframeProps } 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: { x: 1, y: 1 } },\n roughness: { type: Number, default: 1 },\n refractionRatio: { type: Number, default: 0.98 },\n flatShading: Boolean,\n};\n\nexport default defineComponent({\n extends: Material,\n props: {\n ...props,\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshStandardMaterial(propsValues(this.$props, ['normalScale']));\n },\n addWatchers() {\n // TODO : use setProp, handle flatShading ?\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 bindProp(this, 'normalScale', this.material);\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'StandardMaterial',\n});\n","import { defineComponent } from 'vue';\nimport { MeshPhysicalMaterial } from 'three';\nimport { propsValues } from '../tools';\nimport StandardMaterial from './StandardMaterial';\n\nexport default defineComponent({\n extends: StandardMaterial,\n props: {\n flatShading: Boolean,\n },\n methods: {\n createMaterial() {\n this.material = new MeshPhysicalMaterial(propsValues(this.$props));\n },\n addWatchers() {\n // TODO\n },\n },\n __hmrId: 'PhysicalMaterial',\n});\n","import { defineComponent, watch } from 'vue';\nimport { ShaderMaterial } from 'three';\nimport { propsValues } from '../tools';\n\nconst defaultVertexShader = `\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\nconst defaultFragmentShader = `\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}`;\n\nexport default defineComponent({\n inject: ['three', 'mesh'],\n props: {\n uniforms: { type: Object, default: () => { return {}; } },\n vertexShader: { type: String, default: defaultVertexShader },\n fragmentShader: { type: String, default: defaultFragmentShader },\n },\n provide() {\n return {\n material: this,\n };\n },\n created() {\n this.createMaterial();\n ['vertexShader', 'fragmentShader'].forEach(p => {\n watch(() => this[p], () => {\n // recreate material if we change either shader\n this.material.dispose();\n this.createMaterial();\n });\n });\n },\n unmounted() {\n this.material.dispose();\n },\n methods: {\n createMaterial() {\n this.material = new ShaderMaterial(propsValues(this.$props));\n this.mesh.setMaterial(this.material);\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : [];\n },\n __hmrId: 'ShaderMaterial',\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(0xffffff) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include <lights_fragment_begin>',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { defineComponent } from 'vue';\nimport { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\n\nexport default defineComponent({\n inject: ['three', 'mesh'],\n props: {\n color: { type: String, default: '#ffffff' },\n thicknessColor: { type: String, default: '#ffffff' },\n thicknessDistortion: { type: Number, default: 0.4 },\n thicknessAmbient: { type: Number, default: 0.01 },\n thicknessAttenuation: { type: Number, default: 0.7 },\n thicknessPower: { type: Number, default: 2 },\n thicknessScale: { type: Number, default: 4 },\n transparent: { type: Boolean, default: false },\n opacity: { type: Number, default: 1 },\n vertexColors: { type: Boolean, default: false },\n },\n created() {\n this.createMaterial();\n this.mesh.setMaterial(this.material);\n },\n unmounted() {\n this.material.dispose();\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader;\n const uniforms = UniformsUtils.clone(params.uniforms);\n\n Object.entries(this.$props).forEach(([key, value]) => {\n let _key = key, _value = value;\n if (['color', 'thicknessColor'].includes(key)) {\n if (key === 'color') _key = 'diffuse';\n _value = new Color(value);\n }\n if (!['transparent', 'vertexColors'].includes(key)) {\n uniforms[_key].value = _value;\n }\n });\n\n this.material = new TShaderMaterial({\n ...params,\n uniforms,\n lights: true,\n transparent: this.transparent,\n vertexColors: this.vertexColors,\n });\n },\n },\n render() {\n return [];\n },\n __hmrId: 'SubSurfaceMaterial',\n});\n","import { defineComponent } from 'vue';\nimport { MeshToonMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools';\nimport Material, { wireframeProps } from './Material';\n\nexport default defineComponent({\n extends: Material,\n props: {\n ...wireframeProps,\n },\n methods: {\n createMaterial() {\n this.material = new MeshToonMaterial(propsValues(this.$props));\n },\n addWatchers() {\n bindProps(this, Object.keys(wireframeProps), this.material);\n },\n },\n __hmrId: 'ToonMaterial',\n});\n","import { defineComponent, watch } from 'vue';\nimport { ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, TextureLoader, UVMapping } from 'three';\nimport { bindProp } from '../tools';\n\nexport default defineComponent({\n inject: ['material'],\n emits: ['loaded'],\n props: {\n name: { type: String, default: 'map' },\n uniform: { type: String, default: null },\n src: String,\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n mapping: { type: Number, default: UVMapping },\n wrapS: { type: Number, default: ClampToEdgeWrapping },\n wrapT: { type: Number, default: ClampToEdgeWrapping },\n magFilter: { type: Number, default: LinearFilter },\n minFilter: { type: Number, default: LinearMipmapLinearFilter },\n repeat: { type: Object, default: { x: 1, y: 1 } },\n rotation: { type: Number, default: 0 },\n center: { type: Object, default: { x: 0, y: 0 } },\n },\n created() {\n this.refreshTexture();\n watch(() => this.src, this.refreshTexture);\n },\n unmounted() {\n if (this.material && this.material.setTexture) this.material.setTexture(null, this.name);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\n const wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center'];\n wathProps.forEach(prop => {\n bindProp(this, prop, this.texture);\n });\n },\n refreshTexture() {\n this.createTexture();\n // handle standard material\n if (this.material && this.material.setTexture) { this.material.setTexture(this.texture, this.name); }\n // handle shader material\n else if (this.material && this.material.material.type === \"ShaderMaterial\") {\n // require a `uniform` prop so we know what to call the uniform\n if (!this.uniform) {\n console.warn('\"uniform\" prop required to use texture in a shader.')\n return\n }\n this.material.uniforms[this.uniform] = { value: this.texture };\n }\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() { return []; },\n});\n","import { defineComponent, watch } from 'vue';\nimport { CubeTextureLoader, CubeRefractionMapping } from 'three';\n\nexport default defineComponent({\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 name: { 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.name);\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.name);\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 { defineComponent, watch } from 'vue';\nimport { Mesh as TMesh } from 'three';\nimport Object3D from '../core/Object3D.js';\nimport { bindProp } from '../tools';\n\nexport const pointerProps = {\n onPointerEnter: Function,\n onPointerOver: Function,\n onPointerMove: Function,\n onPointerLeave: Function,\n onPointerDown: Function,\n onPointerUp: Function,\n onClick: Function,\n};\n\nconst Mesh = defineComponent({\n name: 'Mesh',\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n ...pointerProps,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n provide() {\n return {\n mesh: this,\n };\n },\n mounted() {\n if (!this.mesh && !this.loading) this.initMesh();\n },\n methods: {\n initMesh() {\n this.mesh = new TMesh(this.geometry, this.material);\n this.mesh.component = this;\n\n bindProp(this, 'castShadow', this.mesh);\n bindProp(this, 'receiveShadow', this.mesh);\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n this.three.addIntersectObject(this.mesh);\n }\n\n this.initObject3D(this.mesh);\n },\n addGeometryWatchers(props) {\n Object.keys(props).forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\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 unmounted() {\n if (this.mesh) {\n this.three.removeIntersectObject(this.mesh);\n }\n // for predefined mesh (geometry is not unmounted)\n if (this.geometry) this.geometry.dispose();\n },\n __hmrId: 'Mesh',\n});\n\nexport default Mesh;\n\nexport function meshComponent(name, props, createGeometry) {\n return defineComponent({\n name,\n extends: Mesh,\n props,\n created() {\n this.createGeometry();\n this.addGeometryWatchers(props);\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this);\n },\n },\n __hmrId: name,\n });\n};\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/BoxGeometry.js';\n\nexport default meshComponent('Box', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/CircleGeometry.js';\n\nexport default meshComponent('Circle', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/ConeGeometry.js';\n\nexport default meshComponent('Cone', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/CylinderGeometry.js';\n\nexport default meshComponent('Cylinder', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/DodecahedronGeometry.js';\n\nexport default meshComponent('Dodecahedron', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/IcosahedronGeometry.js';\n\nexport default meshComponent('Icosahedron', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/LatheGeometry.js';\n\nexport default meshComponent('Lathe', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/OctahedronGeometry.js';\n\nexport default meshComponent('Octahedron', props, createGeometry);\n","import { geometryComponent } from './Geometry.js';\nimport { PlaneGeometry } from 'three';\n\nexport const 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\nexport function createGeometry(comp) {\n return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments);\n};\n\nexport default geometryComponent('PlaneGeometry', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/PlaneGeometry.js';\n\nexport default meshComponent('Plane', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/PolyhedronGeometry.js';\n\nexport default meshComponent('Polyhedron', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/RingGeometry.js';\n\nexport default meshComponent('Ring', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/SphereGeometry.js';\n\nexport default meshComponent('Sphere', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/TetrahedronGeometry.js';\n\nexport default meshComponent('Tetrahedron', props, createGeometry);\n","import { defineComponent, watch } from 'vue';\nimport { FontLoader, TextGeometry } from 'three';\nimport Mesh from './Mesh.js';\n\nconst props = {\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\nexport default defineComponent({\n extends: Mesh,\n props,\n data() {\n return {\n loading: true,\n };\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.loading = false;\n this.font = font;\n this.createGeometry();\n this.initMesh();\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TextGeometry(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 { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/TorusGeometry.js';\n\nexport default meshComponent('Torus', props, createGeometry);\n","import { meshComponent } from './Mesh.js';\nimport { props, createGeometry } from '../geometries/TorusKnotGeometry.js';\n\nexport default meshComponent('TorusKnot', props, createGeometry);\n","import { defineComponent } from 'vue';\nimport Mesh from './Mesh.js';\nimport { props, createGeometry, updateTubeGeometryPoints } from '../geometries/TubeGeometry.js';\n\nexport default defineComponent({\n extends: Mesh,\n props,\n created() {\n this.createGeometry();\n this.addGeometryWatchers(props);\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this);\n },\n // update curve points (without using prop, faster)\n updatePoints(points) {\n updateTubeGeometryPoints(this.geometry, points);\n },\n },\n __hmrId: 'Tube',\n});\n","import { defineComponent } from 'vue';\nimport {\n BackSide,\n CubeCamera,\n FrontSide,\n LinearMipmapLinearFilter,\n Mesh as TMesh,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools';\n\nexport default defineComponent({\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.cubeCamera) this.removeFromParent(this.cubeCamera);\n if (this.meshBack) this.removeFromParent(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 bindProp(this, 'position', this.cubeCamera);\n this.addToParent(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 bindProp(this, 'position', this.meshBack);\n bindProp(this, 'rotation', this.meshBack);\n bindProp(this, 'scale', this.meshBack);\n this.addToParent(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 { defineComponent, watch } from 'vue';\nimport { DoubleSide, MeshBasicMaterial, PlaneGeometry, TextureLoader } from 'three';\nimport Mesh from './Mesh.js';\n\nexport default defineComponent({\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 PlaneGeometry(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 { defineComponent } from 'vue';\nimport { InstancedMesh } from 'three';\nimport Object3D from '../core/Object3D';\nimport { bindProp } from '../tools';\nimport { pointerProps } from './Mesh';\n\nexport default defineComponent({\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n count: Number,\n ...pointerProps,\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 methods: {\n initMesh() {\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\n this.mesh.component = this;\n\n bindProp(this, 'castShadow', this.mesh);\n bindProp(this, 'receiveShadow', this.mesh);\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n this.three.addIntersectObject(this.mesh);\n }\n\n this.initObject3D(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 this.material.instancingColor = true;\n if (this.mesh) this.mesh.material = material;\n },\n },\n unmounted() {\n if (this.mesh) {\n this.three.removeIntersectObject(this.mesh);\n }\n },\n __hmrId: 'InstancedMesh',\n});\n","import { defineComponent } from 'vue';\nimport {\n CubeCamera,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\n\nexport default defineComponent({\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.removeFromParent(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.addToParent(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 { defineComponent } from 'vue';\nimport {\n CubeCamera,\n CubeRefractionMapping,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools';\n\nexport default defineComponent({\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.removeFromParent(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 bindProp(this, 'position', this.cubeCamera);\n this.addToParent(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 { defineComponent } from 'vue';\nimport { Sprite, SpriteMaterial, TextureLoader } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['loaded'],\n props: {\n src: String,\n },\n data() {\n return {\n loading: true,\n };\n },\n created() {\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 this.initObject3D(this.sprite);\n },\n unmounted() {\n this.texture.dispose();\n this.material.dispose();\n },\n methods: {\n onLoaded() {\n this.loading = false;\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 __hmrId: 'Sprite',\n});\n","import { defineComponent } from 'vue';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default defineComponent({\r\n extends: Object3D,\r\n emits: ['load', 'progress', 'error'],\r\n data() {\r\n return {\r\n progress: 0,\r\n };\r\n },\r\n methods: {\r\n onLoad(model) {\r\n this.$emit('load', model);\r\n this.initObject3D(model);\r\n },\r\n onProgress(progress) {\r\n this.progress = progress.loaded / progress.total;\r\n this.$emit('progress', progress);\r\n },\r\n onError(error) {\r\n this.$emit('error', error);\r\n },\r\n },\r\n});\r\n","import { defineComponent } from 'vue';\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport Model from './Model.js';\r\n\r\nexport default defineComponent({\r\n extends: Model,\r\n props: {\r\n src: String,\r\n },\r\n created() {\r\n const loader = new GLTFLoader();\r\n loader.load(this.src, (gltf) => {\r\n this.onLoad(gltf.scene);\r\n }, this.onProgress, this.onError);\r\n },\r\n});\r\n","import { defineComponent } from 'vue';\r\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\r\nimport Model from './Model.js';\r\n\r\nexport default defineComponent({\r\n extends: Model,\r\n props: {\r\n src: String,\r\n },\r\n created() {\r\n const loader = new FBXLoader();\r\n loader.load(this.src, (fbx) => {\r\n this.onLoad(fbx);\r\n }, this.onProgress, this.onError);\r\n },\r\n});\r\n","import { defineComponent } from 'vue';\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\n\nexport default defineComponent({\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","import { defineComponent } from 'vue';\n\nexport default defineComponent({\n inject: ['three', 'passes'],\n emits: ['ready'],\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 methods: {\n completePass(pass) {\n this.passes.push(pass);\n this.pass = pass;\n this.$emit('ready', pass);\n },\n },\n render() {\n return [];\n },\n __hmrId: 'EffectPass',\n});\n","import { defineComponent } from 'vue';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default defineComponent({\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.completePass(pass);\n },\n __hmrId: 'RenderPass',\n});\n","import { defineComponent } from 'vue';\nimport { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default defineComponent({\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.completePass(pass);\n },\n __hmrId: 'BokehPass',\n});\n","import { defineComponent } from 'vue';\nimport { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n noiseIntensity: { type: Number, default: 0.5 },\n scanlinesIntensity: { type: Number, default: 0.05 },\n scanlinesCount: { type: Number, default: 4096 },\n grayscale: { type: Number, default: 0 },\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.completePass(pass);\n },\n __hmrId: 'FilmPass',\n});\n","import { defineComponent } from 'vue';\nimport { 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 defineComponent({\n extends: EffectPass,\n mounted() {\n const pass = new ShaderPass(FXAAShader);\n this.completePass(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 { defineComponent, watch } from 'vue';\nimport { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default defineComponent({\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.completePass(pass);\n },\n __hmrId: 'HalftonePass',\n});\n","import { defineComponent } from 'vue';\nimport { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default defineComponent({\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.completePass(pass);\n },\n __hmrId: 'SMAAPass',\n});\n","import { defineComponent } from 'vue';\nimport { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n scene: null,\n camera: null,\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n mounted() {\n const pass = new SSAOPass(\n this.scene || this.three.scene,\n this.camera || this.three.camera,\n this.three.size.width,\n this.three.size.height\n );\n\n for (const key of Object.keys(this.options)) {\n pass[key] = this.options[key];\n }\n\n this.completePass(pass);\n },\n __hmrId: 'SSAOPass',\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 { defineComponent, watch } from 'vue';\nimport { Vector2 } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport TiltShift from '../shaders/TiltShift.js';\nimport { bindProp } from '../tools';\n\nexport default defineComponent({\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 bindProp(this, 'blurRadius', uniforms.blurRadius, 'value');\n bindProp(this, 'gradientRadius', uniforms.gradientRadius, 'value');\n\n this.updateFocusLine();\n ['start', 'end'].forEach(p => {\n watch(() => this[p], this.updateFocusLine, { deep: true });\n });\n\n this.pass.setSize = (width, height) => {\n uniforms.texSize.value.set(width, height);\n };\n\n // emit ready event with two passes - do so manually in this file instead\n // of calling `completePass` like in other effect types\n this.$emit('ready', [this.pass, this.pass1]);\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 { defineComponent } from 'vue';\nimport { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default defineComponent({\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.completePass(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 { defineComponent } from 'vue';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport ZoomBlur from '../shaders/ZoomBlur.js';\nimport { bindProp } from '../tools';\n\nexport default defineComponent({\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 const pass = new ShaderPass(ZoomBlur);\n\n const uniforms = this.uniforms = pass.uniforms;\n bindProp(this, 'center', uniforms.center, 'value');\n bindProp(this, 'strength', uniforms.strength, 'value');\n\n this.completePass(pass);\n },\n __hmrId: 'ZoomBlurPass',\n});\n","import { createApp as _createApp } from 'vue';\nimport * as TROIS from './index.js';\n\nexport const TroisJSVuePlugin = {\n install: (app) => {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Raycaster',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'HemisphereLight',\n 'PointLight',\n 'RectAreaLight',\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 'Mesh',\n\n 'Box', 'BoxGeometry',\n 'Circle', 'CircleGeometry',\n 'Cone', 'ConeGeometry',\n 'Cylinder', 'CylinderGeometry',\n 'Dodecahedron', 'DodecahedronGeometry',\n 'Icosahedron', 'IcosahedronGeometry',\n 'Lathe', 'LatheGeometry',\n 'Octahedron', 'OctahedronGeometry',\n 'Plane',\n 'Polyhedron', 'PolyhedronGeometry',\n 'Ring', 'RingGeometry',\n 'Sphere', 'SphereGeometry',\n 'Tetrahedron', 'TetrahedronGeometry',\n 'Text',\n 'Torus', 'TorusGeometry',\n 'TorusKnot', 'TorusKnotGeometry',\n 'Tube', 'TubeGeometry',\n\n 'Gem',\n 'Image',\n 'InstancedMesh',\n 'MirrorMesh',\n 'RefractionMesh',\n 'Sprite',\n\n 'FBXModel',\n 'GLTFModel',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'SSAOPass',\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\nexport function createApp(params) {\n return _createApp(params).use(TroisJSVuePlugin);\n};\n"],"names":["usePointer","options","camera","domElement","intersectObjects","touch","resetOnEnd","resetPosition","Vector2","resetPositionV3","Vector3","onEnter","onMove","onLeave","onIntersectEnter","onIntersectOver","onIntersectMove","onIntersectLeave","onIntersectClick","position","clone","positionN","raycaster","Raycaster","plane","Plane","updatePosition","coords","setFromCamera","getWorldDirection","normal","ray","intersectPlane","intersect","objects","useRaycaster","positionV3","obj","listeners","addListeners","addEventListener","pointerEnter","pointerMove","pointerLeave","pointerClick","removeListeners","removeEventListener","event","x","y","touches","length","clientX","clientY","rect","getBoundingClientRect","left","top","width","height","intersects","offObjects","iMeshes","forEach","object","component","InstancedMesh","indexOf","push","over","overEvent","type","enterEvent","onPointerOver","onPointerEnter","moveEvent","onPointerMove","splice","leaveEvent","onPointerLeave","onClick","copy","useThree","conf","canvas","antialias","alpha","autoClear","orbit_ctrl","pointer","resize","size","wWidth","wHeight","ratio","afterInitCallbacks","afterResizeCallbacks","beforeRenderCallbacks","renderer","cameraCtrl","scene","init","params","Object","entries","key","value","console","error","WebGLRenderer","onResize","window","setSize","initPointer","orbitCtrl","OrbitControls","c","dispose","render","update","renderC","composer","onAfterInit","callback","onAfterResize","offAfterResize","filter","onBeforeRender","offBeforeRender","addIntersectObject","o","removeIntersectObject","i","pointerConf","intersectMode","innerWidth","innerHeight","elt","parentNode","clientWidth","clientHeight","aspect","updateProjectionMatrix","right","bottom","wsize","vFOV","fov","Math","PI","h","tan","abs","z","getCameraSize","defineComponent","name","props","Boolean","default","String","shadow","xr","setup","three","raf","onMountedCallbacks","[object Object]","this","rendererComponent","$el","shadowMap","enabled","vrButton","VRButton","createButton","appendChild","setAnimationLoop","animateXRC","animateXR","animateC","animate","methods","requestAnimationFrame","$slots","__hmrId","setFromProp","prop","bindProps","src","dst","bindProp","srcProp","dstProp","ref","toRef","watch","deep","propsValues","exclude","values","includes","lerp","value1","value2","amount","lerpv2","v1","v2","lerpv3","limit","val","min","max","getMatcapUrl","hash","format","getMatcapFormatString","inject","extends","Camera","Number","near","far","zoom","OrthographicCamera","p","lookAt","PerspectiveCamera","v","emits","rotation","scale","autoRemove","removeFromParent","o3d","$emit","_parent","getParent","addToParent","parent","$parent","add","remove","Object3D","group","Group","initObject3D","id","background","Scene","Color","set","Function","onMounted","getIntersectObjects","children","e","Geometry","rotateX","rotateY","rotateZ","mesh","watchProps","$props","createGeometry","rotateGeometry","setGeometry","geometry","addWatchers","refreshGeometry","oldGeo","geometryComponent","depth","widthSegments","heightSegments","depthSegments","comp","BoxGeometry","radius","segments","thetaStart","thetaLength","CircleGeometry","radialSegments","openEnded","ConeGeometry","radiusTop","radiusBottom","CylinderGeometry","detail","DodecahedronGeometry","IcosahedronGeometry","points","Array","phiStart","phiLength","LatheGeometry","OctahedronGeometry","vertices","indices","PolyhedronGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingGeometry","SphereGeometry","TetrahedronGeometry","tube","tubularSegments","arc","TorusGeometry","q","TorusKnotGeometry","path","Curve","closed","curve","CatmullRomCurve3","TubeGeometry","radiusSegments","updateTubeGeometryPoints","parameters","frames","computeFrenetFrames","tangents","normals","binormals","pArray","attributes","array","nArray","P","updateSegment","getPointAt","N","B","j","sin","cos","normalize","index","needsUpdate","color","intensity","castShadow","shadowMapSize","shadowCamera","light","target","mapSize","Light","AmbientLight","initLight","DirectionalLight","groundColor","HemisphereLight","distance","decay","PointLight","helper","RectAreaLightUniformsLib","RectAreaLight","lightHelper","RectAreaLightHelper","angle","penumbra","SpotLight","depthTest","depthWrite","fog","opacity","side","FrontSide","transparent","vertexColors","material","createMaterial","setMaterial","_addWatchers","texture","setProp","wireframeProps","wireframe","wireframeLinewidth","Material","MeshBasicMaterial","keys","MeshLambertMaterial","flatShading","opts","matcap","TextureLoader","load","MeshMatcapMaterial","emissive","emissiveIntensity","reflectivity","shininess","specular","MeshPhongMaterial","aoMapIntensity","bumpScale","displacementBias","displacementScale","envMapIntensity","lightMapIntensity","metalness","normalScale","roughness","refractionRatio","MeshStandardMaterial","StandardMaterial","MeshPhysicalMaterial","uniforms","vertexShader","fragmentShader","ShaderMaterial","meshphongFragHead","ShaderChunk","meshphong_frag","slice","meshphongFragBody","SubsurfaceScatteringShader","UniformsUtils","merge","ShaderLib","phong","thicknessColor","thicknessDistortion","thicknessAmbient","thicknessAttenuation","thicknessPower","thicknessScale","meshphong_vert","replace","string","lights_fragment_begin","find","split","join","_key","_value","TShaderMaterial","lights","MeshToonMaterial","uniform","onLoad","onProgress","onError","mapping","UVMapping","wrapS","ClampToEdgeWrapping","wrapT","magFilter","LinearFilter","minFilter","LinearMipmapLinearFilter","repeat","center","refreshTexture","setTexture","onLoaded","createTexture","warn","urls","refraction","CubeTextureLoader","setPath","CubeRefractionMapping","pointerProps","onPointerDown","onPointerUp","Mesh","receiveShadow","loading","initMesh","TMesh","meshComponent","addGeometryWatchers","PlaneGeometry","text","fontSrc","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align","data","font","FontLoader","TextGeometry","cubeRTSize","cubeCameraNear","cubeCameraFar","autoUpdate","initGem","updateCubeRT","cubeCamera","meshBack","materialBack","cubeRT","WebGLCubeRenderTarget","RGBFormat","generateMipmaps","CubeCamera","envMap","premultipliedAlpha","BackSide","visible","keepSize","DoubleSide","map","loadTexture","screen","iRatio","image","w","count","instancingColor","initMirrorMesh","SpriteMaterial","sprite","Sprite","updateUV","iWidth","iHeight","positions","progress","model","loaded","total","Model","GLTFLoader","gltf","FBXLoader","fbx","passes","EffectComposer","pass","addPass","EffectPass","RenderPass","completePass","focus","aperture","maxblur","BokehPass","noiseIntensity","scanlinesIntensity","scanlinesCount","grayscale","nIntensity","sIntensity","sCount","FilmPass","ShaderPass","FXAAShader","resolution","shape","rotateR","rotateG","rotateB","scatter","HalftonePass","SMAAPass","SSAOPass","tDiffuse","blurRadius","gradientRadius","start","end","delta","texSize","DefaultShader","TiltShift","pass1","uniforms1","updateFocusLine","dv","sub","strength","threshold","UnrealBloomPass","ZoomBlur","TroisJSVuePlugin","install","app","TROIS","createApp","_createApp","use"],"mappings":"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"}