diff --git a/build/trois.js b/build/trois.js index 79faefb..39fcbe0 100644 --- a/build/trois.js +++ b/build/trois.js @@ -3,6 +3,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); +var VRButton_js = require('three/examples/jsm/webxr/VRButton.js'); var three = require('three'); var OrbitControls_js = require('three/examples/jsm/controls/OrbitControls.js'); var RectAreaLightUniformsLib_js = require('three/examples/jsm/lights/RectAreaLightUniformsLib.js'); @@ -17,68 +18,250 @@ var ShaderPass_js = require('three/examples/jsm/postprocessing/ShaderPass.js'); var FXAAShader_js = require('three/examples/jsm/shaders/FXAAShader.js'); var HalftonePass_js = require('three/examples/jsm/postprocessing/HalftonePass.js'); var SMAAPass_js = require('three/examples/jsm/postprocessing/SMAAPass.js'); +var SSAOPass_js = require('three/examples/jsm/postprocessing/SSAOPass.js'); var UnrealBloomPass_js = require('three/examples/jsm/postprocessing/UnrealBloomPass.js'); +function useRaycaster(options) { + const { + camera, + resetPosition = new three.Vector3(0, 0, 0), + } = options; + + const raycaster = new three.Raycaster(); + const position = resetPosition.clone(); + const plane = new three.Plane(new three.Vector3(0, 0, 1), 0); + + const updatePosition = (coords) => { + raycaster.setFromCamera(coords, camera); + camera.getWorldDirection(plane.normal); + raycaster.ray.intersectPlane(plane, position); + }; + + const intersect = (coords, objects) => { + raycaster.setFromCamera(coords, camera); + return raycaster.intersectObjects(objects); + }; + + return { + position, + updatePosition, + intersect, + }; +} + +function usePointer(options) { + const { + camera, + domElement, + intersectObjects, + touch = true, + resetOnEnd = false, + resetPosition = new three.Vector2(0, 0), + resetPositionV3 = new three.Vector3(0, 0, 0), + onEnter = () => {}, + onMove = () => {}, + onLeave = () => {}, + onIntersectEnter = () => {}, + onIntersectOver = () => {}, + onIntersectMove = () => {}, + onIntersectLeave = () => {}, + onIntersectClick = () => {}, + } = options; + + const position = resetPosition.clone(); + const positionN = new three.Vector2(0, 0); + + const raycaster = useRaycaster({ camera }); + const positionV3 = raycaster.position; + + const obj = { + position, + positionN, + positionV3, + intersectObjects, + listeners: false, + addListeners, + removeListeners, + intersect, + }; + + return obj; + + function reset() { + position.copy(resetPosition); + positionV3.copy(resetPositionV3); + } + function updatePosition(event) { + let x, y; + if (event.touches && event.touches.length > 0) { + x = event.touches[0].clientX; + y = event.touches[0].clientY; + } else { + x = event.clientX; + y = event.clientY; + } + + const rect = domElement.getBoundingClientRect(); + position.x = x - rect.left; + position.y = y - rect.top; + positionN.x = (position.x / rect.width) * 2 - 1; + positionN.y = -(position.y / rect.height) * 2 + 1; + raycaster.updatePosition(positionN); + } + function intersect() { + if (intersectObjects.length) { + const intersects = raycaster.intersect(positionN, intersectObjects); + const offObjects = [...intersectObjects]; + const iMeshes = []; + + intersects.forEach(intersect => { + const { object } = intersect; + const { component } = object; + + // only once for InstancedMesh + if (object instanceof three.InstancedMesh) { + if (iMeshes.indexOf(object) !== -1) return; + iMeshes.push(object); + } + + if (!object.over) { + object.over = true; + const overEvent = { type: 'pointerover', over: true, component, intersect }; + const enterEvent = { ...overEvent, type: 'pointerenter' }; + onIntersectOver(overEvent); + onIntersectEnter(enterEvent); + component.onPointerOver?.(overEvent); + component.onPointerEnter?.(enterEvent); + } + + const moveEvent = { type: 'pointermove', component, intersect }; + onIntersectMove(moveEvent); + component.onPointerMove?.(moveEvent); + + offObjects.splice(offObjects.indexOf(object), 1); + }); + + offObjects.forEach(object => { + const { component } = object; + if (object.over) { + object.over = false; + const overEvent = { type: 'pointerover', over: false, component }; + const leaveEvent = { ...overEvent, type: 'pointerleave' }; + onIntersectOver(overEvent); + onIntersectLeave(leaveEvent); + component.onPointerOver?.(overEvent); + component.onPointerLeave?.(leaveEvent); + } + }); + } + } + function pointerEnter(event) { + updatePosition(event); + onEnter({ type: 'pointerenter', position, positionN, positionV3 }); + } + function pointerMove(event) { + updatePosition(event); + onMove({ type: 'pointermove', position, positionN, positionV3 }); + intersect(); + } + function pointerClick(event) { + updatePosition(event); + if (intersectObjects.length) { + const intersects = raycaster.intersect(positionN, intersectObjects); + const iMeshes = []; + intersects.forEach(intersect => { + const { object } = intersect; + const { component } = object; + + // only once for InstancedMesh + if (object instanceof three.InstancedMesh) { + if (iMeshes.indexOf(object) !== -1) return; + iMeshes.push(object); + } + + const event = { type: 'click', component, intersect }; + onIntersectClick(event); + component.onClick?.(event); + }); + } + } + function pointerLeave() { + if (resetOnEnd) reset(); + onLeave({ type: 'pointerleave' }); + } + function addListeners() { + domElement.addEventListener('mouseenter', pointerEnter); + domElement.addEventListener('mousemove', pointerMove); + domElement.addEventListener('mouseleave', pointerLeave); + domElement.addEventListener('click', pointerClick); + if (touch) { + domElement.addEventListener('touchstart', pointerEnter); + domElement.addEventListener('touchmove', pointerMove); + domElement.addEventListener('touchend', pointerLeave); + } + obj.listeners = true; + } + function removeListeners() { + domElement.removeEventListener('mouseenter', pointerEnter); + domElement.removeEventListener('mousemove', pointerMove); + domElement.removeEventListener('mouseleave', pointerLeave); + domElement.removeEventListener('click', pointerClick); + + domElement.removeEventListener('touchstart', pointerEnter); + domElement.removeEventListener('touchmove', pointerMove); + domElement.removeEventListener('touchend', pointerLeave); + obj.listeners = false; + }} + /** * Three.js helper */ function useThree() { // default conf - var conf = { + const conf = { canvas: null, antialias: true, alpha: false, autoClear: true, orbit_ctrl: false, - mouse_move: false, - mouse_raycast: false, - mouse_over: false, - click: false, - resize: true, - width: 0, - height: 0, + pointer: false, + resize: false, + width: 300, + height: 150, }; // size - var size = { + const size = { width: 1, height: 1, wWidth: 1, wHeight: 1, ratio: 1, }; // handlers - var afterInitCallbacks = []; - var afterResizeCallbacks = []; - var beforeRenderCallbacks = []; + const afterInitCallbacks = []; + let afterResizeCallbacks = []; + let beforeRenderCallbacks = []; - // mouse tracking - var mouse = new three.Vector2(); - var mouseV3 = new three.Vector3(); - var mousePlane = new three.Plane(new three.Vector3(0, 0, 1), 0); - var raycaster = new three.Raycaster(); - - // raycast objects - var intersectObjects = []; + const intersectObjects = []; // returned object - var obj = { - conf: conf, + const obj = { + conf, renderer: null, camera: null, cameraCtrl: null, - materials: {}, scene: null, - size: size, - mouse: mouse, mouseV3: mouseV3, - init: init, - dispose: dispose, - render: render, - renderC: renderC, - setSize: setSize, - onAfterInit: onAfterInit, - onAfterResize: onAfterResize, offAfterResize: offAfterResize, - onBeforeRender: onBeforeRender, offBeforeRender: offBeforeRender, - addIntersectObject: addIntersectObject, removeIntersectObject: removeIntersectObject, + pointer: null, + size, + init, + dispose, + render, + renderC, + setSize, + onAfterInit, + onAfterResize, offAfterResize, + onBeforeRender, offBeforeRender, + addIntersectObject, removeIntersectObject, }; /** @@ -86,10 +269,7 @@ function useThree() { */ function init(params) { if (params) { - Object.entries(params).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(params).forEach(([key, value]) => { conf[key] = value; }); } @@ -107,44 +287,50 @@ function useThree() { obj.renderer = new three.WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha }); obj.renderer.autoClear = conf.autoClear; + if (conf.resize) { + onResize(); + window.addEventListener('resize', onResize); + } else { + setSize(conf.width, conf.height); + } + + initPointer(); + if (conf.orbit_ctrl) { obj.orbitCtrl = new OrbitControls_js.OrbitControls(obj.camera, obj.renderer.domElement); if (conf.orbit_ctrl instanceof Object) { - Object.entries(conf.orbit_ctrl).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(conf.orbit_ctrl).forEach(([key, value]) => { obj.orbitCtrl[key] = value; }); } } - if (conf.resize) { - onResize(); - window.addEventListener('resize', onResize); - } else { - setSize(conf.width | 300, conf.height | 150); - } + afterInitCallbacks.forEach(c => c()); - conf.mouse_move = conf.mouse_move || conf.mouse_over; - if (conf.mouse_move) { - if (conf.mouse_move === 'body') { - obj.mouse_move_element = document.body; - } else { - obj.mouse_move_element = obj.renderer.domElement; - } - obj.mouse_move_element.addEventListener('mousemove', onMousemove); - obj.mouse_move_element.addEventListener('mouseleave', onMouseleave); - } + return true; + } + function initPointer() { + let pointerConf = { + camera: obj.camera, + domElement: obj.renderer.domElement, + intersectObjects, + }; - if (conf.click) { - obj.renderer.domElement.addEventListener('click', onClick); + if (conf.pointer && conf.pointer instanceof Object) { + pointerConf = { ...pointerConf, ...conf.pointer }; } - afterInitCallbacks.forEach(function (c) { return c(); }); - - return true; + obj.pointer = usePointer(pointerConf); + if (conf.pointer || intersectObjects.length) { + obj.pointer.addListeners(); + if (conf.pointer.intersectMode === 'frame') { + onBeforeRender(() => { + obj.pointer.intersect(); + }); + } + } } + /** * add after init callback */ @@ -163,7 +349,7 @@ function useThree() { * remove after resize callback */ function offAfterResize(callback) { - afterResizeCallbacks = afterResizeCallbacks.filter(function (c) { return c !== callback; }); + afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback); } /** @@ -177,15 +363,15 @@ function useThree() { * remove before render callback */ function offBeforeRender(callback) { - beforeRenderCallbacks = beforeRenderCallbacks.filter(function (c) { return c !== callback; }); + beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback); } /** * default render */ function render() { - if (obj.orbitCtrl) { obj.orbitCtrl.update(); } - beforeRenderCallbacks.forEach(function (c) { return c(); }); + if (obj.orbitCtrl) obj.orbitCtrl.update(); + beforeRenderCallbacks.forEach(c => c()); obj.renderer.render(obj.scene, obj.camera); } @@ -193,8 +379,8 @@ function useThree() { * composer render */ function renderC() { - if (obj.orbitCtrl) { obj.orbitCtrl.update(); } - beforeRenderCallbacks.forEach(function (c) { return c(); }); + if (obj.orbitCtrl) obj.orbitCtrl.update(); + beforeRenderCallbacks.forEach(c => c()); obj.composer.render(); } @@ -205,105 +391,35 @@ function useThree() { if (intersectObjects.indexOf(o) === -1) { intersectObjects.push(o); } + // add listeners if needed + if (obj.pointer && !obj.pointer.listeners) { + obj.pointer.addListeners(); + } } /** * remove intersect object */ function removeIntersectObject(o) { - var i = intersectObjects.indexOf(o); + const i = intersectObjects.indexOf(o); if (i !== -1) { intersectObjects.splice(i, 1); } + // remove listeners if needed + if (obj.pointer && !conf.pointer && intersectObjects.length === 0) { + obj.pointer.removeListeners(); + } } /** - * remove listeners + * remove listeners and dispose */ function dispose() { beforeRenderCallbacks = []; window.removeEventListener('resize', onResize); - if (obj.mouse_move_element) { - obj.mouse_move_element.removeEventListener('mousemove', onMousemove); - obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave); - } - obj.renderer.domElement.removeEventListener('click', onClick); - if (obj.orbitCtrl) { obj.orbitCtrl.dispose(); } - this.renderer.dispose(); - } - - /** - */ - function updateMouse(e) { - var rect = e.target.getBoundingClientRect(); - mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1; - mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1; - } - - /** - * click listener - */ - function onClick(e) { - updateMouse(e); - raycaster.setFromCamera(mouse, obj.camera); - var objects = raycaster.intersectObjects(intersectObjects); - for (var i = 0; i < objects.length; i++) { - var o = objects[i].object; - if (o.onClick) { o.onClick(e); } - } - } - - /** - * mousemove listener - */ - function onMousemove(e) { - updateMouse(e); - onMousechange(); - } - - /** - * mouseleave listener - */ - function onMouseleave(e) { - // mouse.x = 0; - // mouse.y = 0; - onMousechange(); - } - - /** - * mouse change - */ - function onMousechange(e) { - if (conf.mouse_over || conf.mouse_raycast) { - raycaster.setFromCamera(mouse, obj.camera); - - if (conf.mouse_raycast) { - // get mouse 3d position - obj.camera.getWorldDirection(mousePlane.normal); - mousePlane.normal.normalize(); - raycaster.ray.intersectPlane(mousePlane, mouseV3); - } - - if (conf.mouse_over) { - var onObjects = raycaster.intersectObjects(intersectObjects); - var offObjects = [].concat( intersectObjects ); - for (var i = 0; i < onObjects.length; i++) { - var o = onObjects[i].object; - if (!o.hover && o.onHover) { - o.hover = true; - o.onHover(true); - } - offObjects.splice(offObjects.indexOf(o), 1); - } - for (var i$1 = 0; i$1 < offObjects.length; i$1++) { - var o$1 = offObjects[i$1]; - if (o$1.hover && o$1.onHover) { - o$1.hover = false; - o$1.onHover(false); - } - } - } - } + if (obj.pointer) obj.pointer.removeListeners(); + if (obj.orbitCtrl) obj.orbitCtrl.dispose(); + obj.renderer.dispose(); } /** @@ -313,10 +429,10 @@ function useThree() { if (conf.resize === 'window') { setSize(window.innerWidth, window.innerHeight); } else { - var elt = obj.renderer.domElement.parentNode; + const elt = obj.renderer.domElement.parentNode; setSize(elt.clientWidth, elt.clientHeight); } - afterResizeCallbacks.forEach(function (c) { return c(); }); + afterResizeCallbacks.forEach(c => c()); } /** @@ -339,7 +455,7 @@ function useThree() { size.wWidth = obj.camera.right - obj.camera.left; size.wHeight = obj.camera.top - obj.camera.bottom; } else { - var wsize = getCameraSize(); + const wsize = getCameraSize(); size.wWidth = wsize[0]; size.wHeight = wsize[1]; } } @@ -348,56 +464,51 @@ function useThree() { * calculate camera visible area size */ function getCameraSize() { - var vFOV = (obj.camera.fov * Math.PI) / 180; - var h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z); - var w = h * obj.camera.aspect; + const vFOV = (obj.camera.fov * Math.PI) / 180; + const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z); + const w = h * obj.camera.aspect; return [w, h]; } return obj; } -var Renderer = { +var Renderer = vue.defineComponent({ name: 'Renderer', props: { antialias: Boolean, alpha: Boolean, autoClear: { type: Boolean, default: true }, - mouseMove: { type: [Boolean, String], default: false }, - mouseRaycast: { type: Boolean, default: false }, - mouseOver: { type: Boolean, default: false }, - click: { type: Boolean, default: false }, orbitCtrl: { type: [Boolean, Object], default: false }, + pointer: { type: [Boolean, Object], default: false }, resize: { type: [Boolean, String], default: false }, shadow: Boolean, width: String, height: String, + xr: Boolean, }, - setup: function setup() { + setup() { return { three: useThree(), raf: true, onMountedCallbacks: [], }; }, - provide: function provide() { + provide() { return { three: this.three, // renderer: this.three.renderer, rendererComponent: this, }; }, - mounted: function mounted() { - var params = { + mounted() { + const params = { canvas: this.$el, antialias: this.antialias, alpha: this.alpha, autoClear: this.autoClear, orbit_ctrl: this.orbitCtrl, - mouse_move: this.mouseMove, - mouse_raycast: this.mouseRaycast, - mouse_over: this.mouseOver, - click: this.click, + pointer: this.pointer, resize: this.resize, width: this.width, height: this.height, @@ -406,72 +517,77 @@ var Renderer = { if (this.three.init(params)) { this.renderer = this.three.renderer; this.renderer.shadowMap.enabled = this.shadow; - if (this.three.composer) { this.animateC(); } - else { this.animate(); } + + if (this.xr) { + this.vrButton = VRButton_js.VRButton.createButton(this.renderer); + this.renderer.domElement.parentNode.appendChild(this.vrButton); + this.renderer.xr.enabled = true; + if (this.three.composer) this.renderer.setAnimationLoop(this.animateXRC); + else this.renderer.setAnimationLoop(this.animateXR); + } else { + if (this.three.composer) this.animateC(); + else this.animate(); + } } - this.onMountedCallbacks.forEach(function (c) { return c(); }); + this.onMountedCallbacks.forEach(c => c()); }, - beforeUnmount: function beforeUnmount() { + beforeUnmount() { this.raf = false; this.three.dispose(); }, methods: { - onMounted: function onMounted(callback) { + onMounted(callback) { this.onMountedCallbacks.push(callback); }, - onBeforeRender: function onBeforeRender(callback) { + onBeforeRender(callback) { this.three.onBeforeRender(callback); }, - onAfterResize: function onAfterResize(callback) { + onAfterResize(callback) { this.three.onAfterResize(callback); }, - animate: function animate() { - if (this.raf) { requestAnimationFrame(this.animate); } + animate() { + if (this.raf) requestAnimationFrame(this.animate); this.three.render(); }, - animateC: function animateC() { - if (this.raf) { requestAnimationFrame(this.animateC); } + animateC() { + if (this.raf) requestAnimationFrame(this.animateC); this.three.renderC(); }, + animateXR() { this.three.render(); }, + animateXRC() { this.three.renderC(); }, }, - render: function render() { + render() { return vue.h('canvas', {}, this.$slots.default()); }, __hmrId: 'Renderer', -}; +}); function setFromProp(o, prop) { if (prop instanceof Object) { - Object.entries(prop).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(prop).forEach(([key, value]) => { o[key] = value; }); } } function bindProps(src, props, dst) { - props.forEach(function (prop) { + props.forEach(prop => { bindProp(src, prop, dst); }); } function bindProp(src, srcProp, dst, dstProp) { - if (!dstProp) { dstProp = srcProp; } - var ref = vue.toRef(src, srcProp); + if (!dstProp) dstProp = srcProp; + const ref = vue.toRef(src, srcProp); if (ref.value instanceof Object) { setFromProp(dst[dstProp], ref.value); - vue.watch(ref, function (value) { setFromProp(dst[dstProp], value); }, { deep: true }); + vue.watch(ref, (value) => { setFromProp(dst[dstProp], value); }, { deep: true }); } else { - if (ref.value) { dst[dstProp] = src[srcProp]; } - vue.watch(ref, function (value) { dst[dstProp] = value; }); + if (ref.value) dst[dstProp] = src[srcProp]; + vue.watch(ref, (value) => { dst[dstProp] = value; }); } } function propsValues(props, exclude) { - var values = {}; - Object.entries(props).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + const values = {}; + Object.entries(props).forEach(([key, value]) => { if (!exclude || (exclude && !exclude.includes(key))) { values[key] = value; } @@ -496,13 +612,11 @@ function limit(val, min, max) { return val < min ? min : (val > max ? max : val); } // from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx -var MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'; +const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'; -function getMatcapUrl(hash, format) { - if ( format === void 0 ) format = 1024; - - var fileName = "" + hash + (getMatcapFormatString(format)) + ".png"; - return (MATCAP_ROOT + "/" + format + "/" + fileName); +function getMatcapUrl(hash, format = 1024) { + const fileName = `${hash}${getMatcapFormatString(format)}.png`; + return `${MATCAP_ROOT}/${format}/${fileName}`; } function getMatcapFormatString(format) { switch (format) { @@ -519,12 +633,20 @@ function getMatcapFormatString(format) { } } -// shader defaults -var defaultVertexShader = "\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}"; +// import Object3D from '../core/Object3D.js'; -var defaultFragmentShader = "\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}"; +var Camera = vue.defineComponent({ + // TODO: eventually extend Object3D, for now: error 'injection "scene" not found' + // because camera is a sibling of scene in Trois + // extends: Object3D, + inject: ['three'], + render() { + return this.$slots.default ? this.$slots.default() : []; + }, +}); -var OrthographicCamera = { +var OrthographicCamera = vue.defineComponent({ + extends: Camera, name: 'OrthographicCamera', inject: ['three'], props: { @@ -537,26 +659,24 @@ var OrthographicCamera = { zoom: { type: Number, default: 1 }, position: { type: Object, default: { x: 0, y: 0, z: 0 } }, }, - created: function created() { - var this$1 = this; - + created() { this.camera = new three.OrthographicCamera(this.left, this.right, this.top, this.bottom, this.near, this.far); bindProp(this, 'position', this.camera); - ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { - this$1.camera[p] = this$1[p]; - this$1.camera.updateProjectionMatrix(); + ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => { + vue.watch(() => this[p], () => { + this.camera[p] = this[p]; + this.camera.updateProjectionMatrix(); }); }); this.three.camera = this.camera; }, - render: function render() { return []; }, __hmrId: 'OrthographicCamera', -}; +}); -var PerspectiveCamera = { +var PerspectiveCamera = vue.defineComponent({ + extends: Camera, name: 'PerspectiveCamera', inject: ['three'], props: { @@ -567,135 +687,195 @@ var PerspectiveCamera = { position: { type: Object, default: { x: 0, y: 0, z: 0 } }, lookAt: { type: Object, default: null }, }, - created: function created() { - var this$1 = this; - + created() { this.camera = new three.PerspectiveCamera(this.fov, this.aspect, this.near, this.far); bindProp(this, 'position', this.camera); - if (this.lookAt) { this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); } - vue.watch(function () { return this$1.lookAt; }, function (v) { this$1.camera.lookAt(v.x, v.y, v.z); }, { deep: true }); + if (this.lookAt) this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); + vue.watch(() => this.lookAt, (v) => { this.camera.lookAt(v.x, v.y, v.z); }, { deep: true }); - ['aspect', 'far', 'fov', 'near'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { - this$1.camera[p] = this$1[p]; - this$1.camera.updateProjectionMatrix(); + ['aspect', 'far', 'fov', 'near'].forEach(p => { + vue.watch(() => this[p], () => { + this.camera[p] = this[p]; + this.camera.updateProjectionMatrix(); }); }); this.three.camera = this.camera; }, - render: function render() { return []; }, __hmrId: 'PerspectiveCamera', -}; +}); -var Object3D = { +var Object3D = vue.defineComponent({ name: 'Object3D', inject: ['three', 'scene', 'rendererComponent'], + emits: ['created', 'ready'], props: { position: { type: Object, default: { x: 0, y: 0, z: 0 } }, rotation: { type: Object, default: { x: 0, y: 0, z: 0 } }, scale: { type: Object, default: { x: 1, y: 1, z: 1 } }, lookAt: { type: Object, default: null }, + autoRemove: { type: Boolean, default: true }, }, // can't use setup because it will not be used in sub components // setup() {}, - unmounted: function unmounted() { - if (this._parent) { this._parent.remove(this.o3d); } + unmounted() { + if (this.autoRemove) this.removeFromParent(); }, methods: { - initObject3D: function initObject3D(o3d) { - var this$1 = this; - + initObject3D(o3d) { this.o3d = o3d; + this.$emit('created', this.o3d); bindProp(this, 'position', this.o3d); bindProp(this, 'rotation', this.o3d); bindProp(this, 'scale', this.o3d); // TODO : fix lookat.x - if (this.lookAt) { this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); } - vue.watch(function () { return this$1.lookAt; }, function (v) { this$1.o3d.lookAt(v.x, v.y, v.z); }, { deep: true }); + if (this.lookAt) this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); + vue.watch(() => this.lookAt, (v) => { this.o3d.lookAt(v.x, v.y, v.z); }, { deep: true }); - var parent = this.$parent; + this._parent = this.getParent(); + if (this.addToParent()) this.$emit('ready', this); + else console.error('Missing parent (Scene, Group...)'); + }, + getParent() { + let parent = this.$parent; while (parent) { - if (parent.add) { - parent.add(this.o3d); - this._parent = parent; - break; - } + if (parent.add) return parent; parent = parent.$parent; } - if (!this._parent) { console.error('Missing parent (Scene, Group...)'); } + return false; + }, + addToParent(o) { + const o3d = o || this.o3d; + if (this._parent) { + this._parent.add(o3d); + return true; + } + return false; }, - add: function add(o) { this.o3d.add(o); }, - remove: function remove(o) { this.o3d.remove(o); }, + removeFromParent(o) { + const o3d = o || this.o3d; + if (this._parent) { + this._parent.remove(o3d); + return true; + } + return false; + }, + add(o) { this.o3d.add(o); }, + remove(o) { this.o3d.remove(o); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Object3D', -}; +}); -var Group = { +var Group = vue.defineComponent({ name: 'Group', extends: Object3D, - created: function created() { + created() { this.group = new three.Group(); this.initObject3D(this.group); }, __hmrId: 'Group', -}; +}); -var Scene = { +var Scene = vue.defineComponent({ name: 'Scene', inject: ['three'], props: { id: String, background: [String, Number], }, - setup: function setup(props) { - var scene = new three.Scene(); - if (props.background) { scene.background = new three.Color(props.background); } - vue.watch(function () { return props.background; }, function (value) { scene.background.set(value); }); - return { scene: scene }; + setup(props) { + const scene = new three.Scene(); + if (props.background) scene.background = new three.Color(props.background); + vue.watch(() => props.background, (value) => { scene.background.set(value); }); + return { scene }; }, - provide: function provide() { + provide() { return { scene: this.scene, }; }, - mounted: function mounted() { + mounted() { if (!this.three.scene) { this.three.scene = this.scene; } }, methods: { - add: function add(o) { this.scene.add(o); }, - remove: function remove(o) { this.scene.remove(o); }, + add(o) { this.scene.add(o); }, + remove(o) { this.scene.remove(o); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Scene', -}; +}); + +var Raycaster = vue.defineComponent({ + name: 'Raycaster', + inject: ['three', 'rendererComponent'], + props: { + onPointerEnter: { type: Function, default: () => {} }, + onPointerOver: { type: Function, default: () => {} }, + onPointerMove: { type: Function, default: () => {} }, + onPointerLeave: { type: Function, default: () => {} }, + onClick: { type: Function, default: () => {} }, + intersectMode: { type: String, default: 'move' }, + }, + mounted() { + this.rendererComponent.onMounted(() => { + this.pointer = usePointer({ + camera: this.three.camera, + domElement: this.three.renderer.domElement, + intersectObjects: this.getIntersectObjects(), + onIntersectEnter: this.onPointerEnter, + onIntersectOver: this.onPointerOver, + onIntersectMove: this.onPointerMove, + onIntersectLeave: this.onPointerLeave, + onIntersectClick: this.onClick, + }); + this.pointer.addListeners(); + + if (this.intersectMode === 'frame') { + this.three.onBeforeRender(this.pointer.intersect); + } + }); + }, + unmounted() { + if (this.pointer) { + this.pointer.removeListeners(); + this.three.offBeforeRender(this.pointer.intersect); + } + }, + methods: { + getIntersectObjects() { + return this.three.scene.children.filter(e => e.type === 'Mesh'); + }, + }, + render() { + return []; + }, + __hmrId: 'Raycaster', +}); -var Geometry = { +const Geometry = vue.defineComponent({ inject: ['mesh'], props: { rotateX: Number, rotateY: Number, rotateZ: Number, }, - created: function created() { - var this$1 = this; - + created() { if (!this.mesh) { console.error('Missing parent Mesh'); } this.watchProps = []; - Object.entries(this.$props).forEach(function (e) { return this$1.watchProps.push(e[0]); }); + Object.entries(this.$props).forEach(e => this.watchProps.push(e[0])); this.createGeometry(); this.rotateGeometry(); @@ -703,272 +883,304 @@ var Geometry = { this.addWatchers(); }, - unmounted: function unmounted() { + unmounted() { this.geometry.dispose(); }, methods: { - addWatchers: function addWatchers() { - var this$1 = this; - - this.watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); + addWatchers() { + this.watchProps.forEach(prop => { + vue.watch(() => this[prop], () => { + this.refreshGeometry(); }); }); }, - rotateGeometry: function rotateGeometry() { - if (this.rotateX) { this.geometry.rotateX(this.rotateX); } - if (this.rotateY) { this.geometry.rotateY(this.rotateY); } - if (this.rotateZ) { this.geometry.rotateZ(this.rotateZ); } + rotateGeometry() { + if (this.rotateX) this.geometry.rotateX(this.rotateX); + if (this.rotateY) this.geometry.rotateY(this.rotateY); + if (this.rotateZ) this.geometry.rotateZ(this.rotateZ); }, - refreshGeometry: function refreshGeometry() { - var oldGeo = this.geometry; + refreshGeometry() { + const oldGeo = this.geometry; this.createGeometry(); this.rotateGeometry(); this.mesh.setGeometry(this.geometry); oldGeo.dispose(); }, }, - render: function render() { return []; }, -}; + render() { return []; }, +}); -var BoxGeometry = { - extends: Geometry, - props: { - size: Number, - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - depth: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - depthSegments: { type: Number, default: 1 }, - }, - methods: { - createGeometry: function createGeometry() { - var w = this.width, h = this.height, d = this.depth; - if (this.size) { - w = this.size; h = this.size; d = this.size; - } - this.geometry = new three.BoxGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments); +function geometryComponent(name, props, createGeometry) { + return vue.defineComponent({ + name, + extends: Geometry, + props, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, }, - }, + }); +} + +const props$h = { + size: Number, + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + depth: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + depthSegments: { type: Number, default: 1 }, }; -var CircleGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - segments: { type: Number, default: 8 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.CircleGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$f(comp) { + if (comp.size) { + return new three.BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } else { + return new three.BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } +} +var BoxGeometry = geometryComponent('BoxGeometry', props$h, createGeometry$f); + +const props$g = { + radius: { type: Number, default: 1 }, + segments: { type: Number, default: 8 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var ConeGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.ConeGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$e(comp) { + return new three.CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength); +} +var CircleGeometry = geometryComponent('CircleGeometry', props$g, createGeometry$e); + +const props$f = { + radius: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var CylinderGeometry = { - extends: Geometry, - props: { - radiusTop: { type: Number, default: 1 }, - radiusBottom: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.CylinderGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$d(comp) { + return new three.ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var ConeGeometry = geometryComponent('ConeGeometry', props$f, createGeometry$d); + +const props$e = { + radiusTop: { type: Number, default: 1 }, + radiusBottom: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var DodecahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.DodecahedronGeometry(this.radius, this.detail); - }, - }, +function createGeometry$c(comp) { + return new three.CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var CylinderGeometry = geometryComponent('CylinderGeometry', props$e, createGeometry$c); + +const props$d = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var IcosahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.IcosahedronGeometry(this.radius, this.detail); - }, - }, +function createGeometry$b(comp) { + return new three.DodecahedronGeometry(comp.radius, comp.detail); +} +var DodecahedronGeometry = geometryComponent('DodecahedronGeometry', props$d, createGeometry$b); + +const props$c = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var LatheGeometry = { - extends: Geometry, - props: { - points: Array, - segments: { type: Number, default: 12 }, - phiStart: { type: Number, default: 0 }, - phiLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.LatheGeometry(this.points, this.segments, this.phiStart, this.phiLength); - }, - }, +function createGeometry$a(comp) { + return new three.IcosahedronGeometry(comp.radius, comp.detail); +} +var IcosahedronGeometry = geometryComponent('IcosahedronGeometry', props$c, createGeometry$a); + +const props$b = { + points: Array, + segments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 }, }; -var OctahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.OctahedronGeometry(this.radius, this.detail); - }, - }, +function createGeometry$9(comp) { + return new three.LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength); +} +var LatheGeometry = geometryComponent('LatheGeometry', props$b, createGeometry$9); + +const props$a = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var PolyhedronGeometry = { - extends: Geometry, - props: { - vertices: Array, - indices: Array, - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.PolyhedronGeometry(this.vertices, this.indices, this.radius, this.detail); - }, - }, +function createGeometry$8(comp) { + return new three.OctahedronGeometry(comp.radius, comp.detail); +} +var OctahedronGeometry = geometryComponent('OctahedronGeometry', props$a, createGeometry$8); + +const props$9 = { + vertices: Array, + indices: Array, + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var RingGeometry = { - extends: Geometry, - props: { - innerRadius: { type: Number, default: 0.5 }, - outerRadius: { type: Number, default: 1 }, - thetaSegments: { type: Number, default: 8 }, - phiSegments: { type: Number, default: 1 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.RingGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$7(comp) { + return new three.PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail); +} +var PolyhedronGeometry = geometryComponent('PolyhedronGeometry', props$9, createGeometry$7); + +const props$8 = { + innerRadius: { type: Number, default: 0.5 }, + outerRadius: { type: Number, default: 1 }, + thetaSegments: { type: Number, default: 8 }, + phiSegments: { type: Number, default: 1 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var SphereGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 12 }, - heightSegments: { type: Number, default: 12 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.SphereGeometry(this.radius, this.widthSegments, this.heightSegments); - }, - }, +function createGeometry$6(comp) { + return new three.RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength); +} +var RingGeometry = geometryComponent('RingGeometry', props$8, createGeometry$6); + +const props$7 = { + radius: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 12 }, + heightSegments: { type: Number, default: 12 }, }; -var TetrahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TetrahedronGeometry(this.radius, this.detail); - }, - }, +function createGeometry$5(comp) { + return new three.SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments); +} +var SphereGeometry = geometryComponent('SphereGeometry', props$7, createGeometry$5); + +const props$6 = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var TorusGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - tube: { type: Number, default: 0.4 }, - radialSegments: { type: Number, default: 8 }, - tubularSegments: { type: Number, default: 6 }, - arc: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TorusGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc); - }, - }, +function createGeometry$4(comp) { + return new three.TetrahedronGeometry(comp.radius, comp.detail); +} +var TetrahedronGeometry = geometryComponent('TetrahedronGeometry', props$6, createGeometry$4); + +const props$5 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + radialSegments: { type: Number, default: 8 }, + tubularSegments: { type: Number, default: 6 }, + arc: { type: Number, default: Math.PI * 2 }, }; -var TorusKnotGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - tube: { type: Number, default: 0.4 }, - tubularSegments: { type: Number, default: 64 }, - radialSegments: { type: Number, default: 8 }, - p: { type: Number, default: 2 }, - q: { type: Number, default: 3 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TorusKnotGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q); - }, - }, +function createGeometry$3(comp) { + return new three.TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc); +} +var TorusGeometry = geometryComponent('TorusGeometry', props$5, createGeometry$3); + +const props$4 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + tubularSegments: { type: Number, default: 64 }, + radialSegments: { type: Number, default: 8 }, + p: { type: Number, default: 2 }, + q: { type: Number, default: 3 }, }; -var TubeGeometry = { +function createGeometry$2(comp) { + return new three.TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q); +} +var TorusKnotGeometry = geometryComponent('TorusKnotGeometry', props$4, createGeometry$2); + +const props$3 = { + points: Array, + path: three.Curve, + tubularSegments: { type: Number, default: 64 }, + radius: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + closed: { type: Boolean, default: false }, +}; + +function createGeometry$1(comp) { + let curve; + if (comp.points) { + curve = new three.CatmullRomCurve3(comp.points); + } else if (comp.path) { + curve = comp.path; + } else { + console.error('Missing path curve or points.'); + } + return new three.TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed); +} +var TubeGeometry = vue.defineComponent({ extends: Geometry, - props: { - path: three.Curve, - tubularSegments: { type: Number, default: 64 }, - radius: { type: Number, default: 1 }, - radiusSegments: { type: Number, default: 8 }, - closed: { type: Boolean, default: false }, - }, + props: props$3, methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TubeGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed); + createGeometry() { + this.geometry = createGeometry$1(this); + }, + // update points (without using prop, faster) + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); }, }, -}; +}); -var Light = { +function updateTubeGeometryPoints(tube, points) { + const curve = new three.CatmullRomCurve3(points); + const { radialSegments, radius, tubularSegments, closed } = tube.parameters; + const frames = curve.computeFrenetFrames(tubularSegments, closed); + tube.tangents = frames.tangents; + tube.normals = frames.normals; + tube.binormals = frames.binormals; + tube.parameters.path = curve; + + const pArray = tube.attributes.position.array; + const nArray = tube.attributes.normal.array; + const normal = new three.Vector3(); + let P; + + for (let i = 0; i < tubularSegments; i++) { + updateSegment(i); + } + updateSegment(tubularSegments); + + tube.attributes.position.needsUpdate = true; + tube.attributes.normal.needsUpdate = true; + + function updateSegment(i) { + P = curve.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = (cos * N.x + sin * B.x); + normal.y = (cos * N.y + sin * B.y); + normal.z = (cos * N.z + sin * B.z); + normal.normalize(); + const index = (i * (radialSegments + 1) + j) * 3; + nArray[index] = normal.x; + nArray[index + 1] = normal.y; + nArray[index + 2] = normal.z; + pArray[index] = P.x + radius * normal.x; + pArray[index + 1] = P.y + radius * normal.y; + pArray[index + 2] = P.z + radius * normal.z; + } + } +} + +var Light = vue.defineComponent({ extends: Object3D, name: 'Light', props: { @@ -980,13 +1192,11 @@ var Light = { }, // can't use setup because it will not be used in sub components // setup() {}, - unmounted: function unmounted() { - if (this.light.target) { this.$parent.remove(this.light.target); } + unmounted() { + if (this.light.target) this.removeFromParent(this.light.target); }, methods: { - initLight: function initLight() { - var this$1 = this; - + initLight() { if (this.light.target) { bindProp(this, 'target', this.light.target, 'position'); } @@ -997,60 +1207,58 @@ var Light = { setFromProp(this.light.shadow.camera, this.shadowCamera); } - ['color', 'intensity', 'castShadow'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { + ['color', 'intensity', 'castShadow'].forEach(p => { + vue.watch(() => this[p], () => { if (p === 'color') { - this$1.light.color.set(this$1.color); + this.light.color.set(this.color); } else { - this$1.light[p] = this$1[p]; + this.light[p] = this[p]; } }); }); this.initObject3D(this.light); - if (this.light.target) { this.$parent.add(this.light.target); } + if (this.light.target) this.addToParent(this.light.target); }, }, __hmrId: 'Light', -}; +}); -var AmbientLight = { +var AmbientLight = vue.defineComponent({ extends: Light, - created: function created() { + created() { this.light = new three.AmbientLight(this.color, this.intensity); this.initLight(); }, __hmrId: 'AmbientLight', -}; +}); -var DirectionalLight = { +var DirectionalLight = vue.defineComponent({ extends: Light, props: { target: Object, }, - created: function created() { + created() { this.light = new three.DirectionalLight(this.color, this.intensity); this.initLight(); }, __hmrId: 'DirectionalLight', -}; +}); -var HemisphereLight = { +var HemisphereLight = vue.defineComponent({ extends: Light, props: { groundColor: { type: String, default: '#444444' }, }, - created: function created() { - var this$1 = this; - + created() { this.light = new three.HemisphereLight(this.color, this.groundColor, this.intensity); - vue.watch(function () { return this$1.groundColor; }, function (value) { this$1.light.groundColor.set(value); }); + vue.watch(() => this.groundColor, (value) => { this.light.groundColor.set(value); }); this.initLight(); }, __hmrId: 'HemisphereLight', -}; +}); -var PointLight = { +var PointLight = vue.defineComponent({ extends: Light, props: { distance: { @@ -1062,46 +1270,44 @@ var PointLight = { default: 1, }, }, - created: function created() { + created() { this.light = new three.PointLight(this.color, this.intensity, this.distance, this.decay); this.initLight(); }, __hmrId: 'PointLight', -}; +}); -var RectAreaLight = { +var RectAreaLight = vue.defineComponent({ extends: Light, props: { width: { type: Number, default: 10 }, height: { type: Number, default: 10 }, helper: Boolean, }, - created: function created() { - var this$1 = this; - + created() { RectAreaLightUniformsLib_js.RectAreaLightUniformsLib.init(); this.light = new three.RectAreaLight(this.color, this.intensity, this.width, this.height); - ['width', 'height'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { - this$1.light[p] = this$1[p]; + ['width', 'height'].forEach(p => { + vue.watch(() => this[p], () => { + this.light[p] = this[p]; }); }); if (this.helper) { this.lightHelper = new RectAreaLightHelper_js.RectAreaLightHelper(this.light); - this.$parent.add(this.lightHelper); + this.light.add(this.lightHelper); } this.initLight(); }, - unmounted: function unmounted() { - if (this.lightHelper) { this.$parent.remove(this.lightHelper); } + unmounted() { + if (this.lightHelper) this.removeFromParent(this.lightHelper); }, __hmrId: 'RectAreaLight', -}; +}); -var SpotLight = { +var SpotLight = vue.defineComponent({ extends: Light, props: { angle: { type: Number, default: Math.PI / 3 }, @@ -1110,21 +1316,19 @@ var SpotLight = { penumbra: { type: Number, default: 0 }, target: Object, }, - created: function created() { - var this$1 = this; - + created() { this.light = new three.SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay); - ['angle', 'decay', 'distance', 'penumbra'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { - this$1.light[p] = this$1[p]; + ['angle', 'decay', 'distance', 'penumbra'].forEach(p => { + vue.watch(() => this[p], () => { + this.light[p] = this[p]; }); }); this.initLight(); }, __hmrId: 'SpotLight', -}; +}); -var Material = { +var Material = vue.defineComponent({ inject: ['three', 'mesh'], props: { color: { type: [String, Number], default: '#ffffff' }, @@ -1136,54 +1340,48 @@ var Material = { transparent: Boolean, vertexColors: Boolean, }, - provide: function provide() { + provide() { return { material: this, }; }, - created: function created() { + created() { this.createMaterial(); this.mesh.setMaterial(this.material); this._addWatchers(); - if (this.addWatchers) { this.addWatchers(); } + if (this.addWatchers) this.addWatchers(); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - setProp: function setProp(key, value, needsUpdate) { - if ( needsUpdate === void 0 ) needsUpdate = false; - + setProp(key, value, needsUpdate = false) { this.material[key] = value; this.material.needsUpdate = needsUpdate; }, - setTexture: function setTexture(texture, key) { - if ( key === void 0 ) key = 'map'; - + setTexture(texture, key = 'map') { this.setProp(key, texture, true); }, - _addWatchers: function _addWatchers() { - var this$1 = this; - - ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { + _addWatchers() { + ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(p => { + vue.watch(() => this[p], () => { if (p === 'color') { - this$1.material.color.set(this$1.color); + this.material.color.set(this.color); } else { - this$1.material[p] = this$1[p]; + this.material[p] = this[p]; } }); }); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Material', -}; +}); -var wireframeProps = { +const wireframeProps = { wireframe: { type: Boolean, default: false }, // not needed for WebGL // wireframeLinecap: { type: String, default: 'round' }, @@ -1191,35 +1389,39 @@ var wireframeProps = { wireframeLinewidth: { type: Number, default: 1 }, // not really useful }; -var BasicMaterial = { +var BasicMaterial = vue.defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.MeshBasicMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'BasicMaterial', -}; +}); -var LambertMaterial = { +var LambertMaterial = vue.defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.MeshLambertMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'LambertMaterial', -}; +}); -var MatcapMaterial = { +var MatcapMaterial = vue.defineComponent({ extends: Material, props: { src: String, @@ -1227,42 +1429,42 @@ var MatcapMaterial = { flatShading: Boolean, }, methods: { - createMaterial: function createMaterial() { - var src = this.name ? getMatcapUrl(this.name) : this.src; - var opts = propsValues(this.$props, ['src', 'name']); + createMaterial() { + const src = this.name ? getMatcapUrl(this.name) : this.src; + const opts = propsValues(this.$props, ['src', 'name']); opts.matcap = new three.TextureLoader().load(src); this.material = new three.MeshMatcapMaterial(opts); }, - addWatchers: function addWatchers() { + addWatchers() { // TODO }, }, __hmrId: 'MatcapMaterial', -}; +}); -var PhongMaterial = { +var PhongMaterial = vue.defineComponent({ extends: Material, - props: Object.assign({}, {emissive: { type: [Number, String], default: 0 }, + props: { + emissive: { type: [Number, String], default: 0 }, emissiveIntensity: { type: Number, default: 1 }, reflectivity: { type: Number, default: 1 }, shininess: { type: Number, default: 30 }, specular: { type: [String, Number], default: 0x111111 }, - flatShading: Boolean}, - wireframeProps), + flatShading: Boolean, + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.MeshPhongMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { - var this$1 = this; - + addWatchers() { // TODO : handle flatShading ? - ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function (value) { + ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(p => { + vue.watch(() => this[p], (value) => { if (p === 'emissive' || p === 'specular') { - this$1.material[p].set(value); + this.material[p].set(value); } else { - this$1.material[p] = value; + this.material[p] = value; } }); }); @@ -1270,9 +1472,9 @@ var PhongMaterial = { }, }, __hmrId: 'PhongMaterial', -}; +}); -var props = { +const props$2 = { aoMapIntensity: { type: Number, default: 1 }, bumpScale: { type: Number, default: 1 }, displacementBias: { type: Number, default: 0 }, @@ -1288,25 +1490,25 @@ var props = { flatShading: Boolean, }; -var StandardMaterial = { +var StandardMaterial = vue.defineComponent({ extends: Material, - props: Object.assign({}, props, - wireframeProps), + props: { + ...props$2, + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.MeshStandardMaterial(propsValues(this.$props, ['normalScale'])); }, - addWatchers: function addWatchers() { - var this$1 = this; - + addWatchers() { // TODO : use setProp, handle flatShading ? - Object.keys(props).forEach(function (p) { - if (p === 'normalScale') { return; } - vue.watch(function () { return this$1[p]; }, function (value) { + Object.keys(props$2).forEach(p => { + if (p === 'normalScale') return; + vue.watch(() => this[p], (value) => { if (p === 'emissive') { - this$1.material[p].set(value); + this.material[p].set(value); } else { - this$1.material[p] = value; + this.material[p] = value; } }); }); @@ -1315,57 +1517,73 @@ var StandardMaterial = { }, }, __hmrId: 'StandardMaterial', -}; +}); -var PhysicalMaterial = { +var PhysicalMaterial = vue.defineComponent({ extends: StandardMaterial, props: { flatShading: Boolean, }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.MeshPhysicalMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { // TODO }, }, __hmrId: 'PhysicalMaterial', -}; +}); + +const defaultVertexShader = ` +varying vec2 vUv; +void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); +}`; + +const defaultFragmentShader = ` +varying vec2 vUv; +void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); +}`; -var ShaderMaterial = { +var ShaderMaterial = vue.defineComponent({ inject: ['three', 'mesh'], props: { - uniforms: { type: Object, default: function () { return {}; } }, + uniforms: { type: Object, default: () => { return {}; } }, vertexShader: { type: String, default: defaultVertexShader }, fragmentShader: { type: String, default: defaultFragmentShader }, }, - created: function created() { - var this$1 = this; - + provide() { + return { + material: this, + }; + }, + created() { this.createMaterial(); - ['vertexShader', 'fragmentShader'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { + ['vertexShader', 'fragmentShader'].forEach(p => { + vue.watch(() => this[p], () => { // recreate material if we change either shader - this$1.material.dispose(); - this$1.createMaterial(); + this.material.dispose(); + this.createMaterial(); }); }); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.ShaderMaterial(propsValues(this.$props)); this.mesh.setMaterial(this.material); }, }, - render: function render() { - return []; + render() { + return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'ShaderMaterial', -}; +}); /** * ------------------------------------------------------------------------------------------ @@ -1380,10 +1598,10 @@ function replaceAll(string, find, replace) { return string.split(find).join(replace); } -var meshphongFragHead = three.ShaderChunk.meshphong_frag.slice(0, three.ShaderChunk.meshphong_frag.indexOf('void main() {')); -var meshphongFragBody = three.ShaderChunk.meshphong_frag.slice(three.ShaderChunk.meshphong_frag.indexOf('void main() {')); +const meshphongFragHead = three.ShaderChunk.meshphong_frag.slice(0, three.ShaderChunk.meshphong_frag.indexOf('void main() {')); +const meshphongFragBody = three.ShaderChunk.meshphong_frag.slice(three.ShaderChunk.meshphong_frag.indexOf('void main() {')); -var SubsurfaceScatteringShader = { +const SubsurfaceScatteringShader = { uniforms: three.UniformsUtils.merge([ three.ShaderLib.phong.uniforms, @@ -1394,21 +1612,54 @@ var SubsurfaceScatteringShader = { thicknessAttenuation: { value: 0.1 }, thicknessPower: { value: 2.0 }, thicknessScale: { value: 10.0 }, - } ]), - - vertexShader: ("\n #define USE_UV\n " + (three.ShaderChunk.meshphong_vert) + "\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( + }, + ]), + + vertexShader: ` + #define USE_UV + ${three.ShaderChunk.meshphong_vert} + `, + + fragmentShader: ` + #define USE_UV + #define SUBSURFACE + + ${meshphongFragHead} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + ` + meshphongFragBody.replace( '#include ', replaceAll( three.ShaderChunk.lights_fragment_begin, 'RE_Direct( directLight, geometry, material, reflectedLight );', - "\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 " + ` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + ` ) ), }; -var SubSurfaceMaterial = { +var SubSurfaceMaterial = vue.defineComponent({ inject: ['three', 'mesh'], props: { color: { type: String, default: '#ffffff' }, @@ -1422,25 +1673,22 @@ var SubSurfaceMaterial = { opacity: { type: Number, default: 1 }, vertexColors: { type: Boolean, default: false }, }, - created: function created() { + created() { this.createMaterial(); this.mesh.setMaterial(this.material); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - createMaterial: function createMaterial() { - var params = SubsurfaceScatteringShader; - var uniforms = three.UniformsUtils.clone(params.uniforms); - - Object.entries(this.$props).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; + createMaterial() { + const params = SubsurfaceScatteringShader; + const uniforms = three.UniformsUtils.clone(params.uniforms); - var _key = key, _value = value; + Object.entries(this.$props).forEach(([key, value]) => { + let _key = key, _value = value; if (['color', 'thicknessColor'].includes(key)) { - if (key === 'color') { _key = 'diffuse'; } + if (key === 'color') _key = 'diffuse'; _value = new three.Color(value); } if (!['transparent', 'vertexColors'].includes(key)) { @@ -1448,38 +1696,43 @@ var SubSurfaceMaterial = { } }); - this.material = new three.ShaderMaterial(Object.assign({}, params, - {uniforms: uniforms, + this.material = new three.ShaderMaterial({ + ...params, + uniforms, lights: true, transparent: this.transparent, - vertexColors: this.vertexColors})); + vertexColors: this.vertexColors, + }); }, }, - render: function render() { + render() { return []; }, __hmrId: 'SubSurfaceMaterial', -}; +}); -var ToonMaterial = { +var ToonMaterial = vue.defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.MeshToonMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'ToonMaterial', -}; +}); -var Texture = { +var Texture = vue.defineComponent({ inject: ['material'], emits: ['loaded'], props: { - id: { type: String, default: 'map' }, + name: { type: String, default: 'map' }, + uniform: { type: String, default: null }, src: String, onLoad: Function, onProgress: Function, @@ -1493,39 +1746,45 @@ var Texture = { rotation: { type: Number, default: 0 }, center: { type: Object, default: { x: 0, y: 0 } }, }, - created: function created() { - var this$1 = this; - + created() { this.refreshTexture(); - vue.watch(function () { return this$1.src; }, this.refreshTexture); + vue.watch(() => this.src, this.refreshTexture); }, - unmounted: function unmounted() { - this.material.setTexture(null, this.id); + unmounted() { + if (this.material && this.material.setTexture) this.material.setTexture(null, this.name); this.texture.dispose(); }, methods: { - createTexture: function createTexture() { - var this$1 = this; - + createTexture() { this.texture = new three.TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError); - var wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center']; - wathProps.forEach(function (prop) { - bindProp(this$1, prop, this$1.texture); + const wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center']; + wathProps.forEach(prop => { + bindProp(this, prop, this.texture); }); }, - refreshTexture: function refreshTexture() { + refreshTexture() { this.createTexture(); - this.material.setTexture(this.texture, this.id); + // handle standard material + if (this.material && this.material.setTexture) { this.material.setTexture(this.texture, this.name); } + // handle shader material + else if (this.material && this.material.material.type === "ShaderMaterial") { + // require a `uniform` prop so we know what to call the uniform + if (!this.uniform) { + console.warn('"uniform" prop required to use texture in a shader.'); + return + } + this.material.uniforms[this.uniform] = { value: this.texture }; + } }, - onLoaded: function onLoaded() { - if (this.onLoad) { this.onLoad(); } + onLoaded() { + if (this.onLoad) this.onLoad(); this.$emit('loaded'); }, }, - render: function render() { return []; }, -}; + render() { return []; }, +}); -var CubeTexture = { +var CubeTexture = vue.defineComponent({ inject: ['material'], emits: ['loaded'], props: { @@ -1537,481 +1796,181 @@ var CubeTexture = { onLoad: Function, onProgress: Function, onError: Function, - id: { type: String, default: 'envMap' }, + name: { type: String, default: 'envMap' }, refraction: Boolean, // todo: remove ? refractionRatio: { type: Number, default: 0.98 }, }, - created: function created() { - var this$1 = this; - + created() { this.refreshTexture(); - vue.watch(function () { return this$1.path; }, this.refreshTexture); - vue.watch(function () { return this$1.urls; }, this.refreshTexture); + vue.watch(() => this.path, this.refreshTexture); + vue.watch(() => this.urls, this.refreshTexture); }, - unmounted: function unmounted() { - this.material.setTexture(null, this.id); + unmounted() { + this.material.setTexture(null, this.name); this.texture.dispose(); }, methods: { - createTexture: function createTexture() { + createTexture() { this.texture = new three.CubeTextureLoader() .setPath(this.path) .load(this.urls, this.onLoaded, this.onProgress, this.onError); }, - refreshTexture: function refreshTexture() { + refreshTexture() { this.createTexture(); - this.material.setTexture(this.texture, this.id); + this.material.setTexture(this.texture, this.name); if (this.refraction) { this.texture.mapping = three.CubeRefractionMapping; this.material.setProp('refractionRatio', this.refractionRatio); } }, - onLoaded: function onLoaded() { - if (this.onLoad) { this.onLoad(); } + onLoaded() { + if (this.onLoad) this.onLoad(); this.$emit('loaded'); }, }, - render: function render() { + render() { return []; }, +}); + +const pointerProps = { + onPointerEnter: Function, + onPointerOver: Function, + onPointerMove: Function, + onPointerLeave: Function, + onPointerDown: Function, + onPointerUp: Function, + onClick: Function, }; -var Mesh = { - extends: Object3D, +const Mesh = vue.defineComponent({ name: 'Mesh', + extends: Object3D, props: { castShadow: Boolean, receiveShadow: Boolean, - onHover: Function, - onClick: Function, + ...pointerProps, }, // can't use setup because it will not be used in sub components // setup() {}, - provide: function provide() { + provide() { return { mesh: this, }; }, - mounted: function mounted() { - if (!this.mesh && !this.loading) { this.initMesh(); } + mounted() { + if (!this.mesh && !this.loading) this.initMesh(); }, methods: { - initMesh: function initMesh() { - var this$1 = this; - + initMesh() { this.mesh = new three.Mesh(this.geometry, this.material); - - ['castShadow', 'receiveShadow'].forEach(function (p) { - this$1.mesh[p] = this$1[p]; - vue.watch(function () { return this$1[p]; }, function () { this$1.mesh[p] = this$1[p]; }); - }); - - if (this.onHover) { - this.mesh.onHover = function (over) { this$1.onHover({ component: this$1, over: over }); }; - this.three.addIntersectObject(this.mesh); - } - - if (this.onClick) { - this.mesh.onClick = function (e) { this$1.onClick({ component: this$1, event: e }); }; + this.mesh.component = this; + + bindProp(this, 'castShadow', this.mesh); + bindProp(this, 'receiveShadow', this.mesh); + + if (this.onPointerEnter || + this.onPointerOver || + this.onPointerMove || + this.onPointerLeave || + this.onPointerDown || + this.onPointerUp || + this.onClick) { this.three.addIntersectObject(this.mesh); } this.initObject3D(this.mesh); }, - setGeometry: function setGeometry(geometry) { + addGeometryWatchers(props) { + Object.keys(props).forEach(prop => { + vue.watch(() => this[prop], () => { + this.refreshGeometry(); + }); + }); + }, + setGeometry(geometry) { this.geometry = geometry; - if (this.mesh) { this.mesh.geometry = geometry; } + if (this.mesh) this.mesh.geometry = geometry; }, - setMaterial: function setMaterial(material) { + setMaterial(material) { this.material = material; - if (this.mesh) { this.mesh.material = material; } + if (this.mesh) this.mesh.material = material; }, - refreshGeometry: function refreshGeometry() { - var oldGeo = this.geometry; + refreshGeometry() { + const oldGeo = this.geometry; this.createGeometry(); this.mesh.geometry = this.geometry; oldGeo.dispose(); }, }, - unmounted: function unmounted() { + unmounted() { if (this.mesh) { this.three.removeIntersectObject(this.mesh); - } - // for predefined mesh (geometry and material are not unmounted) - if (this.geometry) { this.geometry.dispose(); } - if (this.material) { this.material.dispose(); } - }, - __hmrId: 'Mesh', -}; - -var Box = { - extends: Mesh, - props: { - size: Number, - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - depth: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - depthSegments: { type: Number, default: 1 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - if (this.size) { - this.geometry = new three.BoxBufferGeometry(this.size, this.size, this.size); - } else { - this.geometry = new three.BoxBufferGeometry(this.width, this.height, this.depth); - } - }, - }, - __hmrId: 'Box', -}; - -var Circle = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - segments: { type: Number, default: 8 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Circle', -}; - -var Cone = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Cone', -}; - -var Cylinder = { - extends: Mesh, - props: { - radiusTop: { type: Number, default: 1 }, - radiusBottom: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Cylinder', -}; - -var Dodecahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.DodecahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Dodecahedron', -}; - -var Icosahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.IcosahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Icosahedron', -}; - -var Lathe = { - extends: Mesh, - props: { - points: Array, - segments: { type: Number, default: 12 }, - phiStart: { type: Number, default: 0 }, - phiLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['points', 'segments', 'phiStart', 'phiLength']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength); - }, - }, - __hmrId: 'Lathe', -}; - -var Octahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, + } + // for predefined mesh (geometry is not unmounted) + if (this.geometry) this.geometry.dispose(); }, - created: function created() { - var this$1 = this; - - this.createGeometry(); + __hmrId: 'Mesh', +}); - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.OctahedronBufferGeometry(this.radius, this.detail); +function meshComponent(name, props, createGeometry) { + return vue.defineComponent({ + name, + extends: Mesh, + props, + created() { + this.createGeometry(); + this.addGeometryWatchers(props); }, - }, - __hmrId: 'Octahedron', -}; + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + }, + __hmrId: name, + }); +} -var Plane = { - extends: Mesh, - props: { - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - }, - created: function created() { - var this$1 = this; +var Box = meshComponent('Box', props$h, createGeometry$f); - this.createGeometry(); +var Circle = meshComponent('Circle', props$g, createGeometry$e); - var watchProps = ['width', 'height', 'widthSegments', 'heightSegments']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments); - }, - }, - __hmrId: 'Plane', -}; +var Cone = meshComponent('Cone', props$f, createGeometry$d); -var Polyhedron = { - extends: Mesh, - props: { - vertices: Array, - indices: Array, - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; +var Cylinder = meshComponent('Cylinder', props$e, createGeometry$c); - this.createGeometry(); +var Dodecahedron = meshComponent('Dodecahedron', props$d, createGeometry$b); - var watchProps = ['vertices', 'indices', 'radius', 'detail']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail); - }, - }, - __hmrId: 'Polyhedron', -}; +var Icosahedron = meshComponent('Icosahedron', props$c, createGeometry$a); -var Ring = { - extends: Mesh, - props: { - innerRadius: { type: Number, default: 0.5 }, - outerRadius: { type: Number, default: 1 }, - thetaSegments: { type: Number, default: 8 }, - phiSegments: { type: Number, default: 1 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; +var Lathe = meshComponent('Lathe', props$b, createGeometry$9); - this.createGeometry(); +var Octahedron = meshComponent('Octahedron', props$a, createGeometry$8); - var watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Ring', +const props$1 = { + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, }; -var Sphere = { - extends: Mesh, - props: { - radius: Number, - widthSegments: { type: Number, default: 12 }, - heightSegments: { type: Number, default: 12 }, - }, - watch: { - radius: function radius() { this.refreshGeometry(); }, - widthSegments: function widthSegments() { this.refreshGeometry(); }, - heightSegments: function heightSegments() { this.refreshGeometry(); }, - }, - created: function created() { - this.createGeometry(); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments); - }, - }, - __hmrId: 'Sphere', -}; +function createGeometry(comp) { + return new three.PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments); +} +geometryComponent('PlaneGeometry', props$1, createGeometry); -var Tetrahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; +var Plane = meshComponent('Plane', props$1, createGeometry); - this.createGeometry(); +var Polyhedron = meshComponent('Polyhedron', props$9, createGeometry$7); - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TetrahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Tetrahedron', -}; +var Ring = meshComponent('Ring', props$8, createGeometry$6); + +var Sphere = meshComponent('Sphere', props$7, createGeometry$5); + +var Tetrahedron = meshComponent('Tetrahedron', props$6, createGeometry$4); -var TextProps = { +const props = { text: String, fontSrc: String, size: { type: Number, default: 80 }, @@ -2026,39 +1985,38 @@ var TextProps = { align: { type: [Boolean, String], default: false }, }; -var Text = { +var Text = vue.defineComponent({ extends: Mesh, - props: Object.assign({}, TextProps), - data: function data() { + props, + data() { return { loading: true, }; }, - created: function created() { - var this$1 = this; - + created() { // add watchers - var watchProps = [ + const watchProps = [ 'text', 'size', 'height', 'curveSegments', 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments', - 'align' ]; - watchProps.forEach(function (p) { - vue.watch(function () { return this$1[p]; }, function () { - if (this$1.font) { this$1.refreshGeometry(); } + 'align', + ]; + watchProps.forEach(p => { + vue.watch(() => this[p], () => { + if (this.font) this.refreshGeometry(); }); }); - var loader = new three.FontLoader(); - loader.load(this.fontSrc, function (font) { - this$1.loading = false; - this$1.font = font; - this$1.createGeometry(); - this$1.initMesh(); + const loader = new three.FontLoader(); + loader.load(this.fontSrc, (font) => { + this.loading = false; + this.font = font; + this.createGeometry(); + this.initMesh(); }); }, methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TextBufferGeometry(this.text, { + createGeometry() { + this.geometry = new three.TextGeometry(this.text, { font: this.font, size: this.size, height: this.height, @@ -2076,161 +2034,32 @@ var Text = { } }, }, -}; - -var Torus = { - extends: Mesh, - props: { - radius: { type: Number, default: 0.5 }, - tube: { type: Number, default: 0.4 }, - radialSegments: { type: Number, default: 8 }, - tubularSegments: { type: Number, default: 6 }, - arc: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc); - }, - }, - __hmrId: 'Torus', -}; - -var TorusKnot = { - extends: Mesh, - props: { - radius: { type: Number, default: 0.5 }, - tube: { type: Number, default: 0.4 }, - tubularSegments: { type: Number, default: 64 }, - radialSegments: { type: Number, default: 8 }, - p: { type: Number, default: 2 }, - q: { type: Number, default: 3 }, - }, - created: function created() { - var this$1 = this; +}); - this.createGeometry(); +var Torus = meshComponent('Torus', props$5, createGeometry$3); - var watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new three.TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q); - }, - }, - __hmrId: 'TorusKnot', -}; +var TorusKnot = meshComponent('TorusKnot', props$4, createGeometry$2); -var Tube = { +var Tube = vue.defineComponent({ extends: Mesh, - props: { - path: three.Curve, - points: Array, - tubularSegments: { type: Number, default: 64 }, - radius: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - closed: { type: Boolean, default: false }, - }, - created: function created() { - var this$1 = this; - + props: props$3, + created() { this.createGeometry(); - var watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed']; - watchProps.forEach(function (prop) { - vue.watch(function () { return this$1[prop]; }, function (v) { - this$1.refreshGeometry(); - }); - }); - vue.watch(function () { return this$1.points; }, function () { - updateTubeGeometryPoints(this$1.geometry, this$1.points); - }); + this.addGeometryWatchers(props$3); }, methods: { - createGeometry: function createGeometry() { - var curve; - if (this.points) { - curve = new three.CatmullRomCurve3(this.points); - } else if (this.path) { - curve = this.path; - } else { - console.error('Missing path curve or points.'); - } - this.geometry = new three.TubeGeometry(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed); + createGeometry() { + this.geometry = createGeometry$1(this); }, // update curve points (without using prop, faster) - updateCurve: function updateCurve(points) { + updatePoints(points) { updateTubeGeometryPoints(this.geometry, points); }, }, __hmrId: 'Tube', -}; - -function updateTubeGeometryPoints(tube, points) { - var curve = new three.CatmullRomCurve3(points); - var ref = tube.parameters; - var radialSegments = ref.radialSegments; - var radius = ref.radius; - var tubularSegments = ref.tubularSegments; - var closed = ref.closed; - var frames = curve.computeFrenetFrames(tubularSegments, closed); - tube.tangents = frames.tangents; - tube.normals = frames.normals; - tube.binormals = frames.binormals; - tube.parameters.path = curve; - - var pArray = tube.attributes.position.array; - var nArray = tube.attributes.normal.array; - var normal = new three.Vector3(); - var P; - - for (var i = 0; i < tubularSegments; i++) { - updateSegment(i); - } - updateSegment(tubularSegments); - - tube.attributes.position.needsUpdate = true; - tube.attributes.normal.needsUpdate = true; - - function updateSegment(i) { - P = curve.getPointAt(i / tubularSegments, P); - var N = frames.normals[i]; - var B = frames.binormals[i]; - for (var j = 0; j <= radialSegments; j++) { - var v = j / radialSegments * Math.PI * 2; - var sin = Math.sin(v); - var cos = -Math.cos(v); - normal.x = (cos * N.x + sin * B.x); - normal.y = (cos * N.y + sin * B.y); - normal.z = (cos * N.z + sin * B.z); - normal.normalize(); - var index = (i * (radialSegments + 1) + j) * 3; - nArray[index] = normal.x; - nArray[index + 1] = normal.y; - nArray[index + 2] = normal.z; - pArray[index] = P.x + radius * normal.x; - pArray[index + 1] = P.y + radius * normal.y; - pArray[index + 2] = P.z + radius * normal.z; - } - } -} +}); -var Gem = { +var Gem = vue.defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2238,22 +2067,23 @@ var Gem = { cubeCameraFar: { type: Number, default: 2000 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initGem(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.meshBack) { this.$parent.remove(this.meshBack); } - if (this.materialBack) { this.materialBack.dispose(); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); + if (this.meshBack) this.removeFromParent(this.meshBack); + if (this.materialBack) this.materialBack.dispose(); }, methods: { - initGem: function initGem() { - var cubeRT = new three.WebGLCubeRenderTarget(this.cubeRTSize, { format: three.RGBFormat, generateMipmaps: true, minFilter: three.LinearMipmapLinearFilter }); + initGem() { + const cubeRT = new three.WebGLCubeRenderTarget(this.cubeRTSize, { format: three.RGBFormat, generateMipmaps: true, minFilter: three.LinearMipmapLinearFilter }); this.cubeCamera = new three.CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); bindProp(this, 'position', this.cubeCamera); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.side = three.FrontSide; this.material.envMap = cubeRT.texture; @@ -2277,9 +2107,9 @@ var Gem = { bindProp(this, 'position', this.meshBack); bindProp(this, 'rotation', this.meshBack); bindProp(this, 'scale', this.meshBack); - this.$parent.add(this.meshBack); + this.addToParent(this.meshBack); }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.meshBack.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); @@ -2288,9 +2118,9 @@ var Gem = { }, }, __hmrId: 'Gem', -}; +}); -var Image = { +var Image = vue.defineComponent({ emits: ['loaded'], extends: Mesh, props: { @@ -2299,48 +2129,46 @@ var Image = { height: Number, keepSize: Boolean, }, - created: function created() { - var this$1 = this; - + created() { this.createGeometry(); this.createMaterial(); this.initMesh(); - vue.watch(function () { return this$1.src; }, this.refreshTexture); + vue.watch(() => this.src, this.refreshTexture); - ['width', 'height'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, this$1.resize); + ['width', 'height'].forEach(p => { + vue.watch(() => this[p], this.resize); }); - if (this.keepSize) { this.three.onAfterResize(this.resize); } + if (this.keepSize) this.three.onAfterResize(this.resize); }, methods: { - createGeometry: function createGeometry() { - this.geometry = new three.PlaneBufferGeometry(1, 1, 1, 1); + createGeometry() { + this.geometry = new three.PlaneGeometry(1, 1, 1, 1); }, - createMaterial: function createMaterial() { + createMaterial() { this.material = new three.MeshBasicMaterial({ side: three.DoubleSide, map: this.loadTexture() }); }, - loadTexture: function loadTexture() { + loadTexture() { return new three.TextureLoader().load(this.src, this.onLoaded); }, - refreshTexture: function refreshTexture() { - if (this.texture) { this.texture.dispose(); } + refreshTexture() { + if (this.texture) this.texture.dispose(); this.material.map = this.loadTexture(); this.material.needsUpdate = true; }, - onLoaded: function onLoaded(texture) { + onLoaded(texture) { this.texture = texture; this.resize(); this.$emit('loaded'); }, - resize: function resize() { - if (!this.texture) { return; } - var screen = this.three.size; - var iW = this.texture.image.width; - var iH = this.texture.image.height; - var iRatio = iW / iH; - var w, h; + resize() { + if (!this.texture) return; + const screen = this.three.size; + const iW = this.texture.image.width; + const iH = this.texture.image.height; + const iRatio = iW / iH; + let w, h; if (this.width && this.height) { w = this.width * screen.wWidth / screen.width; h = this.height * screen.wHeight / screen.height; @@ -2356,54 +2184,68 @@ var Image = { }, }, __hmrId: 'Image', -}; +}); -var InstancedMesh = { +var InstancedMesh = vue.defineComponent({ extends: Object3D, props: { castShadow: Boolean, receiveShadow: Boolean, count: Number, + ...pointerProps, }, - provide: function provide() { + provide() { return { mesh: this, }; }, - beforeMount: function beforeMount() { + beforeMount() { if (!this.$slots.default) { console.error('Missing Geometry'); } }, - created: function created() { + mounted() { this.initMesh(); }, methods: { - initMesh: function initMesh() { - var this$1 = this; - + initMesh() { this.mesh = new three.InstancedMesh(this.geometry, this.material, this.count); - - ['castShadow', 'receiveShadow'].forEach(function (p) { - this$1.mesh[p] = this$1[p]; - vue.watch(function () { return this$1[p]; }, function () { this$1.mesh[p] = this$1[p]; }); - }); + this.mesh.component = this; + + bindProp(this, 'castShadow', this.mesh); + bindProp(this, 'receiveShadow', this.mesh); + + if (this.onPointerEnter || + this.onPointerOver || + this.onPointerMove || + this.onPointerLeave || + this.onPointerDown || + this.onPointerUp || + this.onClick) { + this.three.addIntersectObject(this.mesh); + } this.initObject3D(this.mesh); }, - setGeometry: function setGeometry(geometry) { + setGeometry(geometry) { this.geometry = geometry; - if (this.mesh) { this.mesh.geometry = geometry; } + if (this.mesh) this.mesh.geometry = geometry; }, - setMaterial: function setMaterial(material) { + setMaterial(material) { this.material = material; - if (this.mesh) { this.mesh.material = material; } + this.material.instancingColor = true; + if (this.mesh) this.mesh.material = material; }, }, + unmounted() { + if (this.mesh) { + this.three.removeIntersectObject(this.mesh); + } + }, __hmrId: 'InstancedMesh', -}; +}); -var MirrorMesh = { +var MirrorMesh = vue.defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2411,34 +2253,34 @@ var MirrorMesh = { cubeCameraFar: { type: Number, default: 2000 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initMirrorMesh(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.cubeCamera) { this.$parent.remove(this.cubeCamera); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); }, methods: { - initMirrorMesh: function initMirrorMesh() { - var cubeRT = new three.WebGLCubeRenderTarget(this.cubeRTSize, { format: three.RGBFormat, generateMipmaps: true, minFilter: three.LinearMipmapLinearFilter }); + initMirrorMesh() { + const cubeRT = new three.WebGLCubeRenderTarget(this.cubeRTSize, { format: three.RGBFormat, generateMipmaps: true, minFilter: three.LinearMipmapLinearFilter }); this.cubeCamera = new three.CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.envMap = cubeRT.texture; this.material.needsUpdate = true; }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); this.mesh.visible = true; }, }, __hmrId: 'MirrorMesh', -}; +}); -var RefractionMesh = { +var RefractionMesh = vue.defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2447,76 +2289,76 @@ var RefractionMesh = { refractionRatio: { type: Number, default: 0.98 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initMirrorMesh(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.cubeCamera) { this.$parent.remove(this.cubeCamera); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); }, methods: { - initMirrorMesh: function initMirrorMesh() { - var cubeRT = new three.WebGLCubeRenderTarget(this.cubeRTSize, { mapping: three.CubeRefractionMapping, format: three.RGBFormat, generateMipmaps: true, minFilter: three.LinearMipmapLinearFilter }); + initMirrorMesh() { + const cubeRT = new three.WebGLCubeRenderTarget(this.cubeRTSize, { mapping: three.CubeRefractionMapping, format: three.RGBFormat, generateMipmaps: true, minFilter: three.LinearMipmapLinearFilter }); this.cubeCamera = new three.CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); bindProp(this, 'position', this.cubeCamera); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.envMap = cubeRT.texture; this.material.refractionRatio = this.refractionRatio; this.material.needsUpdate = true; }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); this.mesh.visible = true; }, }, __hmrId: 'RefractionMesh', -}; +}); -var Sprite = { +var Sprite = vue.defineComponent({ extends: Object3D, emits: ['loaded'], props: { src: String, }, - data: function data() { + data() { return { loading: true, }; }, - created: function created() { + created() { this.texture = new three.TextureLoader().load(this.src, this.onLoaded); this.material = new three.SpriteMaterial({ map: this.texture }); this.sprite = new three.Sprite(this.material); this.geometry = this.sprite.geometry; this.initObject3D(this.sprite); }, - unmounted: function unmounted() { + unmounted() { this.texture.dispose(); this.material.dispose(); }, methods: { - onLoaded: function onLoaded() { + onLoaded() { this.loading = false; this.updateUV(); this.$emit('loaded'); }, - updateUV: function updateUV() { + updateUV() { this.iWidth = this.texture.image.width; this.iHeight = this.texture.image.height; this.iRatio = this.iWidth / this.iHeight; - var x = 0.5, y = 0.5; + let x = 0.5, y = 0.5; if (this.iRatio > 1) { y = 0.5 / this.iRatio; } else { x = 0.5 / this.iRatio; } - var positions = this.geometry.attributes.position.array; + const positions = this.geometry.attributes.position.array; positions[0] = -x; positions[1] = -y; positions[5] = x; positions[6] = -y; positions[10] = x; positions[11] = y; @@ -2525,116 +2367,136 @@ var Sprite = { }, }, __hmrId: 'Sprite', -}; +}); -var GLTF = { +var Model = vue.defineComponent({ extends: Object3D, - emits: ['loaded'], + emits: ['load', 'progress', 'error'], + data() { + return { + progress: 0, + }; + }, + methods: { + onLoad(model) { + this.$emit('load', model); + this.initObject3D(model); + }, + onProgress(progress) { + this.progress = progress.loaded / progress.total; + this.$emit('progress', progress); + }, + onError(error) { + this.$emit('error', error); + }, + }, +}); + +var GLTF = vue.defineComponent({ + extends: Model, props: { src: String, }, - created: function created() { - var this$1 = this; - - var loader = new GLTFLoader_js.GLTFLoader(); - loader.load(this.src, function (gltf) { - this$1.$emit('loaded', gltf); - this$1.initObject3D(gltf.scene); - }); + created() { + const loader = new GLTFLoader_js.GLTFLoader(); + loader.load(this.src, (gltf) => { + this.onLoad(gltf.scene); + }, this.onProgress, this.onError); }, -}; +}); -var FBX = { - extends: Object3D, - emits: ['loaded'], +var FBX = vue.defineComponent({ + extends: Model, props: { src: String, }, - created: function created() { - var this$1 = this; - - var loader = new FBXLoader_js.FBXLoader(); - loader.load(this.src, function (fbx) { - this$1.$emit('loaded', fbx); - this$1.initObject3D(fbx); - }); + created() { + const loader = new FBXLoader_js.FBXLoader(); + loader.load(this.src, (fbx) => { + this.onLoad(fbx); + }, this.onProgress, this.onError); }, -}; +}); -var EffectComposer = { - setup: function setup() { +var EffectComposer = vue.defineComponent({ + setup() { return { passes: [], }; }, inject: ['three'], - provide: function provide() { + provide() { return { passes: this.passes, }; }, - mounted: function mounted() { - var this$1 = this; - - this.three.onAfterInit(function () { - this$1.composer = new EffectComposer_js.EffectComposer(this$1.three.renderer); - this$1.three.renderer.autoClear = false; - this$1.passes.forEach(function (pass) { - this$1.composer.addPass(pass); + mounted() { + this.three.onAfterInit(() => { + this.composer = new EffectComposer_js.EffectComposer(this.three.renderer); + this.three.renderer.autoClear = false; + this.passes.forEach(pass => { + this.composer.addPass(pass); }); - this$1.three.composer = this$1.composer; + this.three.composer = this.composer; - this$1.resize(); - this$1.three.onAfterResize(this$1.resize); + this.resize(); + this.three.onAfterResize(this.resize); }); }, - unmounted: function unmounted() { + unmounted() { this.three.offAfterResize(this.resize); }, methods: { - resize: function resize() { + resize() { this.composer.setSize(this.three.size.width, this.three.size.height); }, }, - render: function render() { + render() { return this.$slots.default(); }, __hmrId: 'EffectComposer', -}; +}); -var EffectPass = { +var EffectPass = vue.defineComponent({ inject: ['three', 'passes'], - beforeMount: function beforeMount() { + emits: ['ready'], + beforeMount() { if (!this.passes) { console.error('Missing parent EffectComposer'); } }, - unmounted: function unmounted() { - if (this.pass.dispose) { this.pass.dispose(); } + unmounted() { + if (this.pass.dispose) this.pass.dispose(); + }, + methods: { + completePass(pass) { + this.passes.push(pass); + this.pass = pass; + this.$emit('ready', pass); + }, }, - render: function render() { + render() { return []; }, __hmrId: 'EffectPass', -}; +}); -var RenderPass = { +var RenderPass = vue.defineComponent({ extends: EffectPass, - mounted: function mounted() { + mounted() { if (!this.three.scene) { console.error('Missing Scene'); } if (!this.three.camera) { console.error('Missing Camera'); } - var pass = new RenderPass_js.RenderPass(this.three.scene, this.three.camera); - this.passes.push(pass); - this.pass = pass; + const pass = new RenderPass_js.RenderPass(this.three.scene, this.three.camera); + this.completePass(pass); }, __hmrId: 'RenderPass', -}; +}); -var BokehPass = { +var BokehPass = vue.defineComponent({ extends: EffectPass, props: { focus: { @@ -2651,90 +2513,74 @@ var BokehPass = { }, }, watch: { - focus: function focus() { this.pass.uniforms.focus.value = this.focus; }, - aperture: function aperture() { this.pass.uniforms.aperture.value = this.aperture; }, - maxblur: function maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; }, + focus() { this.pass.uniforms.focus.value = this.focus; }, + aperture() { this.pass.uniforms.aperture.value = this.aperture; }, + maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; }, }, - mounted: function mounted() { + mounted() { if (!this.three.scene) { console.error('Missing Scene'); } if (!this.three.camera) { console.error('Missing Camera'); } - var params = { + const params = { focus: this.focus, aperture: this.aperture, maxblur: this.maxblur, width: this.three.size.width, height: this.three.size.height, }; - var pass = new BokehPass_js.BokehPass(this.three.scene, this.three.camera, params); - this.passes.push(pass); - this.pass = pass; + const pass = new BokehPass_js.BokehPass(this.three.scene, this.three.camera, params); + this.completePass(pass); }, __hmrId: 'BokehPass', -}; +}); -var FilmPass = { +var FilmPass = vue.defineComponent({ extends: EffectPass, props: { - noiseIntensity: { - type: Number, - default: 0.5, - }, - scanlinesIntensity: { - type: Number, - default: 0.05, - }, - scanlinesCount: { - type: Number, - default: 4096, - }, - grayscale: { - type: Number, - default: 0, - }, + noiseIntensity: { type: Number, default: 0.5 }, + scanlinesIntensity: { type: Number, default: 0.05 }, + scanlinesCount: { type: Number, default: 4096 }, + grayscale: { type: Number, default: 0 }, }, watch: { - noiseIntensity: function noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; }, - scanlinesIntensity: function scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; }, - scanlinesCount: function scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; }, - grayscale: function grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; }, + noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; }, + scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; }, + scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; }, + grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; }, }, - mounted: function mounted() { - var pass = new FilmPass_js.FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); - this.passes.push(pass); - this.pass = pass; + mounted() { + const pass = new FilmPass_js.FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); + this.completePass(pass); }, __hmrId: 'FilmPass', -}; +}); -var FXAAPass = { +var FXAAPass = vue.defineComponent({ extends: EffectPass, - mounted: function mounted() { - var pass = new ShaderPass_js.ShaderPass(FXAAShader_js.FXAAShader); - this.passes.push(pass); - this.pass = pass; + mounted() { + const pass = new ShaderPass_js.ShaderPass(FXAAShader_js.FXAAShader); + this.completePass(pass); // resize will be called in three init this.three.onAfterResize(this.resize); }, - unmounted: function unmounted() { + unmounted() { this.three.offAfterResize(this.resize); }, methods: { - resize: function resize() { - var ref = this.pass.material.uniforms; - var resolution = ref.resolution; + resize() { + const { resolution } = this.pass.material.uniforms; resolution.value.x = 1 / this.three.size.width; resolution.value.y = 1 / this.three.size.height; }, }, __hmrId: 'FXAAPass', -}; +}); -var HalftonePass = { +var HalftonePass = vue.defineComponent({ extends: EffectPass, props: { shape: { type: Number, default: 1 }, @@ -2744,39 +2590,73 @@ var HalftonePass = { rotateB: { type: Number, default: Math.PI / 12 * 3 }, scatter: { type: Number, default: 0 }, }, - mounted: function mounted() { - var this$1 = this; + mounted() { + const pass = new HalftonePass_js.HalftonePass(this.three.size.width, this.three.size.height, {}); - var pass = new HalftonePass_js.HalftonePass(this.three.size.width, this.three.size.height, {}); - - ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(function (p) { - pass.uniforms[p].value = this$1[p]; - vue.watch(function () { return this$1[p]; }, function () { - pass.uniforms[p].value = this$1[p]; + ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => { + pass.uniforms[p].value = this[p]; + vue.watch(() => this[p], () => { + pass.uniforms[p].value = this[p]; }); }); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'HalftonePass', -}; +}); -var SMAAPass = { +var SMAAPass = vue.defineComponent({ extends: EffectPass, - mounted: function mounted() { + mounted() { // three size is not set yet, but this pass will be resized by effect composer - var pass = new SMAAPass_js.SMAAPass(this.three.size.width, this.three.size.height); - this.passes.push(pass); - this.pass = pass; + const pass = new SMAAPass_js.SMAAPass(this.three.size.width, this.three.size.height); + this.completePass(pass); }, __hmrId: 'SMAAPass', -}; +}); + +var SSAOPass = vue.defineComponent({ + extends: EffectPass, + props: { + scene: null, + camera: null, + options: { + type: Object, + default: () => ({}), + }, + }, + mounted() { + const pass = new SSAOPass_js.SSAOPass( + this.scene || this.three.scene, + this.camera || this.three.camera, + this.three.size.width, + this.three.size.height + ); + + for (const key of Object.keys(this.options)) { + pass[key] = this.options[key]; + } + + this.completePass(pass); + }, + __hmrId: 'SSAOPass', +}); var DefaultShader = { uniforms: {}, - vertexShader: "\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ", - fragmentShader: "\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n ", + vertexShader: ` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `, + fragmentShader: ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + `, }; // From https://github.com/evanw/glfx.js @@ -2792,10 +2672,53 @@ var TiltShift = { texSize: { value: new three.Vector2() }, }, vertexShader: DefaultShader.vertexShader, - 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 ", + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `, }; -var TiltShiftPass = { +var TiltShiftPass = vue.defineComponent({ extends: EffectPass, props: { blurRadius: { type: Number, default: 10 }, @@ -2803,17 +2726,15 @@ var TiltShiftPass = { start: { type: Object, default: { x: 0, y: 100 } }, end: { type: Object, default: { x: 10, y: 100 } }, }, - mounted: function mounted() { - var this$1 = this; - + mounted() { this.pass = new ShaderPass_js.ShaderPass(TiltShift); this.passes.push(this.pass); this.pass1 = new ShaderPass_js.ShaderPass(TiltShift); this.passes.push(this.pass1); - var uniforms = this.uniforms = this.pass.uniforms; - var uniforms1 = this.uniforms1 = this.pass1.uniforms; + const uniforms = this.uniforms = this.pass.uniforms; + const uniforms1 = this.uniforms1 = this.pass1.uniforms; uniforms1.blurRadius = uniforms.blurRadius; uniforms1.gradientRadius = uniforms.gradientRadius; uniforms1.start = uniforms.start; @@ -2824,27 +2745,31 @@ var TiltShiftPass = { bindProp(this, 'gradientRadius', uniforms.gradientRadius, 'value'); this.updateFocusLine(); - ['start', 'end'].forEach(function (p) { - vue.watch(function () { return this$1[p]; }, this$1.updateFocusLine, { deep: true }); + ['start', 'end'].forEach(p => { + vue.watch(() => this[p], this.updateFocusLine, { deep: true }); }); - this.pass.setSize = function (width, height) { + this.pass.setSize = (width, height) => { uniforms.texSize.value.set(width, height); }; + + // emit ready event with two passes - do so manually in this file instead + // of calling `completePass` like in other effect types + this.$emit('ready', [this.pass, this.pass1]); }, methods: { - updateFocusLine: function updateFocusLine() { + updateFocusLine() { this.uniforms.start.value.copy(this.start); this.uniforms.end.value.copy(this.end); - var dv = new three.Vector2().copy(this.end).sub(this.start).normalize(); + const dv = new three.Vector2().copy(this.end).sub(this.start).normalize(); this.uniforms.delta.value.copy(dv); this.uniforms1.delta.value.set(-dv.y, dv.x); }, }, __hmrId: 'TiltShiftPass', -}; +}); -var UnrealBloomPass = { +var UnrealBloomPass = vue.defineComponent({ extends: EffectPass, props: { strength: { type: Number, default: 1.5 }, @@ -2852,18 +2777,17 @@ var UnrealBloomPass = { threshold: { type: Number, default: 0 }, }, watch: { - strength: function strength() { this.pass.strength = this.strength; }, - radius: function radius() { this.pass.radius = this.radius; }, - threshold: function threshold() { this.pass.threshold = this.threshold; }, + strength() { this.pass.strength = this.strength; }, + radius() { this.pass.radius = this.radius; }, + threshold() { this.pass.threshold = this.threshold; }, }, - mounted: function mounted() { - var size = new three.Vector2(this.three.size.width, this.three.size.height); - var pass = new UnrealBloomPass_js.UnrealBloomPass(size, this.strength, this.radius, this.threshold); - this.passes.push(pass); - this.pass = pass; + mounted() { + const size = new three.Vector2(this.three.size.width, this.three.size.height); + const pass = new UnrealBloomPass_js.UnrealBloomPass(size, this.strength, this.radius, this.threshold); + this.completePass(pass); }, __hmrId: 'UnrealBloomPass', -}; +}); // From https://github.com/evanw/glfx.js @@ -2874,25 +2798,62 @@ var ZoomBlur = { strength: { value: 0 }, }, vertexShader: DefaultShader.vertexShader, - 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 ", + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `, }; -var ZoomBlurPass = { +var ZoomBlurPass = vue.defineComponent({ extends: EffectPass, props: { center: { type: Object, default: { x: 0.5, y: 0.5 } }, strength: { type: Number, default: 0.5 }, }, - mounted: function mounted() { - this.pass = new ShaderPass_js.ShaderPass(ZoomBlur); - this.passes.push(this.pass); + mounted() { + const pass = new ShaderPass_js.ShaderPass(ZoomBlur); - var uniforms = this.uniforms = this.pass.uniforms; + const uniforms = this.uniforms = pass.uniforms; bindProp(this, 'center', uniforms.center, 'value'); bindProp(this, 'strength', uniforms.strength, 'value'); + + this.completePass(pass); }, __hmrId: 'ZoomBlurPass', -}; +}); var TROIS = /*#__PURE__*/Object.freeze({ __proto__: null, @@ -2902,6 +2863,8 @@ var TROIS = /*#__PURE__*/Object.freeze({ Camera: PerspectiveCamera, Group: Group, Scene: Scene, + Object3D: Object3D, + Raycaster: Raycaster, BoxGeometry: BoxGeometry, CircleGeometry: CircleGeometry, ConeGeometry: ConeGeometry, @@ -2967,6 +2930,7 @@ var TROIS = /*#__PURE__*/Object.freeze({ FXAAPass: FXAAPass, HalftonePass: HalftonePass, SMAAPass: SMAAPass, + SSAOPass: SSAOPass, TiltShiftPass: TiltShiftPass, UnrealBloomPass: UnrealBloomPass, ZoomBlurPass: ZoomBlurPass, @@ -2978,17 +2942,16 @@ var TROIS = /*#__PURE__*/Object.freeze({ lerpv2: lerpv2, lerpv3: lerpv3, limit: limit, - getMatcapUrl: getMatcapUrl, - defaultVertexShader: defaultVertexShader, - defaultFragmentShader: defaultFragmentShader + getMatcapUrl: getMatcapUrl }); -var TroisJSVuePlugin = { - install: function (app) { - var comps = [ +const TroisJSVuePlugin = { + install: (app) => { + const comps = [ 'Camera', 'OrthographicCamera', 'PerspectiveCamera', + 'Raycaster', 'Renderer', 'Scene', 'Group', @@ -3051,13 +3014,15 @@ var TroisJSVuePlugin = { 'RenderPass', 'SAOPass', 'SMAAPass', + 'SSAOPass', 'TiltShiftPass', 'UnrealBloomPass', 'ZoomBlurPass', - 'GLTFViewer' ]; + 'GLTFViewer', + ]; - comps.forEach(function (comp) { + comps.forEach(comp => { app.component(comp, TROIS[comp]); }); }, @@ -3102,6 +3067,7 @@ exports.LatheGeometry = LatheGeometry; exports.MatcapMaterial = MatcapMaterial; exports.Mesh = Mesh; exports.MirrorMesh = MirrorMesh; +exports.Object3D = Object3D; exports.Octahedron = Octahedron; exports.OctahedronGeometry = OctahedronGeometry; exports.OrthographicCamera = OrthographicCamera; @@ -3112,6 +3078,7 @@ exports.Plane = Plane; exports.PointLight = PointLight; exports.Polyhedron = Polyhedron; exports.PolyhedronGeometry = PolyhedronGeometry; +exports.Raycaster = Raycaster; exports.RectAreaLight = RectAreaLight; exports.RefractionMesh = RefractionMesh; exports.RenderPass = RenderPass; @@ -3119,6 +3086,7 @@ exports.Renderer = Renderer; exports.Ring = Ring; exports.RingGeometry = RingGeometry; exports.SMAAPass = SMAAPass; +exports.SSAOPass = SSAOPass; exports.Scene = Scene; exports.ShaderMaterial = ShaderMaterial; exports.Sphere = Sphere; @@ -3145,8 +3113,6 @@ exports.ZoomBlurPass = ZoomBlurPass; exports.bindProp = bindProp; exports.bindProps = bindProps; exports.createApp = createApp; -exports.defaultFragmentShader = defaultFragmentShader; -exports.defaultVertexShader = defaultVertexShader; exports.getMatcapUrl = getMatcapUrl; exports.lerp = lerp; exports.lerpv2 = lerpv2; diff --git a/build/trois.module.cdn.js b/build/trois.module.cdn.js index 1d6bb78..f6fc968 100644 --- a/build/trois.module.cdn.js +++ b/build/trois.module.cdn.js @@ -1,80 +1,263 @@ -import { h, toRef, watch, createApp as createApp$1 } from 'https://unpkg.com/vue@3.0.7/dist/vue.esm-browser.prod.js'; -import { Vector2, Vector3, Plane as Plane$1, Raycaster, WebGLRenderer, OrthographicCamera as OrthographicCamera$1, PerspectiveCamera as PerspectiveCamera$1, Group as Group$1, Scene as Scene$1, Color, BoxGeometry as BoxGeometry$1, CircleGeometry as CircleGeometry$1, ConeGeometry as ConeGeometry$1, CylinderGeometry as CylinderGeometry$1, DodecahedronGeometry as DodecahedronGeometry$1, IcosahedronGeometry as IcosahedronGeometry$1, LatheGeometry as LatheGeometry$1, OctahedronGeometry as OctahedronGeometry$1, PolyhedronGeometry as PolyhedronGeometry$1, RingGeometry as RingGeometry$1, SphereGeometry as SphereGeometry$1, TetrahedronGeometry as TetrahedronGeometry$1, TorusGeometry as TorusGeometry$1, TorusKnotGeometry as TorusKnotGeometry$1, Curve, TubeGeometry as TubeGeometry$1, AmbientLight as AmbientLight$1, DirectionalLight as DirectionalLight$1, HemisphereLight as HemisphereLight$1, PointLight as PointLight$1, RectAreaLight as RectAreaLight$1, SpotLight as SpotLight$1, FrontSide, MeshBasicMaterial, MeshLambertMaterial, TextureLoader, MeshMatcapMaterial, MeshPhongMaterial, MeshStandardMaterial, MeshPhysicalMaterial, ShaderMaterial as ShaderMaterial$1, ShaderChunk, UniformsUtils, ShaderLib, MeshToonMaterial, UVMapping, ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, CubeTextureLoader, CubeRefractionMapping, Mesh as Mesh$1, BoxBufferGeometry, CircleBufferGeometry, ConeBufferGeometry, CylinderBufferGeometry, DodecahedronBufferGeometry, IcosahedronBufferGeometry, LatheBufferGeometry, OctahedronBufferGeometry, PlaneBufferGeometry, PolyhedronBufferGeometry, RingBufferGeometry, SphereBufferGeometry, TetrahedronBufferGeometry, FontLoader, TextBufferGeometry, TorusBufferGeometry, TorusKnotBufferGeometry, CatmullRomCurve3, WebGLCubeRenderTarget, RGBFormat, CubeCamera, BackSide, DoubleSide, InstancedMesh as InstancedMesh$1, SpriteMaterial, Sprite as Sprite$1 } from 'https://unpkg.com/three@0.126.1/build/three.module.js'; -import { OrbitControls } from 'https://unpkg.com/three@0.126.1/examples/jsm/controls/OrbitControls.js'; -import { RectAreaLightUniformsLib } from 'https://unpkg.com/three@0.126.1/examples/jsm/lights/RectAreaLightUniformsLib.js'; -import { RectAreaLightHelper } from 'https://unpkg.com/three@0.126.1/examples/jsm/helpers/RectAreaLightHelper.js'; -import { GLTFLoader } from 'https://unpkg.com/three@0.126.1/examples/jsm/loaders/GLTFLoader.js'; -import { FBXLoader } from 'https://unpkg.com/three@0.126.1/examples/jsm/loaders/FBXLoader.js'; -import { EffectComposer as EffectComposer$1 } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/EffectComposer.js'; -import { RenderPass as RenderPass$1 } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/RenderPass.js'; -import { BokehPass as BokehPass$1 } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/BokehPass.js'; -import { FilmPass as FilmPass$1 } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/FilmPass.js'; -import { ShaderPass } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/ShaderPass.js'; -import { FXAAShader } from 'https://unpkg.com/three@0.126.1/examples/jsm/shaders/FXAAShader.js'; -import { HalftonePass as HalftonePass$1 } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/HalftonePass.js'; -import { SMAAPass as SMAAPass$1 } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/SMAAPass.js'; -import { UnrealBloomPass as UnrealBloomPass$1 } from 'https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/UnrealBloomPass.js'; +import { defineComponent, h, toRef, watch, createApp as createApp$1 } from 'https://unpkg.com/vue@3.0.11/dist/vue.esm-browser.prod.js'; +import { VRButton } from 'https://unpkg.com/three@0.127.0/examples/jsm/webxr/VRButton.js'; +import { Vector3, Raycaster as Raycaster$1, Plane as Plane$1, Vector2, InstancedMesh as InstancedMesh$1, WebGLRenderer, OrthographicCamera as OrthographicCamera$1, PerspectiveCamera as PerspectiveCamera$1, Group as Group$1, Scene as Scene$1, Color, BoxGeometry as BoxGeometry$1, CircleGeometry as CircleGeometry$1, ConeGeometry as ConeGeometry$1, CylinderGeometry as CylinderGeometry$1, DodecahedronGeometry as DodecahedronGeometry$1, IcosahedronGeometry as IcosahedronGeometry$1, LatheGeometry as LatheGeometry$1, OctahedronGeometry as OctahedronGeometry$1, PolyhedronGeometry as PolyhedronGeometry$1, RingGeometry as RingGeometry$1, SphereGeometry as SphereGeometry$1, TetrahedronGeometry as TetrahedronGeometry$1, TorusGeometry as TorusGeometry$1, TorusKnotGeometry as TorusKnotGeometry$1, TubeGeometry as TubeGeometry$1, Curve, CatmullRomCurve3, AmbientLight as AmbientLight$1, DirectionalLight as DirectionalLight$1, HemisphereLight as HemisphereLight$1, PointLight as PointLight$1, RectAreaLight as RectAreaLight$1, SpotLight as SpotLight$1, FrontSide, MeshBasicMaterial, MeshLambertMaterial, TextureLoader, MeshMatcapMaterial, MeshPhongMaterial, MeshStandardMaterial, MeshPhysicalMaterial, ShaderMaterial as ShaderMaterial$1, ShaderChunk, UniformsUtils, ShaderLib, MeshToonMaterial, UVMapping, ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, CubeTextureLoader, CubeRefractionMapping, Mesh as Mesh$1, PlaneGeometry, FontLoader, TextGeometry, WebGLCubeRenderTarget, RGBFormat, CubeCamera, BackSide, DoubleSide, SpriteMaterial, Sprite as Sprite$1 } from 'https://unpkg.com/three@0.127.0/build/three.module.js'; +import { OrbitControls } from 'https://unpkg.com/three@0.127.0/examples/jsm/controls/OrbitControls.js'; +import { RectAreaLightUniformsLib } from 'https://unpkg.com/three@0.127.0/examples/jsm/lights/RectAreaLightUniformsLib.js'; +import { RectAreaLightHelper } from 'https://unpkg.com/three@0.127.0/examples/jsm/helpers/RectAreaLightHelper.js'; +import { GLTFLoader } from 'https://unpkg.com/three@0.127.0/examples/jsm/loaders/GLTFLoader.js'; +import { FBXLoader } from 'https://unpkg.com/three@0.127.0/examples/jsm/loaders/FBXLoader.js'; +import { EffectComposer as EffectComposer$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/EffectComposer.js'; +import { RenderPass as RenderPass$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/RenderPass.js'; +import { BokehPass as BokehPass$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/BokehPass.js'; +import { FilmPass as FilmPass$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/FilmPass.js'; +import { ShaderPass } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/ShaderPass.js'; +import { FXAAShader } from 'https://unpkg.com/three@0.127.0/examples/jsm/shaders/FXAAShader.js'; +import { HalftonePass as HalftonePass$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/HalftonePass.js'; +import { SMAAPass as SMAAPass$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/SMAAPass.js'; +import { SSAOPass as SSAOPass$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/SSAOPass.js'; +import { UnrealBloomPass as UnrealBloomPass$1 } from 'https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/UnrealBloomPass.js'; + +function useRaycaster(options) { + const { + camera, + resetPosition = new Vector3(0, 0, 0), + } = options; + + const raycaster = new Raycaster$1(); + const position = resetPosition.clone(); + const plane = new Plane$1(new Vector3(0, 0, 1), 0); + + const updatePosition = (coords) => { + raycaster.setFromCamera(coords, camera); + camera.getWorldDirection(plane.normal); + raycaster.ray.intersectPlane(plane, position); + }; + + const intersect = (coords, objects) => { + raycaster.setFromCamera(coords, camera); + return raycaster.intersectObjects(objects); + }; + + return { + position, + updatePosition, + intersect, + }; +} + +function usePointer(options) { + const { + camera, + domElement, + intersectObjects, + touch = true, + resetOnEnd = false, + resetPosition = new Vector2(0, 0), + resetPositionV3 = new Vector3(0, 0, 0), + onEnter = () => {}, + onMove = () => {}, + onLeave = () => {}, + onIntersectEnter = () => {}, + onIntersectOver = () => {}, + onIntersectMove = () => {}, + onIntersectLeave = () => {}, + onIntersectClick = () => {}, + } = options; + + const position = resetPosition.clone(); + const positionN = new Vector2(0, 0); + + const raycaster = useRaycaster({ camera }); + const positionV3 = raycaster.position; + + const obj = { + position, + positionN, + positionV3, + intersectObjects, + listeners: false, + addListeners, + removeListeners, + intersect, + }; + + return obj; + + function reset() { + position.copy(resetPosition); + positionV3.copy(resetPositionV3); + } + function updatePosition(event) { + let x, y; + if (event.touches && event.touches.length > 0) { + x = event.touches[0].clientX; + y = event.touches[0].clientY; + } else { + x = event.clientX; + y = event.clientY; + } + + const rect = domElement.getBoundingClientRect(); + position.x = x - rect.left; + position.y = y - rect.top; + positionN.x = (position.x / rect.width) * 2 - 1; + positionN.y = -(position.y / rect.height) * 2 + 1; + raycaster.updatePosition(positionN); + } + function intersect() { + if (intersectObjects.length) { + const intersects = raycaster.intersect(positionN, intersectObjects); + const offObjects = [...intersectObjects]; + const iMeshes = []; + + intersects.forEach(intersect => { + const { object } = intersect; + const { component } = object; + + // only once for InstancedMesh + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) return; + iMeshes.push(object); + } + + if (!object.over) { + object.over = true; + const overEvent = { type: 'pointerover', over: true, component, intersect }; + const enterEvent = { ...overEvent, type: 'pointerenter' }; + onIntersectOver(overEvent); + onIntersectEnter(enterEvent); + component.onPointerOver?.(overEvent); + component.onPointerEnter?.(enterEvent); + } + + const moveEvent = { type: 'pointermove', component, intersect }; + onIntersectMove(moveEvent); + component.onPointerMove?.(moveEvent); + + offObjects.splice(offObjects.indexOf(object), 1); + }); + + offObjects.forEach(object => { + const { component } = object; + if (object.over) { + object.over = false; + const overEvent = { type: 'pointerover', over: false, component }; + const leaveEvent = { ...overEvent, type: 'pointerleave' }; + onIntersectOver(overEvent); + onIntersectLeave(leaveEvent); + component.onPointerOver?.(overEvent); + component.onPointerLeave?.(leaveEvent); + } + }); + } + } + function pointerEnter(event) { + updatePosition(event); + onEnter({ type: 'pointerenter', position, positionN, positionV3 }); + } + function pointerMove(event) { + updatePosition(event); + onMove({ type: 'pointermove', position, positionN, positionV3 }); + intersect(); + } + function pointerClick(event) { + updatePosition(event); + if (intersectObjects.length) { + const intersects = raycaster.intersect(positionN, intersectObjects); + const iMeshes = []; + intersects.forEach(intersect => { + const { object } = intersect; + const { component } = object; + + // only once for InstancedMesh + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) return; + iMeshes.push(object); + } + + const event = { type: 'click', component, intersect }; + onIntersectClick(event); + component.onClick?.(event); + }); + } + } + function pointerLeave() { + if (resetOnEnd) reset(); + onLeave({ type: 'pointerleave' }); + } + function addListeners() { + domElement.addEventListener('mouseenter', pointerEnter); + domElement.addEventListener('mousemove', pointerMove); + domElement.addEventListener('mouseleave', pointerLeave); + domElement.addEventListener('click', pointerClick); + if (touch) { + domElement.addEventListener('touchstart', pointerEnter); + domElement.addEventListener('touchmove', pointerMove); + domElement.addEventListener('touchend', pointerLeave); + } + obj.listeners = true; + } + function removeListeners() { + domElement.removeEventListener('mouseenter', pointerEnter); + domElement.removeEventListener('mousemove', pointerMove); + domElement.removeEventListener('mouseleave', pointerLeave); + domElement.removeEventListener('click', pointerClick); + + domElement.removeEventListener('touchstart', pointerEnter); + domElement.removeEventListener('touchmove', pointerMove); + domElement.removeEventListener('touchend', pointerLeave); + obj.listeners = false; + }} /** * Three.js helper */ function useThree() { // default conf - var conf = { + const conf = { canvas: null, antialias: true, alpha: false, autoClear: true, orbit_ctrl: false, - mouse_move: false, - mouse_raycast: false, - mouse_over: false, - click: false, - resize: true, - width: 0, - height: 0, + pointer: false, + resize: false, + width: 300, + height: 150, }; // size - var size = { + const size = { width: 1, height: 1, wWidth: 1, wHeight: 1, ratio: 1, }; // handlers - var afterInitCallbacks = []; - var afterResizeCallbacks = []; - var beforeRenderCallbacks = []; - - // mouse tracking - var mouse = new Vector2(); - var mouseV3 = new Vector3(); - var mousePlane = new Plane$1(new Vector3(0, 0, 1), 0); - var raycaster = new Raycaster(); + const afterInitCallbacks = []; + let afterResizeCallbacks = []; + let beforeRenderCallbacks = []; - // raycast objects - var intersectObjects = []; + const intersectObjects = []; // returned object - var obj = { - conf: conf, + const obj = { + conf, renderer: null, camera: null, cameraCtrl: null, - materials: {}, scene: null, - size: size, - mouse: mouse, mouseV3: mouseV3, - init: init, - dispose: dispose, - render: render, - renderC: renderC, - setSize: setSize, - onAfterInit: onAfterInit, - onAfterResize: onAfterResize, offAfterResize: offAfterResize, - onBeforeRender: onBeforeRender, offBeforeRender: offBeforeRender, - addIntersectObject: addIntersectObject, removeIntersectObject: removeIntersectObject, + pointer: null, + size, + init, + dispose, + render, + renderC, + setSize, + onAfterInit, + onAfterResize, offAfterResize, + onBeforeRender, offBeforeRender, + addIntersectObject, removeIntersectObject, }; /** @@ -82,10 +265,7 @@ function useThree() { */ function init(params) { if (params) { - Object.entries(params).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(params).forEach(([key, value]) => { conf[key] = value; }); } @@ -103,44 +283,50 @@ function useThree() { obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha }); obj.renderer.autoClear = conf.autoClear; + if (conf.resize) { + onResize(); + window.addEventListener('resize', onResize); + } else { + setSize(conf.width, conf.height); + } + + initPointer(); + if (conf.orbit_ctrl) { obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement); if (conf.orbit_ctrl instanceof Object) { - Object.entries(conf.orbit_ctrl).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(conf.orbit_ctrl).forEach(([key, value]) => { obj.orbitCtrl[key] = value; }); } } - if (conf.resize) { - onResize(); - window.addEventListener('resize', onResize); - } else { - setSize(conf.width | 300, conf.height | 150); - } + afterInitCallbacks.forEach(c => c()); - conf.mouse_move = conf.mouse_move || conf.mouse_over; - if (conf.mouse_move) { - if (conf.mouse_move === 'body') { - obj.mouse_move_element = document.body; - } else { - obj.mouse_move_element = obj.renderer.domElement; - } - obj.mouse_move_element.addEventListener('mousemove', onMousemove); - obj.mouse_move_element.addEventListener('mouseleave', onMouseleave); - } + return true; + } + function initPointer() { + let pointerConf = { + camera: obj.camera, + domElement: obj.renderer.domElement, + intersectObjects, + }; - if (conf.click) { - obj.renderer.domElement.addEventListener('click', onClick); + if (conf.pointer && conf.pointer instanceof Object) { + pointerConf = { ...pointerConf, ...conf.pointer }; } - afterInitCallbacks.forEach(function (c) { return c(); }); - - return true; + obj.pointer = usePointer(pointerConf); + if (conf.pointer || intersectObjects.length) { + obj.pointer.addListeners(); + if (conf.pointer.intersectMode === 'frame') { + onBeforeRender(() => { + obj.pointer.intersect(); + }); + } + } } + /** * add after init callback */ @@ -159,7 +345,7 @@ function useThree() { * remove after resize callback */ function offAfterResize(callback) { - afterResizeCallbacks = afterResizeCallbacks.filter(function (c) { return c !== callback; }); + afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback); } /** @@ -173,15 +359,15 @@ function useThree() { * remove before render callback */ function offBeforeRender(callback) { - beforeRenderCallbacks = beforeRenderCallbacks.filter(function (c) { return c !== callback; }); + beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback); } /** * default render */ function render() { - if (obj.orbitCtrl) { obj.orbitCtrl.update(); } - beforeRenderCallbacks.forEach(function (c) { return c(); }); + if (obj.orbitCtrl) obj.orbitCtrl.update(); + beforeRenderCallbacks.forEach(c => c()); obj.renderer.render(obj.scene, obj.camera); } @@ -189,8 +375,8 @@ function useThree() { * composer render */ function renderC() { - if (obj.orbitCtrl) { obj.orbitCtrl.update(); } - beforeRenderCallbacks.forEach(function (c) { return c(); }); + if (obj.orbitCtrl) obj.orbitCtrl.update(); + beforeRenderCallbacks.forEach(c => c()); obj.composer.render(); } @@ -201,105 +387,35 @@ function useThree() { if (intersectObjects.indexOf(o) === -1) { intersectObjects.push(o); } + // add listeners if needed + if (obj.pointer && !obj.pointer.listeners) { + obj.pointer.addListeners(); + } } /** * remove intersect object */ function removeIntersectObject(o) { - var i = intersectObjects.indexOf(o); + const i = intersectObjects.indexOf(o); if (i !== -1) { intersectObjects.splice(i, 1); } + // remove listeners if needed + if (obj.pointer && !conf.pointer && intersectObjects.length === 0) { + obj.pointer.removeListeners(); + } } /** - * remove listeners + * remove listeners and dispose */ function dispose() { beforeRenderCallbacks = []; window.removeEventListener('resize', onResize); - if (obj.mouse_move_element) { - obj.mouse_move_element.removeEventListener('mousemove', onMousemove); - obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave); - } - obj.renderer.domElement.removeEventListener('click', onClick); - if (obj.orbitCtrl) { obj.orbitCtrl.dispose(); } - this.renderer.dispose(); - } - - /** - */ - function updateMouse(e) { - var rect = e.target.getBoundingClientRect(); - mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1; - mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1; - } - - /** - * click listener - */ - function onClick(e) { - updateMouse(e); - raycaster.setFromCamera(mouse, obj.camera); - var objects = raycaster.intersectObjects(intersectObjects); - for (var i = 0; i < objects.length; i++) { - var o = objects[i].object; - if (o.onClick) { o.onClick(e); } - } - } - - /** - * mousemove listener - */ - function onMousemove(e) { - updateMouse(e); - onMousechange(); - } - - /** - * mouseleave listener - */ - function onMouseleave(e) { - // mouse.x = 0; - // mouse.y = 0; - onMousechange(); - } - - /** - * mouse change - */ - function onMousechange(e) { - if (conf.mouse_over || conf.mouse_raycast) { - raycaster.setFromCamera(mouse, obj.camera); - - if (conf.mouse_raycast) { - // get mouse 3d position - obj.camera.getWorldDirection(mousePlane.normal); - mousePlane.normal.normalize(); - raycaster.ray.intersectPlane(mousePlane, mouseV3); - } - - if (conf.mouse_over) { - var onObjects = raycaster.intersectObjects(intersectObjects); - var offObjects = [].concat( intersectObjects ); - for (var i = 0; i < onObjects.length; i++) { - var o = onObjects[i].object; - if (!o.hover && o.onHover) { - o.hover = true; - o.onHover(true); - } - offObjects.splice(offObjects.indexOf(o), 1); - } - for (var i$1 = 0; i$1 < offObjects.length; i$1++) { - var o$1 = offObjects[i$1]; - if (o$1.hover && o$1.onHover) { - o$1.hover = false; - o$1.onHover(false); - } - } - } - } + if (obj.pointer) obj.pointer.removeListeners(); + if (obj.orbitCtrl) obj.orbitCtrl.dispose(); + obj.renderer.dispose(); } /** @@ -309,10 +425,10 @@ function useThree() { if (conf.resize === 'window') { setSize(window.innerWidth, window.innerHeight); } else { - var elt = obj.renderer.domElement.parentNode; + const elt = obj.renderer.domElement.parentNode; setSize(elt.clientWidth, elt.clientHeight); } - afterResizeCallbacks.forEach(function (c) { return c(); }); + afterResizeCallbacks.forEach(c => c()); } /** @@ -335,7 +451,7 @@ function useThree() { size.wWidth = obj.camera.right - obj.camera.left; size.wHeight = obj.camera.top - obj.camera.bottom; } else { - var wsize = getCameraSize(); + const wsize = getCameraSize(); size.wWidth = wsize[0]; size.wHeight = wsize[1]; } } @@ -344,56 +460,51 @@ function useThree() { * calculate camera visible area size */ function getCameraSize() { - var vFOV = (obj.camera.fov * Math.PI) / 180; - var h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z); - var w = h * obj.camera.aspect; + const vFOV = (obj.camera.fov * Math.PI) / 180; + const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z); + const w = h * obj.camera.aspect; return [w, h]; } return obj; } -var Renderer = { +var Renderer = defineComponent({ name: 'Renderer', props: { antialias: Boolean, alpha: Boolean, autoClear: { type: Boolean, default: true }, - mouseMove: { type: [Boolean, String], default: false }, - mouseRaycast: { type: Boolean, default: false }, - mouseOver: { type: Boolean, default: false }, - click: { type: Boolean, default: false }, orbitCtrl: { type: [Boolean, Object], default: false }, + pointer: { type: [Boolean, Object], default: false }, resize: { type: [Boolean, String], default: false }, shadow: Boolean, width: String, height: String, + xr: Boolean, }, - setup: function setup() { + setup() { return { three: useThree(), raf: true, onMountedCallbacks: [], }; }, - provide: function provide() { + provide() { return { three: this.three, // renderer: this.three.renderer, rendererComponent: this, }; }, - mounted: function mounted() { - var params = { + mounted() { + const params = { canvas: this.$el, antialias: this.antialias, alpha: this.alpha, autoClear: this.autoClear, orbit_ctrl: this.orbitCtrl, - mouse_move: this.mouseMove, - mouse_raycast: this.mouseRaycast, - mouse_over: this.mouseOver, - click: this.click, + pointer: this.pointer, resize: this.resize, width: this.width, height: this.height, @@ -402,72 +513,77 @@ var Renderer = { if (this.three.init(params)) { this.renderer = this.three.renderer; this.renderer.shadowMap.enabled = this.shadow; - if (this.three.composer) { this.animateC(); } - else { this.animate(); } + + if (this.xr) { + this.vrButton = VRButton.createButton(this.renderer); + this.renderer.domElement.parentNode.appendChild(this.vrButton); + this.renderer.xr.enabled = true; + if (this.three.composer) this.renderer.setAnimationLoop(this.animateXRC); + else this.renderer.setAnimationLoop(this.animateXR); + } else { + if (this.three.composer) this.animateC(); + else this.animate(); + } } - this.onMountedCallbacks.forEach(function (c) { return c(); }); + this.onMountedCallbacks.forEach(c => c()); }, - beforeUnmount: function beforeUnmount() { + beforeUnmount() { this.raf = false; this.three.dispose(); }, methods: { - onMounted: function onMounted(callback) { + onMounted(callback) { this.onMountedCallbacks.push(callback); }, - onBeforeRender: function onBeforeRender(callback) { + onBeforeRender(callback) { this.three.onBeforeRender(callback); }, - onAfterResize: function onAfterResize(callback) { + onAfterResize(callback) { this.three.onAfterResize(callback); }, - animate: function animate() { - if (this.raf) { requestAnimationFrame(this.animate); } + animate() { + if (this.raf) requestAnimationFrame(this.animate); this.three.render(); }, - animateC: function animateC() { - if (this.raf) { requestAnimationFrame(this.animateC); } + animateC() { + if (this.raf) requestAnimationFrame(this.animateC); this.three.renderC(); }, + animateXR() { this.three.render(); }, + animateXRC() { this.three.renderC(); }, }, - render: function render() { + render() { return h('canvas', {}, this.$slots.default()); }, __hmrId: 'Renderer', -}; +}); function setFromProp(o, prop) { if (prop instanceof Object) { - Object.entries(prop).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(prop).forEach(([key, value]) => { o[key] = value; }); } } function bindProps(src, props, dst) { - props.forEach(function (prop) { + props.forEach(prop => { bindProp(src, prop, dst); }); } function bindProp(src, srcProp, dst, dstProp) { - if (!dstProp) { dstProp = srcProp; } - var ref = toRef(src, srcProp); + if (!dstProp) dstProp = srcProp; + const ref = toRef(src, srcProp); if (ref.value instanceof Object) { setFromProp(dst[dstProp], ref.value); - watch(ref, function (value) { setFromProp(dst[dstProp], value); }, { deep: true }); + watch(ref, (value) => { setFromProp(dst[dstProp], value); }, { deep: true }); } else { - if (ref.value) { dst[dstProp] = src[srcProp]; } - watch(ref, function (value) { dst[dstProp] = value; }); + if (ref.value) dst[dstProp] = src[srcProp]; + watch(ref, (value) => { dst[dstProp] = value; }); } } function propsValues(props, exclude) { - var values = {}; - Object.entries(props).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + const values = {}; + Object.entries(props).forEach(([key, value]) => { if (!exclude || (exclude && !exclude.includes(key))) { values[key] = value; } @@ -492,13 +608,11 @@ function limit(val, min, max) { return val < min ? min : (val > max ? max : val); } // from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx -var MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'; - -function getMatcapUrl(hash, format) { - if ( format === void 0 ) format = 1024; +const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'; - var fileName = "" + hash + (getMatcapFormatString(format)) + ".png"; - return (MATCAP_ROOT + "/" + format + "/" + fileName); +function getMatcapUrl(hash, format = 1024) { + const fileName = `${hash}${getMatcapFormatString(format)}.png`; + return `${MATCAP_ROOT}/${format}/${fileName}`; } function getMatcapFormatString(format) { switch (format) { @@ -515,12 +629,20 @@ function getMatcapFormatString(format) { } } -// shader defaults -var defaultVertexShader = "\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}"; +// import Object3D from '../core/Object3D.js'; -var defaultFragmentShader = "\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}"; +var Camera = defineComponent({ + // TODO: eventually extend Object3D, for now: error 'injection "scene" not found' + // because camera is a sibling of scene in Trois + // extends: Object3D, + inject: ['three'], + render() { + return this.$slots.default ? this.$slots.default() : []; + }, +}); -var OrthographicCamera = { +var OrthographicCamera = defineComponent({ + extends: Camera, name: 'OrthographicCamera', inject: ['three'], props: { @@ -533,26 +655,24 @@ var OrthographicCamera = { zoom: { type: Number, default: 1 }, position: { type: Object, default: { x: 0, y: 0, z: 0 } }, }, - created: function created() { - var this$1 = this; - + created() { this.camera = new OrthographicCamera$1(this.left, this.right, this.top, this.bottom, this.near, this.far); bindProp(this, 'position', this.camera); - ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.camera[p] = this$1[p]; - this$1.camera.updateProjectionMatrix(); + ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => { + watch(() => this[p], () => { + this.camera[p] = this[p]; + this.camera.updateProjectionMatrix(); }); }); this.three.camera = this.camera; }, - render: function render() { return []; }, __hmrId: 'OrthographicCamera', -}; +}); -var PerspectiveCamera = { +var PerspectiveCamera = defineComponent({ + extends: Camera, name: 'PerspectiveCamera', inject: ['three'], props: { @@ -563,135 +683,195 @@ var PerspectiveCamera = { position: { type: Object, default: { x: 0, y: 0, z: 0 } }, lookAt: { type: Object, default: null }, }, - created: function created() { - var this$1 = this; - + created() { this.camera = new PerspectiveCamera$1(this.fov, this.aspect, this.near, this.far); bindProp(this, 'position', this.camera); - if (this.lookAt) { this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); } - watch(function () { return this$1.lookAt; }, function (v) { this$1.camera.lookAt(v.x, v.y, v.z); }, { deep: true }); + if (this.lookAt) this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); + watch(() => this.lookAt, (v) => { this.camera.lookAt(v.x, v.y, v.z); }, { deep: true }); - ['aspect', 'far', 'fov', 'near'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.camera[p] = this$1[p]; - this$1.camera.updateProjectionMatrix(); + ['aspect', 'far', 'fov', 'near'].forEach(p => { + watch(() => this[p], () => { + this.camera[p] = this[p]; + this.camera.updateProjectionMatrix(); }); }); this.three.camera = this.camera; }, - render: function render() { return []; }, __hmrId: 'PerspectiveCamera', -}; +}); -var Object3D = { +var Object3D = defineComponent({ name: 'Object3D', inject: ['three', 'scene', 'rendererComponent'], + emits: ['created', 'ready'], props: { position: { type: Object, default: { x: 0, y: 0, z: 0 } }, rotation: { type: Object, default: { x: 0, y: 0, z: 0 } }, scale: { type: Object, default: { x: 1, y: 1, z: 1 } }, lookAt: { type: Object, default: null }, + autoRemove: { type: Boolean, default: true }, }, // can't use setup because it will not be used in sub components // setup() {}, - unmounted: function unmounted() { - if (this._parent) { this._parent.remove(this.o3d); } + unmounted() { + if (this.autoRemove) this.removeFromParent(); }, methods: { - initObject3D: function initObject3D(o3d) { - var this$1 = this; - + initObject3D(o3d) { this.o3d = o3d; + this.$emit('created', this.o3d); bindProp(this, 'position', this.o3d); bindProp(this, 'rotation', this.o3d); bindProp(this, 'scale', this.o3d); // TODO : fix lookat.x - if (this.lookAt) { this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); } - watch(function () { return this$1.lookAt; }, function (v) { this$1.o3d.lookAt(v.x, v.y, v.z); }, { deep: true }); + if (this.lookAt) this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); + watch(() => this.lookAt, (v) => { this.o3d.lookAt(v.x, v.y, v.z); }, { deep: true }); - var parent = this.$parent; + this._parent = this.getParent(); + if (this.addToParent()) this.$emit('ready', this); + else console.error('Missing parent (Scene, Group...)'); + }, + getParent() { + let parent = this.$parent; while (parent) { - if (parent.add) { - parent.add(this.o3d); - this._parent = parent; - break; - } + if (parent.add) return parent; parent = parent.$parent; } - if (!this._parent) { console.error('Missing parent (Scene, Group...)'); } + return false; }, - add: function add(o) { this.o3d.add(o); }, - remove: function remove(o) { this.o3d.remove(o); }, + addToParent(o) { + const o3d = o || this.o3d; + if (this._parent) { + this._parent.add(o3d); + return true; + } + return false; + }, + removeFromParent(o) { + const o3d = o || this.o3d; + if (this._parent) { + this._parent.remove(o3d); + return true; + } + return false; + }, + add(o) { this.o3d.add(o); }, + remove(o) { this.o3d.remove(o); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Object3D', -}; +}); -var Group = { +var Group = defineComponent({ name: 'Group', extends: Object3D, - created: function created() { + created() { this.group = new Group$1(); this.initObject3D(this.group); }, __hmrId: 'Group', -}; +}); -var Scene = { +var Scene = defineComponent({ name: 'Scene', inject: ['three'], props: { id: String, background: [String, Number], }, - setup: function setup(props) { - var scene = new Scene$1(); - if (props.background) { scene.background = new Color(props.background); } - watch(function () { return props.background; }, function (value) { scene.background.set(value); }); - return { scene: scene }; + setup(props) { + const scene = new Scene$1(); + if (props.background) scene.background = new Color(props.background); + watch(() => props.background, (value) => { scene.background.set(value); }); + return { scene }; }, - provide: function provide() { + provide() { return { scene: this.scene, }; }, - mounted: function mounted() { + mounted() { if (!this.three.scene) { this.three.scene = this.scene; } }, methods: { - add: function add(o) { this.scene.add(o); }, - remove: function remove(o) { this.scene.remove(o); }, + add(o) { this.scene.add(o); }, + remove(o) { this.scene.remove(o); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Scene', -}; +}); + +var Raycaster = defineComponent({ + name: 'Raycaster', + inject: ['three', 'rendererComponent'], + props: { + onPointerEnter: { type: Function, default: () => {} }, + onPointerOver: { type: Function, default: () => {} }, + onPointerMove: { type: Function, default: () => {} }, + onPointerLeave: { type: Function, default: () => {} }, + onClick: { type: Function, default: () => {} }, + intersectMode: { type: String, default: 'move' }, + }, + mounted() { + this.rendererComponent.onMounted(() => { + this.pointer = usePointer({ + camera: this.three.camera, + domElement: this.three.renderer.domElement, + intersectObjects: this.getIntersectObjects(), + onIntersectEnter: this.onPointerEnter, + onIntersectOver: this.onPointerOver, + onIntersectMove: this.onPointerMove, + onIntersectLeave: this.onPointerLeave, + onIntersectClick: this.onClick, + }); + this.pointer.addListeners(); + + if (this.intersectMode === 'frame') { + this.three.onBeforeRender(this.pointer.intersect); + } + }); + }, + unmounted() { + if (this.pointer) { + this.pointer.removeListeners(); + this.three.offBeforeRender(this.pointer.intersect); + } + }, + methods: { + getIntersectObjects() { + return this.three.scene.children.filter(e => e.type === 'Mesh'); + }, + }, + render() { + return []; + }, + __hmrId: 'Raycaster', +}); -var Geometry = { +const Geometry = defineComponent({ inject: ['mesh'], props: { rotateX: Number, rotateY: Number, rotateZ: Number, }, - created: function created() { - var this$1 = this; - + created() { if (!this.mesh) { console.error('Missing parent Mesh'); } this.watchProps = []; - Object.entries(this.$props).forEach(function (e) { return this$1.watchProps.push(e[0]); }); + Object.entries(this.$props).forEach(e => this.watchProps.push(e[0])); this.createGeometry(); this.rotateGeometry(); @@ -699,272 +879,304 @@ var Geometry = { this.addWatchers(); }, - unmounted: function unmounted() { + unmounted() { this.geometry.dispose(); }, methods: { - addWatchers: function addWatchers() { - var this$1 = this; - - this.watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); + addWatchers() { + this.watchProps.forEach(prop => { + watch(() => this[prop], () => { + this.refreshGeometry(); }); }); }, - rotateGeometry: function rotateGeometry() { - if (this.rotateX) { this.geometry.rotateX(this.rotateX); } - if (this.rotateY) { this.geometry.rotateY(this.rotateY); } - if (this.rotateZ) { this.geometry.rotateZ(this.rotateZ); } + rotateGeometry() { + if (this.rotateX) this.geometry.rotateX(this.rotateX); + if (this.rotateY) this.geometry.rotateY(this.rotateY); + if (this.rotateZ) this.geometry.rotateZ(this.rotateZ); }, - refreshGeometry: function refreshGeometry() { - var oldGeo = this.geometry; + refreshGeometry() { + const oldGeo = this.geometry; this.createGeometry(); this.rotateGeometry(); this.mesh.setGeometry(this.geometry); oldGeo.dispose(); }, }, - render: function render() { return []; }, -}; + render() { return []; }, +}); -var BoxGeometry = { - extends: Geometry, - props: { - size: Number, - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - depth: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - depthSegments: { type: Number, default: 1 }, - }, - methods: { - createGeometry: function createGeometry() { - var w = this.width, h = this.height, d = this.depth; - if (this.size) { - w = this.size; h = this.size; d = this.size; - } - this.geometry = new BoxGeometry$1(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments); +function geometryComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Geometry, + props, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, }, - }, + }); +} + +const props$h = { + size: Number, + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + depth: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + depthSegments: { type: Number, default: 1 }, }; -var CircleGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - segments: { type: Number, default: 8 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CircleGeometry$1(this.radius, this.segments, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$f(comp) { + if (comp.size) { + return new BoxGeometry$1(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } else { + return new BoxGeometry$1(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } +} +var BoxGeometry = geometryComponent('BoxGeometry', props$h, createGeometry$f); + +const props$g = { + radius: { type: Number, default: 1 }, + segments: { type: Number, default: 8 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var ConeGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new ConeGeometry$1(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$e(comp) { + return new CircleGeometry$1(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength); +} +var CircleGeometry = geometryComponent('CircleGeometry', props$g, createGeometry$e); + +const props$f = { + radius: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var CylinderGeometry = { - extends: Geometry, - props: { - radiusTop: { type: Number, default: 1 }, - radiusBottom: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CylinderGeometry$1(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$d(comp) { + return new ConeGeometry$1(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var ConeGeometry = geometryComponent('ConeGeometry', props$f, createGeometry$d); + +const props$e = { + radiusTop: { type: Number, default: 1 }, + radiusBottom: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var DodecahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new DodecahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$c(comp) { + return new CylinderGeometry$1(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var CylinderGeometry = geometryComponent('CylinderGeometry', props$e, createGeometry$c); + +const props$d = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var IcosahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new IcosahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$b(comp) { + return new DodecahedronGeometry$1(comp.radius, comp.detail); +} +var DodecahedronGeometry = geometryComponent('DodecahedronGeometry', props$d, createGeometry$b); + +const props$c = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var LatheGeometry = { - extends: Geometry, - props: { - points: Array, - segments: { type: Number, default: 12 }, - phiStart: { type: Number, default: 0 }, - phiLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new LatheGeometry$1(this.points, this.segments, this.phiStart, this.phiLength); - }, - }, +function createGeometry$a(comp) { + return new IcosahedronGeometry$1(comp.radius, comp.detail); +} +var IcosahedronGeometry = geometryComponent('IcosahedronGeometry', props$c, createGeometry$a); + +const props$b = { + points: Array, + segments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 }, }; -var OctahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new OctahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$9(comp) { + return new LatheGeometry$1(comp.points, comp.segments, comp.phiStart, comp.phiLength); +} +var LatheGeometry = geometryComponent('LatheGeometry', props$b, createGeometry$9); + +const props$a = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var PolyhedronGeometry = { - extends: Geometry, - props: { - vertices: Array, - indices: Array, - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new PolyhedronGeometry$1(this.vertices, this.indices, this.radius, this.detail); - }, - }, +function createGeometry$8(comp) { + return new OctahedronGeometry$1(comp.radius, comp.detail); +} +var OctahedronGeometry = geometryComponent('OctahedronGeometry', props$a, createGeometry$8); + +const props$9 = { + vertices: Array, + indices: Array, + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var RingGeometry = { - extends: Geometry, - props: { - innerRadius: { type: Number, default: 0.5 }, - outerRadius: { type: Number, default: 1 }, - thetaSegments: { type: Number, default: 8 }, - phiSegments: { type: Number, default: 1 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new RingGeometry$1(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$7(comp) { + return new PolyhedronGeometry$1(comp.vertices, comp.indices, comp.radius, comp.detail); +} +var PolyhedronGeometry = geometryComponent('PolyhedronGeometry', props$9, createGeometry$7); + +const props$8 = { + innerRadius: { type: Number, default: 0.5 }, + outerRadius: { type: Number, default: 1 }, + thetaSegments: { type: Number, default: 8 }, + phiSegments: { type: Number, default: 1 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var SphereGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 12 }, - heightSegments: { type: Number, default: 12 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new SphereGeometry$1(this.radius, this.widthSegments, this.heightSegments); - }, - }, +function createGeometry$6(comp) { + return new RingGeometry$1(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength); +} +var RingGeometry = geometryComponent('RingGeometry', props$8, createGeometry$6); + +const props$7 = { + radius: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 12 }, + heightSegments: { type: Number, default: 12 }, }; -var TetrahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TetrahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$5(comp) { + return new SphereGeometry$1(comp.radius, comp.widthSegments, comp.heightSegments); +} +var SphereGeometry = geometryComponent('SphereGeometry', props$7, createGeometry$5); + +const props$6 = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var TorusGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - tube: { type: Number, default: 0.4 }, - radialSegments: { type: Number, default: 8 }, - tubularSegments: { type: Number, default: 6 }, - arc: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusGeometry$1(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc); - }, - }, +function createGeometry$4(comp) { + return new TetrahedronGeometry$1(comp.radius, comp.detail); +} +var TetrahedronGeometry = geometryComponent('TetrahedronGeometry', props$6, createGeometry$4); + +const props$5 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + radialSegments: { type: Number, default: 8 }, + tubularSegments: { type: Number, default: 6 }, + arc: { type: Number, default: Math.PI * 2 }, }; -var TorusKnotGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - tube: { type: Number, default: 0.4 }, - tubularSegments: { type: Number, default: 64 }, - radialSegments: { type: Number, default: 8 }, - p: { type: Number, default: 2 }, - q: { type: Number, default: 3 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusKnotGeometry$1(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q); - }, - }, +function createGeometry$3(comp) { + return new TorusGeometry$1(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc); +} +var TorusGeometry = geometryComponent('TorusGeometry', props$5, createGeometry$3); + +const props$4 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + tubularSegments: { type: Number, default: 64 }, + radialSegments: { type: Number, default: 8 }, + p: { type: Number, default: 2 }, + q: { type: Number, default: 3 }, }; -var TubeGeometry = { +function createGeometry$2(comp) { + return new TorusKnotGeometry$1(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q); +} +var TorusKnotGeometry = geometryComponent('TorusKnotGeometry', props$4, createGeometry$2); + +const props$3 = { + points: Array, + path: Curve, + tubularSegments: { type: Number, default: 64 }, + radius: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + closed: { type: Boolean, default: false }, +}; + +function createGeometry$1(comp) { + let curve; + if (comp.points) { + curve = new CatmullRomCurve3(comp.points); + } else if (comp.path) { + curve = comp.path; + } else { + console.error('Missing path curve or points.'); + } + return new TubeGeometry$1(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed); +} +var TubeGeometry = defineComponent({ extends: Geometry, - props: { - path: Curve, - tubularSegments: { type: Number, default: 64 }, - radius: { type: Number, default: 1 }, - radiusSegments: { type: Number, default: 8 }, - closed: { type: Boolean, default: false }, - }, + props: props$3, methods: { - createGeometry: function createGeometry() { - this.geometry = new TubeGeometry$1(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed); + createGeometry() { + this.geometry = createGeometry$1(this); + }, + // update points (without using prop, faster) + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); }, }, -}; +}); + +function updateTubeGeometryPoints(tube, points) { + const curve = new CatmullRomCurve3(points); + const { radialSegments, radius, tubularSegments, closed } = tube.parameters; + const frames = curve.computeFrenetFrames(tubularSegments, closed); + tube.tangents = frames.tangents; + tube.normals = frames.normals; + tube.binormals = frames.binormals; + tube.parameters.path = curve; + + const pArray = tube.attributes.position.array; + const nArray = tube.attributes.normal.array; + const normal = new Vector3(); + let P; + + for (let i = 0; i < tubularSegments; i++) { + updateSegment(i); + } + updateSegment(tubularSegments); + + tube.attributes.position.needsUpdate = true; + tube.attributes.normal.needsUpdate = true; -var Light = { + function updateSegment(i) { + P = curve.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = (cos * N.x + sin * B.x); + normal.y = (cos * N.y + sin * B.y); + normal.z = (cos * N.z + sin * B.z); + normal.normalize(); + const index = (i * (radialSegments + 1) + j) * 3; + nArray[index] = normal.x; + nArray[index + 1] = normal.y; + nArray[index + 2] = normal.z; + pArray[index] = P.x + radius * normal.x; + pArray[index + 1] = P.y + radius * normal.y; + pArray[index + 2] = P.z + radius * normal.z; + } + } +} + +var Light = defineComponent({ extends: Object3D, name: 'Light', props: { @@ -976,13 +1188,11 @@ var Light = { }, // can't use setup because it will not be used in sub components // setup() {}, - unmounted: function unmounted() { - if (this.light.target) { this.$parent.remove(this.light.target); } + unmounted() { + if (this.light.target) this.removeFromParent(this.light.target); }, methods: { - initLight: function initLight() { - var this$1 = this; - + initLight() { if (this.light.target) { bindProp(this, 'target', this.light.target, 'position'); } @@ -993,60 +1203,58 @@ var Light = { setFromProp(this.light.shadow.camera, this.shadowCamera); } - ['color', 'intensity', 'castShadow'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { + ['color', 'intensity', 'castShadow'].forEach(p => { + watch(() => this[p], () => { if (p === 'color') { - this$1.light.color.set(this$1.color); + this.light.color.set(this.color); } else { - this$1.light[p] = this$1[p]; + this.light[p] = this[p]; } }); }); this.initObject3D(this.light); - if (this.light.target) { this.$parent.add(this.light.target); } + if (this.light.target) this.addToParent(this.light.target); }, }, __hmrId: 'Light', -}; +}); -var AmbientLight = { +var AmbientLight = defineComponent({ extends: Light, - created: function created() { + created() { this.light = new AmbientLight$1(this.color, this.intensity); this.initLight(); }, __hmrId: 'AmbientLight', -}; +}); -var DirectionalLight = { +var DirectionalLight = defineComponent({ extends: Light, props: { target: Object, }, - created: function created() { + created() { this.light = new DirectionalLight$1(this.color, this.intensity); this.initLight(); }, __hmrId: 'DirectionalLight', -}; +}); -var HemisphereLight = { +var HemisphereLight = defineComponent({ extends: Light, props: { groundColor: { type: String, default: '#444444' }, }, - created: function created() { - var this$1 = this; - + created() { this.light = new HemisphereLight$1(this.color, this.groundColor, this.intensity); - watch(function () { return this$1.groundColor; }, function (value) { this$1.light.groundColor.set(value); }); + watch(() => this.groundColor, (value) => { this.light.groundColor.set(value); }); this.initLight(); }, __hmrId: 'HemisphereLight', -}; +}); -var PointLight = { +var PointLight = defineComponent({ extends: Light, props: { distance: { @@ -1058,46 +1266,44 @@ var PointLight = { default: 1, }, }, - created: function created() { + created() { this.light = new PointLight$1(this.color, this.intensity, this.distance, this.decay); this.initLight(); }, __hmrId: 'PointLight', -}; +}); -var RectAreaLight = { +var RectAreaLight = defineComponent({ extends: Light, props: { width: { type: Number, default: 10 }, height: { type: Number, default: 10 }, helper: Boolean, }, - created: function created() { - var this$1 = this; - + created() { RectAreaLightUniformsLib.init(); this.light = new RectAreaLight$1(this.color, this.intensity, this.width, this.height); - ['width', 'height'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.light[p] = this$1[p]; + ['width', 'height'].forEach(p => { + watch(() => this[p], () => { + this.light[p] = this[p]; }); }); if (this.helper) { this.lightHelper = new RectAreaLightHelper(this.light); - this.$parent.add(this.lightHelper); + this.light.add(this.lightHelper); } this.initLight(); }, - unmounted: function unmounted() { - if (this.lightHelper) { this.$parent.remove(this.lightHelper); } + unmounted() { + if (this.lightHelper) this.removeFromParent(this.lightHelper); }, __hmrId: 'RectAreaLight', -}; +}); -var SpotLight = { +var SpotLight = defineComponent({ extends: Light, props: { angle: { type: Number, default: Math.PI / 3 }, @@ -1106,21 +1312,19 @@ var SpotLight = { penumbra: { type: Number, default: 0 }, target: Object, }, - created: function created() { - var this$1 = this; - + created() { this.light = new SpotLight$1(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay); - ['angle', 'decay', 'distance', 'penumbra'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.light[p] = this$1[p]; + ['angle', 'decay', 'distance', 'penumbra'].forEach(p => { + watch(() => this[p], () => { + this.light[p] = this[p]; }); }); this.initLight(); }, __hmrId: 'SpotLight', -}; +}); -var Material = { +var Material = defineComponent({ inject: ['three', 'mesh'], props: { color: { type: [String, Number], default: '#ffffff' }, @@ -1132,54 +1336,48 @@ var Material = { transparent: Boolean, vertexColors: Boolean, }, - provide: function provide() { + provide() { return { material: this, }; }, - created: function created() { + created() { this.createMaterial(); this.mesh.setMaterial(this.material); this._addWatchers(); - if (this.addWatchers) { this.addWatchers(); } + if (this.addWatchers) this.addWatchers(); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - setProp: function setProp(key, value, needsUpdate) { - if ( needsUpdate === void 0 ) needsUpdate = false; - + setProp(key, value, needsUpdate = false) { this.material[key] = value; this.material.needsUpdate = needsUpdate; }, - setTexture: function setTexture(texture, key) { - if ( key === void 0 ) key = 'map'; - + setTexture(texture, key = 'map') { this.setProp(key, texture, true); }, - _addWatchers: function _addWatchers() { - var this$1 = this; - - ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { + _addWatchers() { + ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(p => { + watch(() => this[p], () => { if (p === 'color') { - this$1.material.color.set(this$1.color); + this.material.color.set(this.color); } else { - this$1.material[p] = this$1[p]; + this.material[p] = this[p]; } }); }); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Material', -}; +}); -var wireframeProps = { +const wireframeProps = { wireframe: { type: Boolean, default: false }, // not needed for WebGL // wireframeLinecap: { type: String, default: 'round' }, @@ -1187,35 +1385,39 @@ var wireframeProps = { wireframeLinewidth: { type: Number, default: 1 }, // not really useful }; -var BasicMaterial = { +var BasicMaterial = defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshBasicMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'BasicMaterial', -}; +}); -var LambertMaterial = { +var LambertMaterial = defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshLambertMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'LambertMaterial', -}; +}); -var MatcapMaterial = { +var MatcapMaterial = defineComponent({ extends: Material, props: { src: String, @@ -1223,42 +1425,42 @@ var MatcapMaterial = { flatShading: Boolean, }, methods: { - createMaterial: function createMaterial() { - var src = this.name ? getMatcapUrl(this.name) : this.src; - var opts = propsValues(this.$props, ['src', 'name']); + createMaterial() { + const src = this.name ? getMatcapUrl(this.name) : this.src; + const opts = propsValues(this.$props, ['src', 'name']); opts.matcap = new TextureLoader().load(src); this.material = new MeshMatcapMaterial(opts); }, - addWatchers: function addWatchers() { + addWatchers() { // TODO }, }, __hmrId: 'MatcapMaterial', -}; +}); -var PhongMaterial = { +var PhongMaterial = defineComponent({ extends: Material, - props: Object.assign({}, {emissive: { type: [Number, String], default: 0 }, + props: { + emissive: { type: [Number, String], default: 0 }, emissiveIntensity: { type: Number, default: 1 }, reflectivity: { type: Number, default: 1 }, shininess: { type: Number, default: 30 }, specular: { type: [String, Number], default: 0x111111 }, - flatShading: Boolean}, - wireframeProps), + flatShading: Boolean, + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshPhongMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { - var this$1 = this; - + addWatchers() { // TODO : handle flatShading ? - ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(function (p) { - watch(function () { return this$1[p]; }, function (value) { + ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(p => { + watch(() => this[p], (value) => { if (p === 'emissive' || p === 'specular') { - this$1.material[p].set(value); + this.material[p].set(value); } else { - this$1.material[p] = value; + this.material[p] = value; } }); }); @@ -1266,9 +1468,9 @@ var PhongMaterial = { }, }, __hmrId: 'PhongMaterial', -}; +}); -var props = { +const props$2 = { aoMapIntensity: { type: Number, default: 1 }, bumpScale: { type: Number, default: 1 }, displacementBias: { type: Number, default: 0 }, @@ -1284,25 +1486,25 @@ var props = { flatShading: Boolean, }; -var StandardMaterial = { +var StandardMaterial = defineComponent({ extends: Material, - props: Object.assign({}, props, - wireframeProps), + props: { + ...props$2, + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshStandardMaterial(propsValues(this.$props, ['normalScale'])); }, - addWatchers: function addWatchers() { - var this$1 = this; - + addWatchers() { // TODO : use setProp, handle flatShading ? - Object.keys(props).forEach(function (p) { - if (p === 'normalScale') { return; } - watch(function () { return this$1[p]; }, function (value) { + Object.keys(props$2).forEach(p => { + if (p === 'normalScale') return; + watch(() => this[p], (value) => { if (p === 'emissive') { - this$1.material[p].set(value); + this.material[p].set(value); } else { - this$1.material[p] = value; + this.material[p] = value; } }); }); @@ -1311,57 +1513,73 @@ var StandardMaterial = { }, }, __hmrId: 'StandardMaterial', -}; +}); -var PhysicalMaterial = { +var PhysicalMaterial = defineComponent({ extends: StandardMaterial, props: { flatShading: Boolean, }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshPhysicalMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { // TODO }, }, __hmrId: 'PhysicalMaterial', -}; +}); + +const defaultVertexShader = ` +varying vec2 vUv; +void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); +}`; -var ShaderMaterial = { +const defaultFragmentShader = ` +varying vec2 vUv; +void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); +}`; + +var ShaderMaterial = defineComponent({ inject: ['three', 'mesh'], props: { - uniforms: { type: Object, default: function () { return {}; } }, + uniforms: { type: Object, default: () => { return {}; } }, vertexShader: { type: String, default: defaultVertexShader }, fragmentShader: { type: String, default: defaultFragmentShader }, }, - created: function created() { - var this$1 = this; - + provide() { + return { + material: this, + }; + }, + created() { this.createMaterial(); - ['vertexShader', 'fragmentShader'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { + ['vertexShader', 'fragmentShader'].forEach(p => { + watch(() => this[p], () => { // recreate material if we change either shader - this$1.material.dispose(); - this$1.createMaterial(); + this.material.dispose(); + this.createMaterial(); }); }); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new ShaderMaterial$1(propsValues(this.$props)); this.mesh.setMaterial(this.material); }, }, - render: function render() { - return []; + render() { + return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'ShaderMaterial', -}; +}); /** * ------------------------------------------------------------------------------------------ @@ -1376,10 +1594,10 @@ function replaceAll(string, find, replace) { return string.split(find).join(replace); } -var meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {')); -var meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {')); +const meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {')); +const meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {')); -var SubsurfaceScatteringShader = { +const SubsurfaceScatteringShader = { uniforms: UniformsUtils.merge([ ShaderLib.phong.uniforms, @@ -1390,21 +1608,54 @@ var SubsurfaceScatteringShader = { thicknessAttenuation: { value: 0.1 }, thicknessPower: { value: 2.0 }, thicknessScale: { value: 10.0 }, - } ]), - - vertexShader: ("\n #define USE_UV\n " + (ShaderChunk.meshphong_vert) + "\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( + }, + ]), + + vertexShader: ` + #define USE_UV + ${ShaderChunk.meshphong_vert} + `, + + fragmentShader: ` + #define USE_UV + #define SUBSURFACE + + ${meshphongFragHead} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + ` + meshphongFragBody.replace( '#include ', replaceAll( ShaderChunk.lights_fragment_begin, 'RE_Direct( directLight, geometry, material, reflectedLight );', - "\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 " + ` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + ` ) ), }; -var SubSurfaceMaterial = { +var SubSurfaceMaterial = defineComponent({ inject: ['three', 'mesh'], props: { color: { type: String, default: '#ffffff' }, @@ -1418,25 +1669,22 @@ var SubSurfaceMaterial = { opacity: { type: Number, default: 1 }, vertexColors: { type: Boolean, default: false }, }, - created: function created() { + created() { this.createMaterial(); this.mesh.setMaterial(this.material); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - createMaterial: function createMaterial() { - var params = SubsurfaceScatteringShader; - var uniforms = UniformsUtils.clone(params.uniforms); + createMaterial() { + const params = SubsurfaceScatteringShader; + const uniforms = UniformsUtils.clone(params.uniforms); - Object.entries(this.$props).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - - var _key = key, _value = value; + Object.entries(this.$props).forEach(([key, value]) => { + let _key = key, _value = value; if (['color', 'thicknessColor'].includes(key)) { - if (key === 'color') { _key = 'diffuse'; } + if (key === 'color') _key = 'diffuse'; _value = new Color(value); } if (!['transparent', 'vertexColors'].includes(key)) { @@ -1444,38 +1692,43 @@ var SubSurfaceMaterial = { } }); - this.material = new ShaderMaterial$1(Object.assign({}, params, - {uniforms: uniforms, + this.material = new ShaderMaterial$1({ + ...params, + uniforms, lights: true, transparent: this.transparent, - vertexColors: this.vertexColors})); + vertexColors: this.vertexColors, + }); }, }, - render: function render() { + render() { return []; }, __hmrId: 'SubSurfaceMaterial', -}; +}); -var ToonMaterial = { +var ToonMaterial = defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshToonMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'ToonMaterial', -}; +}); -var Texture = { +var Texture = defineComponent({ inject: ['material'], emits: ['loaded'], props: { - id: { type: String, default: 'map' }, + name: { type: String, default: 'map' }, + uniform: { type: String, default: null }, src: String, onLoad: Function, onProgress: Function, @@ -1489,39 +1742,45 @@ var Texture = { rotation: { type: Number, default: 0 }, center: { type: Object, default: { x: 0, y: 0 } }, }, - created: function created() { - var this$1 = this; - + created() { this.refreshTexture(); - watch(function () { return this$1.src; }, this.refreshTexture); + watch(() => this.src, this.refreshTexture); }, - unmounted: function unmounted() { - this.material.setTexture(null, this.id); + unmounted() { + if (this.material && this.material.setTexture) this.material.setTexture(null, this.name); this.texture.dispose(); }, methods: { - createTexture: function createTexture() { - var this$1 = this; - + createTexture() { this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError); - var wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center']; - wathProps.forEach(function (prop) { - bindProp(this$1, prop, this$1.texture); + const wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center']; + wathProps.forEach(prop => { + bindProp(this, prop, this.texture); }); }, - refreshTexture: function refreshTexture() { + refreshTexture() { this.createTexture(); - this.material.setTexture(this.texture, this.id); + // handle standard material + if (this.material && this.material.setTexture) { this.material.setTexture(this.texture, this.name); } + // handle shader material + else if (this.material && this.material.material.type === "ShaderMaterial") { + // require a `uniform` prop so we know what to call the uniform + if (!this.uniform) { + console.warn('"uniform" prop required to use texture in a shader.'); + return + } + this.material.uniforms[this.uniform] = { value: this.texture }; + } }, - onLoaded: function onLoaded() { - if (this.onLoad) { this.onLoad(); } + onLoaded() { + if (this.onLoad) this.onLoad(); this.$emit('loaded'); }, }, - render: function render() { return []; }, -}; + render() { return []; }, +}); -var CubeTexture = { +var CubeTexture = defineComponent({ inject: ['material'], emits: ['loaded'], props: { @@ -1533,481 +1792,181 @@ var CubeTexture = { onLoad: Function, onProgress: Function, onError: Function, - id: { type: String, default: 'envMap' }, + name: { type: String, default: 'envMap' }, refraction: Boolean, // todo: remove ? refractionRatio: { type: Number, default: 0.98 }, }, - created: function created() { - var this$1 = this; - + created() { this.refreshTexture(); - watch(function () { return this$1.path; }, this.refreshTexture); - watch(function () { return this$1.urls; }, this.refreshTexture); + watch(() => this.path, this.refreshTexture); + watch(() => this.urls, this.refreshTexture); }, - unmounted: function unmounted() { - this.material.setTexture(null, this.id); + unmounted() { + this.material.setTexture(null, this.name); this.texture.dispose(); }, methods: { - createTexture: function createTexture() { + createTexture() { this.texture = new CubeTextureLoader() .setPath(this.path) .load(this.urls, this.onLoaded, this.onProgress, this.onError); }, - refreshTexture: function refreshTexture() { + refreshTexture() { this.createTexture(); - this.material.setTexture(this.texture, this.id); + this.material.setTexture(this.texture, this.name); if (this.refraction) { this.texture.mapping = CubeRefractionMapping; this.material.setProp('refractionRatio', this.refractionRatio); } }, - onLoaded: function onLoaded() { - if (this.onLoad) { this.onLoad(); } + onLoaded() { + if (this.onLoad) this.onLoad(); this.$emit('loaded'); }, }, - render: function render() { + render() { return []; }, +}); + +const pointerProps = { + onPointerEnter: Function, + onPointerOver: Function, + onPointerMove: Function, + onPointerLeave: Function, + onPointerDown: Function, + onPointerUp: Function, + onClick: Function, }; -var Mesh = { - extends: Object3D, +const Mesh = defineComponent({ name: 'Mesh', + extends: Object3D, props: { castShadow: Boolean, receiveShadow: Boolean, - onHover: Function, - onClick: Function, + ...pointerProps, }, // can't use setup because it will not be used in sub components // setup() {}, - provide: function provide() { + provide() { return { mesh: this, }; }, - mounted: function mounted() { - if (!this.mesh && !this.loading) { this.initMesh(); } + mounted() { + if (!this.mesh && !this.loading) this.initMesh(); }, methods: { - initMesh: function initMesh() { - var this$1 = this; - + initMesh() { this.mesh = new Mesh$1(this.geometry, this.material); - - ['castShadow', 'receiveShadow'].forEach(function (p) { - this$1.mesh[p] = this$1[p]; - watch(function () { return this$1[p]; }, function () { this$1.mesh[p] = this$1[p]; }); - }); - - if (this.onHover) { - this.mesh.onHover = function (over) { this$1.onHover({ component: this$1, over: over }); }; - this.three.addIntersectObject(this.mesh); - } - - if (this.onClick) { - this.mesh.onClick = function (e) { this$1.onClick({ component: this$1, event: e }); }; + this.mesh.component = this; + + bindProp(this, 'castShadow', this.mesh); + bindProp(this, 'receiveShadow', this.mesh); + + if (this.onPointerEnter || + this.onPointerOver || + this.onPointerMove || + this.onPointerLeave || + this.onPointerDown || + this.onPointerUp || + this.onClick) { this.three.addIntersectObject(this.mesh); } this.initObject3D(this.mesh); }, - setGeometry: function setGeometry(geometry) { + addGeometryWatchers(props) { + Object.keys(props).forEach(prop => { + watch(() => this[prop], () => { + this.refreshGeometry(); + }); + }); + }, + setGeometry(geometry) { this.geometry = geometry; - if (this.mesh) { this.mesh.geometry = geometry; } + if (this.mesh) this.mesh.geometry = geometry; }, - setMaterial: function setMaterial(material) { + setMaterial(material) { this.material = material; - if (this.mesh) { this.mesh.material = material; } + if (this.mesh) this.mesh.material = material; }, - refreshGeometry: function refreshGeometry() { - var oldGeo = this.geometry; + refreshGeometry() { + const oldGeo = this.geometry; this.createGeometry(); this.mesh.geometry = this.geometry; oldGeo.dispose(); }, }, - unmounted: function unmounted() { + unmounted() { if (this.mesh) { this.three.removeIntersectObject(this.mesh); - } - // for predefined mesh (geometry and material are not unmounted) - if (this.geometry) { this.geometry.dispose(); } - if (this.material) { this.material.dispose(); } - }, - __hmrId: 'Mesh', -}; - -var Box = { - extends: Mesh, - props: { - size: Number, - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - depth: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - depthSegments: { type: Number, default: 1 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - if (this.size) { - this.geometry = new BoxBufferGeometry(this.size, this.size, this.size); - } else { - this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth); - } - }, - }, - __hmrId: 'Box', -}; - -var Circle = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - segments: { type: Number, default: 8 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Circle', -}; - -var Cone = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Cone', -}; - -var Cylinder = { - extends: Mesh, - props: { - radiusTop: { type: Number, default: 1 }, - radiusBottom: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Cylinder', -}; - -var Dodecahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Dodecahedron', -}; - -var Icosahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Icosahedron', -}; - -var Lathe = { - extends: Mesh, - props: { - points: Array, - segments: { type: Number, default: 12 }, - phiStart: { type: Number, default: 0 }, - phiLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['points', 'segments', 'phiStart', 'phiLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength); - }, - }, - __hmrId: 'Lathe', -}; - -var Octahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, + } + // for predefined mesh (geometry is not unmounted) + if (this.geometry) this.geometry.dispose(); }, - created: function created() { - var this$1 = this; - - this.createGeometry(); + __hmrId: 'Mesh', +}); - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new OctahedronBufferGeometry(this.radius, this.detail); +function meshComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Mesh, + props, + created() { + this.createGeometry(); + this.addGeometryWatchers(props); }, - }, - __hmrId: 'Octahedron', -}; + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + }, + __hmrId: name, + }); +} -var Plane = { - extends: Mesh, - props: { - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - }, - created: function created() { - var this$1 = this; +var Box = meshComponent('Box', props$h, createGeometry$f); - this.createGeometry(); +var Circle = meshComponent('Circle', props$g, createGeometry$e); - var watchProps = ['width', 'height', 'widthSegments', 'heightSegments']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments); - }, - }, - __hmrId: 'Plane', -}; +var Cone = meshComponent('Cone', props$f, createGeometry$d); -var Polyhedron = { - extends: Mesh, - props: { - vertices: Array, - indices: Array, - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; +var Cylinder = meshComponent('Cylinder', props$e, createGeometry$c); - this.createGeometry(); +var Dodecahedron = meshComponent('Dodecahedron', props$d, createGeometry$b); - var watchProps = ['vertices', 'indices', 'radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail); - }, - }, - __hmrId: 'Polyhedron', -}; +var Icosahedron = meshComponent('Icosahedron', props$c, createGeometry$a); -var Ring = { - extends: Mesh, - props: { - innerRadius: { type: Number, default: 0.5 }, - outerRadius: { type: Number, default: 1 }, - thetaSegments: { type: Number, default: 8 }, - phiSegments: { type: Number, default: 1 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; +var Lathe = meshComponent('Lathe', props$b, createGeometry$9); - this.createGeometry(); +var Octahedron = meshComponent('Octahedron', props$a, createGeometry$8); - var watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Ring', +const props$1 = { + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, }; -var Sphere = { - extends: Mesh, - props: { - radius: Number, - widthSegments: { type: Number, default: 12 }, - heightSegments: { type: Number, default: 12 }, - }, - watch: { - radius: function radius() { this.refreshGeometry(); }, - widthSegments: function widthSegments() { this.refreshGeometry(); }, - heightSegments: function heightSegments() { this.refreshGeometry(); }, - }, - created: function created() { - this.createGeometry(); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments); - }, - }, - __hmrId: 'Sphere', -}; +function createGeometry(comp) { + return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments); +} +geometryComponent('PlaneGeometry', props$1, createGeometry); -var Tetrahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; +var Plane = meshComponent('Plane', props$1, createGeometry); - this.createGeometry(); +var Polyhedron = meshComponent('Polyhedron', props$9, createGeometry$7); - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Tetrahedron', -}; +var Ring = meshComponent('Ring', props$8, createGeometry$6); + +var Sphere = meshComponent('Sphere', props$7, createGeometry$5); + +var Tetrahedron = meshComponent('Tetrahedron', props$6, createGeometry$4); -var TextProps = { +const props = { text: String, fontSrc: String, size: { type: Number, default: 80 }, @@ -2022,39 +1981,38 @@ var TextProps = { align: { type: [Boolean, String], default: false }, }; -var Text = { +var Text = defineComponent({ extends: Mesh, - props: Object.assign({}, TextProps), - data: function data() { + props, + data() { return { loading: true, }; }, - created: function created() { - var this$1 = this; - + created() { // add watchers - var watchProps = [ + const watchProps = [ 'text', 'size', 'height', 'curveSegments', 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments', - 'align' ]; - watchProps.forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - if (this$1.font) { this$1.refreshGeometry(); } + 'align', + ]; + watchProps.forEach(p => { + watch(() => this[p], () => { + if (this.font) this.refreshGeometry(); }); }); - var loader = new FontLoader(); - loader.load(this.fontSrc, function (font) { - this$1.loading = false; - this$1.font = font; - this$1.createGeometry(); - this$1.initMesh(); + const loader = new FontLoader(); + loader.load(this.fontSrc, (font) => { + this.loading = false; + this.font = font; + this.createGeometry(); + this.initMesh(); }); }, methods: { - createGeometry: function createGeometry() { - this.geometry = new TextBufferGeometry(this.text, { + createGeometry() { + this.geometry = new TextGeometry(this.text, { font: this.font, size: this.size, height: this.height, @@ -2072,161 +2030,32 @@ var Text = { } }, }, -}; - -var Torus = { - extends: Mesh, - props: { - radius: { type: Number, default: 0.5 }, - tube: { type: Number, default: 0.4 }, - radialSegments: { type: Number, default: 8 }, - tubularSegments: { type: Number, default: 6 }, - arc: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc); - }, - }, - __hmrId: 'Torus', -}; - -var TorusKnot = { - extends: Mesh, - props: { - radius: { type: Number, default: 0.5 }, - tube: { type: Number, default: 0.4 }, - tubularSegments: { type: Number, default: 64 }, - radialSegments: { type: Number, default: 8 }, - p: { type: Number, default: 2 }, - q: { type: Number, default: 3 }, - }, - created: function created() { - var this$1 = this; +}); - this.createGeometry(); +var Torus = meshComponent('Torus', props$5, createGeometry$3); - var watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q); - }, - }, - __hmrId: 'TorusKnot', -}; +var TorusKnot = meshComponent('TorusKnot', props$4, createGeometry$2); -var Tube = { +var Tube = defineComponent({ extends: Mesh, - props: { - path: Curve, - points: Array, - tubularSegments: { type: Number, default: 64 }, - radius: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - closed: { type: Boolean, default: false }, - }, - created: function created() { - var this$1 = this; - + props: props$3, + created() { this.createGeometry(); - var watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function (v) { - this$1.refreshGeometry(); - }); - }); - watch(function () { return this$1.points; }, function () { - updateTubeGeometryPoints(this$1.geometry, this$1.points); - }); + this.addGeometryWatchers(props$3); }, methods: { - createGeometry: function createGeometry() { - var curve; - if (this.points) { - curve = new CatmullRomCurve3(this.points); - } else if (this.path) { - curve = this.path; - } else { - console.error('Missing path curve or points.'); - } - this.geometry = new TubeGeometry$1(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed); + createGeometry() { + this.geometry = createGeometry$1(this); }, // update curve points (without using prop, faster) - updateCurve: function updateCurve(points) { + updatePoints(points) { updateTubeGeometryPoints(this.geometry, points); }, }, __hmrId: 'Tube', -}; - -function updateTubeGeometryPoints(tube, points) { - var curve = new CatmullRomCurve3(points); - var ref = tube.parameters; - var radialSegments = ref.radialSegments; - var radius = ref.radius; - var tubularSegments = ref.tubularSegments; - var closed = ref.closed; - var frames = curve.computeFrenetFrames(tubularSegments, closed); - tube.tangents = frames.tangents; - tube.normals = frames.normals; - tube.binormals = frames.binormals; - tube.parameters.path = curve; - - var pArray = tube.attributes.position.array; - var nArray = tube.attributes.normal.array; - var normal = new Vector3(); - var P; - - for (var i = 0; i < tubularSegments; i++) { - updateSegment(i); - } - updateSegment(tubularSegments); - - tube.attributes.position.needsUpdate = true; - tube.attributes.normal.needsUpdate = true; - - function updateSegment(i) { - P = curve.getPointAt(i / tubularSegments, P); - var N = frames.normals[i]; - var B = frames.binormals[i]; - for (var j = 0; j <= radialSegments; j++) { - var v = j / radialSegments * Math.PI * 2; - var sin = Math.sin(v); - var cos = -Math.cos(v); - normal.x = (cos * N.x + sin * B.x); - normal.y = (cos * N.y + sin * B.y); - normal.z = (cos * N.z + sin * B.z); - normal.normalize(); - var index = (i * (radialSegments + 1) + j) * 3; - nArray[index] = normal.x; - nArray[index + 1] = normal.y; - nArray[index + 2] = normal.z; - pArray[index] = P.x + radius * normal.x; - pArray[index + 1] = P.y + radius * normal.y; - pArray[index + 2] = P.z + radius * normal.z; - } - } -} +}); -var Gem = { +var Gem = defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2234,22 +2063,23 @@ var Gem = { cubeCameraFar: { type: Number, default: 2000 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initGem(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.meshBack) { this.$parent.remove(this.meshBack); } - if (this.materialBack) { this.materialBack.dispose(); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); + if (this.meshBack) this.removeFromParent(this.meshBack); + if (this.materialBack) this.materialBack.dispose(); }, methods: { - initGem: function initGem() { - var cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + initGem() { + const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); bindProp(this, 'position', this.cubeCamera); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.side = FrontSide; this.material.envMap = cubeRT.texture; @@ -2273,9 +2103,9 @@ var Gem = { bindProp(this, 'position', this.meshBack); bindProp(this, 'rotation', this.meshBack); bindProp(this, 'scale', this.meshBack); - this.$parent.add(this.meshBack); + this.addToParent(this.meshBack); }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.meshBack.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); @@ -2284,9 +2114,9 @@ var Gem = { }, }, __hmrId: 'Gem', -}; +}); -var Image = { +var Image = defineComponent({ emits: ['loaded'], extends: Mesh, props: { @@ -2295,48 +2125,46 @@ var Image = { height: Number, keepSize: Boolean, }, - created: function created() { - var this$1 = this; - + created() { this.createGeometry(); this.createMaterial(); this.initMesh(); - watch(function () { return this$1.src; }, this.refreshTexture); + watch(() => this.src, this.refreshTexture); - ['width', 'height'].forEach(function (p) { - watch(function () { return this$1[p]; }, this$1.resize); + ['width', 'height'].forEach(p => { + watch(() => this[p], this.resize); }); - if (this.keepSize) { this.three.onAfterResize(this.resize); } + if (this.keepSize) this.three.onAfterResize(this.resize); }, methods: { - createGeometry: function createGeometry() { - this.geometry = new PlaneBufferGeometry(1, 1, 1, 1); + createGeometry() { + this.geometry = new PlaneGeometry(1, 1, 1, 1); }, - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() }); }, - loadTexture: function loadTexture() { + loadTexture() { return new TextureLoader().load(this.src, this.onLoaded); }, - refreshTexture: function refreshTexture() { - if (this.texture) { this.texture.dispose(); } + refreshTexture() { + if (this.texture) this.texture.dispose(); this.material.map = this.loadTexture(); this.material.needsUpdate = true; }, - onLoaded: function onLoaded(texture) { + onLoaded(texture) { this.texture = texture; this.resize(); this.$emit('loaded'); }, - resize: function resize() { - if (!this.texture) { return; } - var screen = this.three.size; - var iW = this.texture.image.width; - var iH = this.texture.image.height; - var iRatio = iW / iH; - var w, h; + resize() { + if (!this.texture) return; + const screen = this.three.size; + const iW = this.texture.image.width; + const iH = this.texture.image.height; + const iRatio = iW / iH; + let w, h; if (this.width && this.height) { w = this.width * screen.wWidth / screen.width; h = this.height * screen.wHeight / screen.height; @@ -2352,54 +2180,68 @@ var Image = { }, }, __hmrId: 'Image', -}; +}); -var InstancedMesh = { +var InstancedMesh = defineComponent({ extends: Object3D, props: { castShadow: Boolean, receiveShadow: Boolean, count: Number, + ...pointerProps, }, - provide: function provide() { + provide() { return { mesh: this, }; }, - beforeMount: function beforeMount() { + beforeMount() { if (!this.$slots.default) { console.error('Missing Geometry'); } }, - created: function created() { + mounted() { this.initMesh(); }, methods: { - initMesh: function initMesh() { - var this$1 = this; - + initMesh() { this.mesh = new InstancedMesh$1(this.geometry, this.material, this.count); - - ['castShadow', 'receiveShadow'].forEach(function (p) { - this$1.mesh[p] = this$1[p]; - watch(function () { return this$1[p]; }, function () { this$1.mesh[p] = this$1[p]; }); - }); + this.mesh.component = this; + + bindProp(this, 'castShadow', this.mesh); + bindProp(this, 'receiveShadow', this.mesh); + + if (this.onPointerEnter || + this.onPointerOver || + this.onPointerMove || + this.onPointerLeave || + this.onPointerDown || + this.onPointerUp || + this.onClick) { + this.three.addIntersectObject(this.mesh); + } this.initObject3D(this.mesh); }, - setGeometry: function setGeometry(geometry) { + setGeometry(geometry) { this.geometry = geometry; - if (this.mesh) { this.mesh.geometry = geometry; } + if (this.mesh) this.mesh.geometry = geometry; }, - setMaterial: function setMaterial(material) { + setMaterial(material) { this.material = material; - if (this.mesh) { this.mesh.material = material; } + this.material.instancingColor = true; + if (this.mesh) this.mesh.material = material; }, }, + unmounted() { + if (this.mesh) { + this.three.removeIntersectObject(this.mesh); + } + }, __hmrId: 'InstancedMesh', -}; +}); -var MirrorMesh = { +var MirrorMesh = defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2407,34 +2249,34 @@ var MirrorMesh = { cubeCameraFar: { type: Number, default: 2000 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initMirrorMesh(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.cubeCamera) { this.$parent.remove(this.cubeCamera); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); }, methods: { - initMirrorMesh: function initMirrorMesh() { - var cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + initMirrorMesh() { + const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.envMap = cubeRT.texture; this.material.needsUpdate = true; }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); this.mesh.visible = true; }, }, __hmrId: 'MirrorMesh', -}; +}); -var RefractionMesh = { +var RefractionMesh = defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2443,76 +2285,76 @@ var RefractionMesh = { refractionRatio: { type: Number, default: 0.98 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initMirrorMesh(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.cubeCamera) { this.$parent.remove(this.cubeCamera); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); }, methods: { - initMirrorMesh: function initMirrorMesh() { - var cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + initMirrorMesh() { + const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); bindProp(this, 'position', this.cubeCamera); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.envMap = cubeRT.texture; this.material.refractionRatio = this.refractionRatio; this.material.needsUpdate = true; }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); this.mesh.visible = true; }, }, __hmrId: 'RefractionMesh', -}; +}); -var Sprite = { +var Sprite = defineComponent({ extends: Object3D, emits: ['loaded'], props: { src: String, }, - data: function data() { + data() { return { loading: true, }; }, - created: function created() { + created() { this.texture = new TextureLoader().load(this.src, this.onLoaded); this.material = new SpriteMaterial({ map: this.texture }); this.sprite = new Sprite$1(this.material); this.geometry = this.sprite.geometry; this.initObject3D(this.sprite); }, - unmounted: function unmounted() { + unmounted() { this.texture.dispose(); this.material.dispose(); }, methods: { - onLoaded: function onLoaded() { + onLoaded() { this.loading = false; this.updateUV(); this.$emit('loaded'); }, - updateUV: function updateUV() { + updateUV() { this.iWidth = this.texture.image.width; this.iHeight = this.texture.image.height; this.iRatio = this.iWidth / this.iHeight; - var x = 0.5, y = 0.5; + let x = 0.5, y = 0.5; if (this.iRatio > 1) { y = 0.5 / this.iRatio; } else { x = 0.5 / this.iRatio; } - var positions = this.geometry.attributes.position.array; + const positions = this.geometry.attributes.position.array; positions[0] = -x; positions[1] = -y; positions[5] = x; positions[6] = -y; positions[10] = x; positions[11] = y; @@ -2521,116 +2363,136 @@ var Sprite = { }, }, __hmrId: 'Sprite', -}; +}); -var GLTF = { +var Model = defineComponent({ extends: Object3D, - emits: ['loaded'], + emits: ['load', 'progress', 'error'], + data() { + return { + progress: 0, + }; + }, + methods: { + onLoad(model) { + this.$emit('load', model); + this.initObject3D(model); + }, + onProgress(progress) { + this.progress = progress.loaded / progress.total; + this.$emit('progress', progress); + }, + onError(error) { + this.$emit('error', error); + }, + }, +}); + +var GLTF = defineComponent({ + extends: Model, props: { src: String, }, - created: function created() { - var this$1 = this; - - var loader = new GLTFLoader(); - loader.load(this.src, function (gltf) { - this$1.$emit('loaded', gltf); - this$1.initObject3D(gltf.scene); - }); + created() { + const loader = new GLTFLoader(); + loader.load(this.src, (gltf) => { + this.onLoad(gltf.scene); + }, this.onProgress, this.onError); }, -}; +}); -var FBX = { - extends: Object3D, - emits: ['loaded'], +var FBX = defineComponent({ + extends: Model, props: { src: String, }, - created: function created() { - var this$1 = this; - - var loader = new FBXLoader(); - loader.load(this.src, function (fbx) { - this$1.$emit('loaded', fbx); - this$1.initObject3D(fbx); - }); + created() { + const loader = new FBXLoader(); + loader.load(this.src, (fbx) => { + this.onLoad(fbx); + }, this.onProgress, this.onError); }, -}; +}); -var EffectComposer = { - setup: function setup() { +var EffectComposer = defineComponent({ + setup() { return { passes: [], }; }, inject: ['three'], - provide: function provide() { + provide() { return { passes: this.passes, }; }, - mounted: function mounted() { - var this$1 = this; - - this.three.onAfterInit(function () { - this$1.composer = new EffectComposer$1(this$1.three.renderer); - this$1.three.renderer.autoClear = false; - this$1.passes.forEach(function (pass) { - this$1.composer.addPass(pass); + mounted() { + this.three.onAfterInit(() => { + this.composer = new EffectComposer$1(this.three.renderer); + this.three.renderer.autoClear = false; + this.passes.forEach(pass => { + this.composer.addPass(pass); }); - this$1.three.composer = this$1.composer; + this.three.composer = this.composer; - this$1.resize(); - this$1.three.onAfterResize(this$1.resize); + this.resize(); + this.three.onAfterResize(this.resize); }); }, - unmounted: function unmounted() { + unmounted() { this.three.offAfterResize(this.resize); }, methods: { - resize: function resize() { + resize() { this.composer.setSize(this.three.size.width, this.three.size.height); }, }, - render: function render() { + render() { return this.$slots.default(); }, __hmrId: 'EffectComposer', -}; +}); -var EffectPass = { +var EffectPass = defineComponent({ inject: ['three', 'passes'], - beforeMount: function beforeMount() { + emits: ['ready'], + beforeMount() { if (!this.passes) { console.error('Missing parent EffectComposer'); } }, - unmounted: function unmounted() { - if (this.pass.dispose) { this.pass.dispose(); } + unmounted() { + if (this.pass.dispose) this.pass.dispose(); + }, + methods: { + completePass(pass) { + this.passes.push(pass); + this.pass = pass; + this.$emit('ready', pass); + }, }, - render: function render() { + render() { return []; }, __hmrId: 'EffectPass', -}; +}); -var RenderPass = { +var RenderPass = defineComponent({ extends: EffectPass, - mounted: function mounted() { + mounted() { if (!this.three.scene) { console.error('Missing Scene'); } if (!this.three.camera) { console.error('Missing Camera'); } - var pass = new RenderPass$1(this.three.scene, this.three.camera); - this.passes.push(pass); - this.pass = pass; + const pass = new RenderPass$1(this.three.scene, this.three.camera); + this.completePass(pass); }, __hmrId: 'RenderPass', -}; +}); -var BokehPass = { +var BokehPass = defineComponent({ extends: EffectPass, props: { focus: { @@ -2647,90 +2509,74 @@ var BokehPass = { }, }, watch: { - focus: function focus() { this.pass.uniforms.focus.value = this.focus; }, - aperture: function aperture() { this.pass.uniforms.aperture.value = this.aperture; }, - maxblur: function maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; }, + focus() { this.pass.uniforms.focus.value = this.focus; }, + aperture() { this.pass.uniforms.aperture.value = this.aperture; }, + maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; }, }, - mounted: function mounted() { + mounted() { if (!this.three.scene) { console.error('Missing Scene'); } if (!this.three.camera) { console.error('Missing Camera'); } - var params = { + const params = { focus: this.focus, aperture: this.aperture, maxblur: this.maxblur, width: this.three.size.width, height: this.three.size.height, }; - var pass = new BokehPass$1(this.three.scene, this.three.camera, params); - this.passes.push(pass); - this.pass = pass; + const pass = new BokehPass$1(this.three.scene, this.three.camera, params); + this.completePass(pass); }, __hmrId: 'BokehPass', -}; +}); -var FilmPass = { +var FilmPass = defineComponent({ extends: EffectPass, props: { - noiseIntensity: { - type: Number, - default: 0.5, - }, - scanlinesIntensity: { - type: Number, - default: 0.05, - }, - scanlinesCount: { - type: Number, - default: 4096, - }, - grayscale: { - type: Number, - default: 0, - }, + noiseIntensity: { type: Number, default: 0.5 }, + scanlinesIntensity: { type: Number, default: 0.05 }, + scanlinesCount: { type: Number, default: 4096 }, + grayscale: { type: Number, default: 0 }, }, watch: { - noiseIntensity: function noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; }, - scanlinesIntensity: function scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; }, - scanlinesCount: function scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; }, - grayscale: function grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; }, + noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; }, + scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; }, + scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; }, + grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; }, }, - mounted: function mounted() { - var pass = new FilmPass$1(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); - this.passes.push(pass); - this.pass = pass; + mounted() { + const pass = new FilmPass$1(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); + this.completePass(pass); }, __hmrId: 'FilmPass', -}; +}); -var FXAAPass = { +var FXAAPass = defineComponent({ extends: EffectPass, - mounted: function mounted() { - var pass = new ShaderPass(FXAAShader); - this.passes.push(pass); - this.pass = pass; + mounted() { + const pass = new ShaderPass(FXAAShader); + this.completePass(pass); // resize will be called in three init this.three.onAfterResize(this.resize); }, - unmounted: function unmounted() { + unmounted() { this.three.offAfterResize(this.resize); }, methods: { - resize: function resize() { - var ref = this.pass.material.uniforms; - var resolution = ref.resolution; + resize() { + const { resolution } = this.pass.material.uniforms; resolution.value.x = 1 / this.three.size.width; resolution.value.y = 1 / this.three.size.height; }, }, __hmrId: 'FXAAPass', -}; +}); -var HalftonePass = { +var HalftonePass = defineComponent({ extends: EffectPass, props: { shape: { type: Number, default: 1 }, @@ -2740,39 +2586,73 @@ var HalftonePass = { rotateB: { type: Number, default: Math.PI / 12 * 3 }, scatter: { type: Number, default: 0 }, }, - mounted: function mounted() { - var this$1 = this; + mounted() { + const pass = new HalftonePass$1(this.three.size.width, this.three.size.height, {}); - var pass = new HalftonePass$1(this.three.size.width, this.three.size.height, {}); - - ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(function (p) { - pass.uniforms[p].value = this$1[p]; - watch(function () { return this$1[p]; }, function () { - pass.uniforms[p].value = this$1[p]; + ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => { + pass.uniforms[p].value = this[p]; + watch(() => this[p], () => { + pass.uniforms[p].value = this[p]; }); }); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'HalftonePass', -}; +}); -var SMAAPass = { +var SMAAPass = defineComponent({ extends: EffectPass, - mounted: function mounted() { + mounted() { // three size is not set yet, but this pass will be resized by effect composer - var pass = new SMAAPass$1(this.three.size.width, this.three.size.height); - this.passes.push(pass); - this.pass = pass; + const pass = new SMAAPass$1(this.three.size.width, this.three.size.height); + this.completePass(pass); }, __hmrId: 'SMAAPass', -}; +}); + +var SSAOPass = defineComponent({ + extends: EffectPass, + props: { + scene: null, + camera: null, + options: { + type: Object, + default: () => ({}), + }, + }, + mounted() { + const pass = new SSAOPass$1( + this.scene || this.three.scene, + this.camera || this.three.camera, + this.three.size.width, + this.three.size.height + ); + + for (const key of Object.keys(this.options)) { + pass[key] = this.options[key]; + } + + this.completePass(pass); + }, + __hmrId: 'SSAOPass', +}); var DefaultShader = { uniforms: {}, - vertexShader: "\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ", - fragmentShader: "\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n ", + vertexShader: ` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `, + fragmentShader: ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + `, }; // From https://github.com/evanw/glfx.js @@ -2788,10 +2668,53 @@ var TiltShift = { texSize: { value: new Vector2() }, }, vertexShader: DefaultShader.vertexShader, - 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 ", + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `, }; -var TiltShiftPass = { +var TiltShiftPass = defineComponent({ extends: EffectPass, props: { blurRadius: { type: Number, default: 10 }, @@ -2799,17 +2722,15 @@ var TiltShiftPass = { start: { type: Object, default: { x: 0, y: 100 } }, end: { type: Object, default: { x: 10, y: 100 } }, }, - mounted: function mounted() { - var this$1 = this; - + mounted() { this.pass = new ShaderPass(TiltShift); this.passes.push(this.pass); this.pass1 = new ShaderPass(TiltShift); this.passes.push(this.pass1); - var uniforms = this.uniforms = this.pass.uniforms; - var uniforms1 = this.uniforms1 = this.pass1.uniforms; + const uniforms = this.uniforms = this.pass.uniforms; + const uniforms1 = this.uniforms1 = this.pass1.uniforms; uniforms1.blurRadius = uniforms.blurRadius; uniforms1.gradientRadius = uniforms.gradientRadius; uniforms1.start = uniforms.start; @@ -2820,27 +2741,31 @@ var TiltShiftPass = { bindProp(this, 'gradientRadius', uniforms.gradientRadius, 'value'); this.updateFocusLine(); - ['start', 'end'].forEach(function (p) { - watch(function () { return this$1[p]; }, this$1.updateFocusLine, { deep: true }); + ['start', 'end'].forEach(p => { + watch(() => this[p], this.updateFocusLine, { deep: true }); }); - this.pass.setSize = function (width, height) { + this.pass.setSize = (width, height) => { uniforms.texSize.value.set(width, height); }; + + // emit ready event with two passes - do so manually in this file instead + // of calling `completePass` like in other effect types + this.$emit('ready', [this.pass, this.pass1]); }, methods: { - updateFocusLine: function updateFocusLine() { + updateFocusLine() { this.uniforms.start.value.copy(this.start); this.uniforms.end.value.copy(this.end); - var dv = new Vector2().copy(this.end).sub(this.start).normalize(); + const dv = new Vector2().copy(this.end).sub(this.start).normalize(); this.uniforms.delta.value.copy(dv); this.uniforms1.delta.value.set(-dv.y, dv.x); }, }, __hmrId: 'TiltShiftPass', -}; +}); -var UnrealBloomPass = { +var UnrealBloomPass = defineComponent({ extends: EffectPass, props: { strength: { type: Number, default: 1.5 }, @@ -2848,18 +2773,17 @@ var UnrealBloomPass = { threshold: { type: Number, default: 0 }, }, watch: { - strength: function strength() { this.pass.strength = this.strength; }, - radius: function radius() { this.pass.radius = this.radius; }, - threshold: function threshold() { this.pass.threshold = this.threshold; }, + strength() { this.pass.strength = this.strength; }, + radius() { this.pass.radius = this.radius; }, + threshold() { this.pass.threshold = this.threshold; }, }, - mounted: function mounted() { - var size = new Vector2(this.three.size.width, this.three.size.height); - var pass = new UnrealBloomPass$1(size, this.strength, this.radius, this.threshold); - this.passes.push(pass); - this.pass = pass; + mounted() { + const size = new Vector2(this.three.size.width, this.three.size.height); + const pass = new UnrealBloomPass$1(size, this.strength, this.radius, this.threshold); + this.completePass(pass); }, __hmrId: 'UnrealBloomPass', -}; +}); // From https://github.com/evanw/glfx.js @@ -2870,25 +2794,62 @@ var ZoomBlur = { strength: { value: 0 }, }, vertexShader: DefaultShader.vertexShader, - 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 ", + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `, }; -var ZoomBlurPass = { +var ZoomBlurPass = defineComponent({ extends: EffectPass, props: { center: { type: Object, default: { x: 0.5, y: 0.5 } }, strength: { type: Number, default: 0.5 }, }, - mounted: function mounted() { - this.pass = new ShaderPass(ZoomBlur); - this.passes.push(this.pass); + mounted() { + const pass = new ShaderPass(ZoomBlur); - var uniforms = this.uniforms = this.pass.uniforms; + const uniforms = this.uniforms = pass.uniforms; bindProp(this, 'center', uniforms.center, 'value'); bindProp(this, 'strength', uniforms.strength, 'value'); + + this.completePass(pass); }, __hmrId: 'ZoomBlurPass', -}; +}); var TROIS = /*#__PURE__*/Object.freeze({ __proto__: null, @@ -2898,6 +2859,8 @@ var TROIS = /*#__PURE__*/Object.freeze({ Camera: PerspectiveCamera, Group: Group, Scene: Scene, + Object3D: Object3D, + Raycaster: Raycaster, BoxGeometry: BoxGeometry, CircleGeometry: CircleGeometry, ConeGeometry: ConeGeometry, @@ -2963,6 +2926,7 @@ var TROIS = /*#__PURE__*/Object.freeze({ FXAAPass: FXAAPass, HalftonePass: HalftonePass, SMAAPass: SMAAPass, + SSAOPass: SSAOPass, TiltShiftPass: TiltShiftPass, UnrealBloomPass: UnrealBloomPass, ZoomBlurPass: ZoomBlurPass, @@ -2974,17 +2938,16 @@ var TROIS = /*#__PURE__*/Object.freeze({ lerpv2: lerpv2, lerpv3: lerpv3, limit: limit, - getMatcapUrl: getMatcapUrl, - defaultVertexShader: defaultVertexShader, - defaultFragmentShader: defaultFragmentShader + getMatcapUrl: getMatcapUrl }); -var TroisJSVuePlugin = { - install: function (app) { - var comps = [ +const TroisJSVuePlugin = { + install: (app) => { + const comps = [ 'Camera', 'OrthographicCamera', 'PerspectiveCamera', + 'Raycaster', 'Renderer', 'Scene', 'Group', @@ -3047,13 +3010,15 @@ var TroisJSVuePlugin = { 'RenderPass', 'SAOPass', 'SMAAPass', + 'SSAOPass', 'TiltShiftPass', 'UnrealBloomPass', 'ZoomBlurPass', - 'GLTFViewer' ]; + 'GLTFViewer', + ]; - comps.forEach(function (comp) { + comps.forEach(comp => { app.component(comp, TROIS[comp]); }); }, @@ -3063,5 +3028,5 @@ function createApp(params) { return createApp$1(params).use(TroisJSVuePlugin); } -export { AmbientLight, BasicMaterial, BokehPass, Box, BoxGeometry, PerspectiveCamera as Camera, Circle, CircleGeometry, Cone, ConeGeometry, CubeTexture, Cylinder, CylinderGeometry, DirectionalLight, Dodecahedron, DodecahedronGeometry, EffectComposer, FBX as FBXModel, FXAAPass, FilmPass, GLTF as GLTFModel, Gem, Group, HalftonePass, HemisphereLight, Icosahedron, IcosahedronGeometry, Image, InstancedMesh, LambertMaterial, Lathe, LatheGeometry, MatcapMaterial, Mesh, MirrorMesh, Octahedron, OctahedronGeometry, OrthographicCamera, PerspectiveCamera, PhongMaterial, PhysicalMaterial, Plane, PointLight, Polyhedron, PolyhedronGeometry, RectAreaLight, RefractionMesh, RenderPass, Renderer, Ring, RingGeometry, SMAAPass, Scene, ShaderMaterial, Sphere, SphereGeometry, SpotLight, Sprite, StandardMaterial, SubSurfaceMaterial, Tetrahedron, TetrahedronGeometry, Text, Texture, TiltShiftPass, ToonMaterial, Torus, TorusGeometry, TorusKnot, TorusKnotGeometry, TroisJSVuePlugin, Tube, TubeGeometry, UnrealBloomPass, ZoomBlurPass, bindProp, bindProps, createApp, defaultFragmentShader, defaultVertexShader, getMatcapUrl, lerp, lerpv2, lerpv3, limit, propsValues, setFromProp }; +export { AmbientLight, BasicMaterial, BokehPass, Box, BoxGeometry, PerspectiveCamera as Camera, Circle, CircleGeometry, Cone, ConeGeometry, CubeTexture, Cylinder, CylinderGeometry, DirectionalLight, Dodecahedron, DodecahedronGeometry, EffectComposer, FBX as FBXModel, FXAAPass, FilmPass, GLTF as GLTFModel, Gem, Group, HalftonePass, HemisphereLight, Icosahedron, IcosahedronGeometry, Image, InstancedMesh, LambertMaterial, Lathe, LatheGeometry, MatcapMaterial, Mesh, MirrorMesh, Object3D, Octahedron, OctahedronGeometry, OrthographicCamera, PerspectiveCamera, PhongMaterial, PhysicalMaterial, Plane, PointLight, Polyhedron, PolyhedronGeometry, Raycaster, RectAreaLight, RefractionMesh, RenderPass, Renderer, Ring, RingGeometry, SMAAPass, SSAOPass, Scene, ShaderMaterial, Sphere, SphereGeometry, SpotLight, Sprite, StandardMaterial, SubSurfaceMaterial, Tetrahedron, TetrahedronGeometry, Text, Texture, TiltShiftPass, ToonMaterial, Torus, TorusGeometry, TorusKnot, TorusKnotGeometry, TroisJSVuePlugin, Tube, TubeGeometry, UnrealBloomPass, ZoomBlurPass, bindProp, bindProps, createApp, getMatcapUrl, lerp, lerpv2, lerpv3, limit, propsValues, setFromProp }; //# sourceMappingURL=trois.module.cdn.js.map diff --git a/build/trois.module.cdn.js.map b/build/trois.module.cdn.js.map index a27bbc5..c82704e 100644 --- a/build/trois.module.cdn.js.map +++ b/build/trois.module.cdn.js.map @@ -1 +1 @@ -{"version":3,"file":"trois.module.cdn.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/core/OrthographicCamera.js","../src/core/PerspectiveCamera.js","../src/core/Object3D.js","../src/core/Group.js","../src/core/Scene.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/CircleGeometry.js","../src/geometries/ConeGeometry.js","../src/geometries/CylinderGeometry.js","../src/geometries/DodecahedronGeometry.js","../src/geometries/IcosahedronGeometry.js","../src/geometries/LatheGeometry.js","../src/geometries/OctahedronGeometry.js","../src/geometries/PolyhedronGeometry.js","../src/geometries/RingGeometry.js","../src/geometries/SphereGeometry.js","../src/geometries/TetrahedronGeometry.js","../src/geometries/TorusGeometry.js","../src/geometries/TorusKnotGeometry.js","../src/geometries/TubeGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.js","../src/lights/DirectionalLight.js","../src/lights/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/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.js","../src/meshes/TextProps.js","../src/meshes/Text.js","../src/meshes/Torus.js","../src/meshes/TorusKnot.js","../src/meshes/Tube.js","../src/meshes/Gem.js","../src/meshes/Image.js","../src/meshes/InstancedMesh.js","../src/meshes/MirrorMesh.js","../src/meshes/RefractionMesh.js","../src/meshes/Sprite.js","../src/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/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 {\n Plane,\n Raycaster,\n Vector2,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\n/**\n * Three.js helper\n */\nexport default function useThree() {\n // default conf\n const conf = {\n canvas: null,\n antialias: true,\n alpha: false,\n autoClear: true,\n orbit_ctrl: false,\n mouse_move: false,\n mouse_raycast: false,\n mouse_over: false,\n click: false,\n resize: true,\n width: 0,\n height: 0,\n };\n\n // size\n const size = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n };\n\n // handlers\n const afterInitCallbacks = [];\n let afterResizeCallbacks = [];\n let beforeRenderCallbacks = [];\n\n // mouse tracking\n const mouse = new Vector2();\n const mouseV3 = new Vector3();\n const mousePlane = new Plane(new Vector3(0, 0, 1), 0);\n const raycaster = new Raycaster();\n\n // raycast objects\n const intersectObjects = [];\n\n // returned object\n const obj = {\n conf,\n renderer: null,\n camera: null,\n cameraCtrl: null,\n materials: {},\n scene: null,\n size,\n mouse, mouseV3,\n init,\n dispose,\n render,\n renderC,\n setSize,\n onAfterInit,\n onAfterResize, offAfterResize,\n onBeforeRender, offBeforeRender,\n addIntersectObject, removeIntersectObject,\n };\n\n /**\n * init three\n */\n function init(params) {\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n conf[key] = value;\n });\n }\n\n if (!obj.scene) {\n console.error('Missing Scene');\n return;\n }\n\n if (!obj.camera) {\n console.error('Missing Camera');\n return;\n }\n\n obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha });\n obj.renderer.autoClear = conf.autoClear;\n\n if (conf.orbit_ctrl) {\n obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement);\n if (conf.orbit_ctrl instanceof Object) {\n Object.entries(conf.orbit_ctrl).forEach(([key, value]) => {\n obj.orbitCtrl[key] = value;\n });\n }\n }\n\n if (conf.resize) {\n onResize();\n window.addEventListener('resize', onResize);\n } else {\n setSize(conf.width | 300, conf.height | 150);\n }\n\n conf.mouse_move = conf.mouse_move || conf.mouse_over;\n if (conf.mouse_move) {\n if (conf.mouse_move === 'body') {\n obj.mouse_move_element = document.body;\n } else {\n obj.mouse_move_element = obj.renderer.domElement;\n }\n obj.mouse_move_element.addEventListener('mousemove', onMousemove);\n obj.mouse_move_element.addEventListener('mouseleave', onMouseleave);\n }\n\n if (conf.click) {\n obj.renderer.domElement.addEventListener('click', onClick);\n }\n\n afterInitCallbacks.forEach(c => c());\n\n return true;\n };\n\n /**\n * add after init callback\n */\n function onAfterInit(callback) {\n afterInitCallbacks.push(callback);\n }\n\n /**\n * add after resize callback\n */\n function onAfterResize(callback) {\n afterResizeCallbacks.push(callback);\n }\n\n /**\n * remove after resize callback\n */\n function offAfterResize(callback) {\n afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback);\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(callback) {\n beforeRenderCallbacks.push(callback);\n }\n\n /**\n * remove before render callback\n */\n function offBeforeRender(callback) {\n beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback);\n }\n\n /**\n * default render\n */\n function render() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.renderer.render(obj.scene, obj.camera);\n }\n\n /**\n * composer render\n */\n function renderC() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.composer.render();\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o);\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o) {\n const i = intersectObjects.indexOf(o);\n if (i !== -1) {\n intersectObjects.splice(i, 1);\n }\n }\n\n /**\n * remove listeners\n */\n function dispose() {\n beforeRenderCallbacks = [];\n window.removeEventListener('resize', onResize);\n if (obj.mouse_move_element) {\n obj.mouse_move_element.removeEventListener('mousemove', onMousemove);\n obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave);\n }\n obj.renderer.domElement.removeEventListener('click', onClick);\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\n this.renderer.dispose();\n }\n\n /**\n */\n function updateMouse(e) {\n const rect = e.target.getBoundingClientRect();\n mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1;\n mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1;\n }\n\n /**\n * click listener\n */\n function onClick(e) {\n updateMouse(e);\n raycaster.setFromCamera(mouse, obj.camera);\n const objects = raycaster.intersectObjects(intersectObjects);\n for (let i = 0; i < objects.length; i++) {\n const o = objects[i].object;\n if (o.onClick) o.onClick(e);\n }\n }\n\n /**\n * mousemove listener\n */\n function onMousemove(e) {\n updateMouse(e);\n onMousechange(e);\n }\n\n /**\n * mouseleave listener\n */\n function onMouseleave(e) {\n // mouse.x = 0;\n // mouse.y = 0;\n onMousechange(e);\n }\n\n /**\n * mouse change\n */\n function onMousechange(e) {\n if (conf.mouse_over || conf.mouse_raycast) {\n raycaster.setFromCamera(mouse, obj.camera);\n\n if (conf.mouse_raycast) {\n // get mouse 3d position\n obj.camera.getWorldDirection(mousePlane.normal);\n mousePlane.normal.normalize();\n raycaster.ray.intersectPlane(mousePlane, mouseV3);\n }\n\n if (conf.mouse_over) {\n const onObjects = raycaster.intersectObjects(intersectObjects);\n const offObjects = [...intersectObjects];\n for (let i = 0; i < onObjects.length; i++) {\n const o = onObjects[i].object;\n if (!o.hover && o.onHover) {\n o.hover = true;\n o.onHover(true);\n }\n offObjects.splice(offObjects.indexOf(o), 1);\n }\n for (let i = 0; i < offObjects.length; i++) {\n const o = offObjects[i];\n if (o.hover && o.onHover) {\n o.hover = false;\n o.onHover(false);\n }\n }\n }\n }\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (conf.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight);\n } else {\n const elt = obj.renderer.domElement.parentNode;\n setSize(elt.clientWidth, elt.clientHeight);\n }\n afterResizeCallbacks.forEach(c => c());\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width, height) {\n size.width = width;\n size.height = height;\n size.ratio = width / height;\n\n obj.renderer.setSize(width, height, false);\n obj.camera.aspect = size.ratio;\n obj.camera.updateProjectionMatrix();\n\n if (obj.composer) {\n obj.composer.setSize(width, height);\n }\n\n if (obj.camera.type === 'OrthographicCamera') {\n size.wWidth = obj.camera.right - obj.camera.left;\n size.wHeight = obj.camera.top - obj.camera.bottom;\n } else {\n const wsize = getCameraSize();\n size.wWidth = wsize[0]; size.wHeight = wsize[1];\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const vFOV = (obj.camera.fov * Math.PI) / 180;\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z);\n const w = h * obj.camera.aspect;\n return [w, h];\n }\n\n return obj;\n}\n","import { h } from 'vue';\nimport useThree from './useThree';\n\nexport default {\n name: 'Renderer',\n props: {\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n mouseMove: { type: [Boolean, String], default: false },\n mouseRaycast: { type: Boolean, default: false },\n mouseOver: { type: Boolean, default: false },\n click: { type: Boolean, default: false },\n orbitCtrl: { type: [Boolean, Object], default: false },\n resize: { type: [Boolean, String], default: false },\n shadow: Boolean,\n width: String,\n height: String,\n },\n setup() {\n return {\n three: useThree(),\n raf: true,\n onMountedCallbacks: [],\n };\n },\n provide() {\n return {\n three: this.three,\n // renderer: this.three.renderer,\n rendererComponent: this,\n };\n },\n mounted() {\n const params = {\n canvas: this.$el,\n antialias: this.antialias,\n alpha: this.alpha,\n autoClear: this.autoClear,\n orbit_ctrl: this.orbitCtrl,\n mouse_move: this.mouseMove,\n mouse_raycast: this.mouseRaycast,\n mouse_over: this.mouseOver,\n click: this.click,\n resize: this.resize,\n width: this.width,\n height: this.height,\n };\n\n if (this.three.init(params)) {\n this.renderer = this.three.renderer;\n this.renderer.shadowMap.enabled = this.shadow;\n if (this.three.composer) this.animateC();\n else this.animate();\n };\n\n this.onMountedCallbacks.forEach(c => c());\n },\n beforeUnmount() {\n this.raf = false;\n this.three.dispose();\n },\n methods: {\n onMounted(callback) {\n this.onMountedCallbacks.push(callback);\n },\n onBeforeRender(callback) {\n this.three.onBeforeRender(callback);\n },\n onAfterResize(callback) {\n this.three.onAfterResize(callback);\n },\n animate() {\n if (this.raf) requestAnimationFrame(this.animate);\n this.three.render();\n },\n animateC() {\n if (this.raf) requestAnimationFrame(this.animateC);\n this.three.renderC();\n },\n },\n render() {\n return h('canvas', {}, this.$slots.default());\n },\n __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\n// shader defaults\nexport const defaultVertexShader = `\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\nexport const defaultFragmentShader = `\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}`;\n","import { OrthographicCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'OrthographicCamera',\n};\n","import { PerspectiveCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'PerspectiveCamera',\n};\n","import { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n name: 'Object3D',\n inject: ['three', 'scene', 'rendererComponent'],\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 },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this._parent) this._parent.remove(this.o3d);\n },\n methods: {\n initObject3D(o3d) {\n this.o3d = 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 let parent = this.$parent;\n while (parent) {\n if (parent.add) {\n parent.add(this.o3d);\n this._parent = parent;\n break;\n }\n parent = parent.$parent;\n }\n if (!this._parent) console.error('Missing parent (Scene, Group...)');\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 { Group } from 'three';\nimport Object3D from './Object3D.js';\n\nexport default {\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 { Scene, Color } from 'three';\nimport { watch } from 'vue';\n\nexport default {\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 { watch } from 'vue';\n\nexport default {\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","import { BoxGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n methods: {\n createGeometry() {\n let w = this.width, h = this.height, d = this.depth;\n if (this.size) {\n w = this.size; h = this.size; d = this.size;\n }\n this.geometry = new BoxGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments);\n },\n },\n};\n","import { CircleGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { ConeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { CylinderGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { DodecahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { IcosahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { LatheGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n};\n","import { OctahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { PolyhedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n};\n","import { RingGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new RingGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { SphereGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n};\n","import { TetrahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { TorusGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n};\n","import { TorusKnotGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n 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 methods: {\n createGeometry() {\n this.geometry = new TorusKnotGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n};\n","import { Curve, TubeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radiusSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed);\n },\n },\n};\n","import { watch } from 'vue';\nimport Object3D from '../core/Object3D.js';\nimport { bindProp, setFromProp } from '../tools.js';\n\nexport default {\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.$parent.remove(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.$parent.add(this.light.target);\n },\n },\n __hmrId: 'Light',\n};\n","import { AmbientLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n created() {\n this.light = new AmbientLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'AmbientLight',\n};\n","import { DirectionalLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n target: Object,\n },\n created() {\n this.light = new DirectionalLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'DirectionalLight',\n};\n","import { HemisphereLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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 { PointLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n distance: {\n type: Number,\n default: 0,\n },\n decay: {\n type: Number,\n default: 1,\n },\n },\n created() {\n this.light = new PointLight(this.color, this.intensity, this.distance, this.decay);\n this.initLight();\n },\n __hmrId: 'PointLight',\n};\n","import { RectAreaLight } from 'three';\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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.$parent.add(this.lightHelper);\n }\n\n this.initLight();\n },\n unmounted() {\n if (this.lightHelper) this.$parent.remove(this.lightHelper);\n },\n __hmrId: 'RectAreaLight',\n};\n","import { SpotLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n angle: { 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 { watch } from 'vue';\nimport { FrontSide } from 'three';\n\nexport default {\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 { MeshBasicMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshLambertMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshMatcapMaterial, TextureLoader } from 'three';\n// import { watch } from 'vue';\nimport { propsValues, getMatcapUrl } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n props: {\n src: String,\n name: String,\n 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 { MeshPhongMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n reflectivity: { type: Number, default: 1 },\n shininess: { type: Number, default: 30 },\n specular: { type: [String, Number], default: 0x111111 },\n 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 { MeshStandardMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProp, bindProps, propsValues } from '../tools.js';\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 {\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 { MeshPhysicalMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport StandardMaterial from './StandardMaterial';\n\nexport default {\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 { ShaderMaterial } from 'three';\nimport { watch } from 'vue';\nimport { propsValues, defaultFragmentShader, defaultVertexShader } from '../tools.js';\n\nexport default {\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 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 [];\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 ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\n\nexport default {\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 { MeshToonMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, TextureLoader, UVMapping } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n id: { type: String, default: 'map' },\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 this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\n 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 this.material.setTexture(this.texture, this.id);\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() { return []; },\n};\n","import { CubeTextureLoader, CubeRefractionMapping } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n path: String,\n urls: {\n type: Array,\n default: ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n id: { type: String, default: 'envMap' },\n refraction: Boolean,\n // todo: remove ?\n refractionRatio: { type: Number, default: 0.98 },\n },\n created() {\n this.refreshTexture();\n watch(() => this.path, this.refreshTexture);\n watch(() => this.urls, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError);\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n if (this.refraction) {\n this.texture.mapping = CubeRefractionMapping;\n this.material.setProp('refractionRatio', this.refractionRatio);\n }\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() {\n return [];\n },\n};\n","import { watch } from 'vue';\nimport { Mesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n name: 'Mesh',\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n onHover: Function,\n onClick: Function,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n 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 Mesh(this.geometry, this.material);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n if (this.onHover) {\n this.mesh.onHover = (over) => { this.onHover({ component: this, over }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n if (this.onClick) {\n this.mesh.onClick = (e) => { this.onClick({ component: this, event: e }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n this.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 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 and material are not unmounted)\n if (this.geometry) this.geometry.dispose();\n if (this.material) this.material.dispose();\n },\n __hmrId: 'Mesh',\n};\n","import { BoxBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n if (this.size) {\n this.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\n } else {\n this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\n }\n },\n },\n __hmrId: 'Box',\n};\n","import { CircleBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Circle',\n};\n","import { ConeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cone',\n};\n","import { CylinderBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cylinder',\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Dodecahedron',\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Icosahedron',\n};\n","import { LatheBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['points', 'segments', 'phiStart', 'phiLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n __hmrId: 'Lathe',\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Octahedron',\n};\n","import { PlaneBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['width', 'height', 'widthSegments', 'heightSegments'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Plane',\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['vertices', 'indices', 'radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n __hmrId: 'Polyhedron',\n};\n","import { RingBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Ring',\n};\n","import { SphereBufferGeometry } from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: Number,\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n watch: {\n radius() { this.refreshGeometry(); },\n widthSegments() { this.refreshGeometry(); },\n heightSegments() { this.refreshGeometry(); },\n },\n created() {\n this.createGeometry();\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Sphere',\n};\n","import { TetrahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Tetrahedron',\n};\n","export default {\n text: String,\n fontSrc: String,\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String], default: false },\n};\n","import { FontLoader, TextBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport TextProps from './TextProps.js';\n\nexport default {\n extends: Mesh,\n props: {\n ...TextProps,\n },\n 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 TextBufferGeometry(this.text, {\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n });\n\n if (this.align === 'center') {\n this.geometry.center();\n }\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n __hmrId: 'Torus',\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n __hmrId: 'TorusKnot',\n};\n","import { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n path: Curve,\n points: Array,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n created() {\n this.createGeometry();\n const watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed'];\n watchProps.forEach(prop => {\n watch(() => this[prop], (v) => {\n this.refreshGeometry();\n });\n });\n watch(() => this.points, () => {\n updateTubeGeometryPoints(this.geometry, this.points);\n });\n },\n methods: {\n createGeometry() {\n let curve;\n if (this.points) {\n curve = new CatmullRomCurve3(this.points);\n } else if (this.path) {\n curve = this.path;\n } else {\n console.error('Missing path curve or points.');\n }\n this.geometry = new TubeGeometry(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed);\n },\n // update curve points (without using prop, faster)\n updateCurve(points) {\n updateTubeGeometryPoints(this.geometry, points);\n },\n },\n __hmrId: 'Tube',\n};\n\nfunction 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 {\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.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initGem();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.meshBack) this.$parent.remove(this.meshBack);\n if (this.materialBack) this.materialBack.dispose();\n },\n methods: {\n initGem() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.side = FrontSide;\n this.material.envMap = cubeRT.texture;\n this.material.envMapIntensity = 10;\n this.material.metalness = 0;\n this.material.roughness = 0;\n this.material.opacity = 0.75;\n this.material.transparent = true;\n this.material.premultipliedAlpha = true;\n this.material.needsUpdate = true;\n\n this.materialBack = this.material.clone();\n this.materialBack.side = BackSide;\n this.materialBack.envMapIntensity = 5;\n this.materialBack.metalness = 1;\n this.materialBack.roughness = 0;\n this.materialBack.opacity = 0.5;\n\n this.meshBack = new TMesh(this.geometry, this.materialBack);\n\n bindProp(this, 'position', this.meshBack);\n bindProp(this, 'rotation', this.meshBack);\n bindProp(this, 'scale', this.meshBack);\n this.$parent.add(this.meshBack);\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.meshBack.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n this.meshBack.visible = true;\n },\n },\n __hmrId: 'Gem',\n};\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry, TextureLoader } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: String,\n width: Number,\n height: Number,\n keepSize: Boolean,\n },\n created() {\n this.createGeometry();\n this.createMaterial();\n this.initMesh();\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], this.resize);\n });\n\n if (this.keepSize) this.three.onAfterResize(this.resize);\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(1, 1, 1, 1);\n },\n createMaterial() {\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\n },\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded);\n },\n refreshTexture() {\n if (this.texture) this.texture.dispose();\n this.material.map = this.loadTexture();\n this.material.needsUpdate = true;\n },\n onLoaded(texture) {\n this.texture = texture;\n this.resize();\n this.$emit('loaded');\n },\n resize() {\n if (!this.texture) return;\n const screen = this.three.size;\n const iW = this.texture.image.width;\n const iH = this.texture.image.height;\n const iRatio = iW / iH;\n let w, h;\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width;\n h = this.height * screen.wHeight / screen.height;\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width;\n h = w / iRatio;\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height;\n w = h * iRatio;\n }\n this.mesh.scale.x = w;\n this.mesh.scale.y = h;\n },\n },\n __hmrId: 'Image',\n};\n","import { watch } from 'vue';\nimport { InstancedMesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n count: Number,\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 created() {\n this.initMesh();\n },\n methods: {\n initMesh() {\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\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 if (this.mesh) this.mesh.material = material;\n },\n },\n __hmrId: 'InstancedMesh',\n};\n","import {\n CubeCamera,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'MirrorMesh',\n};\n","import {\n CubeCamera,\n CubeRefractionMapping,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n refractionRatio: { type: Number, default: 0.98 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.refractionRatio = this.refractionRatio;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'RefractionMesh',\n};\n","import { Sprite, SpriteMaterial, TextureLoader } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\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 { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', gltf);\r\n this.initObject3D(gltf.scene);\r\n });\r\n },\r\n};\r\n","import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', fbx);\r\n this.initObject3D(fbx);\r\n });\r\n },\r\n};\r\n","import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\n\nexport default {\n setup() {\n return {\n passes: [],\n };\n },\n inject: ['three'],\n provide() {\n return {\n passes: this.passes,\n };\n },\n mounted() {\n this.three.onAfterInit(() => {\n this.composer = new EffectComposer(this.three.renderer);\n this.three.renderer.autoClear = false;\n this.passes.forEach(pass => {\n this.composer.addPass(pass);\n });\n this.three.composer = this.composer;\n\n this.resize();\n this.three.onAfterResize(this.resize);\n });\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n this.composer.setSize(this.three.size.width, this.three.size.height);\n },\n },\n render() {\n return this.$slots.default();\n },\n __hmrId: 'EffectComposer',\n};\n","export default {\n inject: ['three', 'passes'],\n beforeMount() {\n if (!this.passes) {\n console.error('Missing parent EffectComposer');\n }\n },\n unmounted() {\n if (this.pass.dispose) this.pass.dispose();\n },\n render() {\n return [];\n },\n __hmrId: 'EffectPass',\n};\n","import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const pass = new RenderPass(this.three.scene, this.three.camera);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'RenderPass',\n};\n","import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n focus: {\n type: Number,\n default: 1,\n },\n aperture: {\n type: Number,\n default: 0.025,\n },\n maxblur: {\n type: Number,\n default: 0.01,\n },\n },\n watch: {\n focus() { this.pass.uniforms.focus.value = this.focus; },\n aperture() { this.pass.uniforms.aperture.value = this.aperture; },\n maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; },\n },\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.three.size.width,\n height: this.three.size.height,\n };\n const pass = new BokehPass(this.three.scene, this.three.camera, params);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'BokehPass',\n};\n","import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n noiseIntensity: {\n type: Number,\n default: 0.5,\n },\n scanlinesIntensity: {\n type: Number,\n default: 0.05,\n },\n scanlinesCount: {\n type: Number,\n default: 4096,\n },\n grayscale: {\n type: Number,\n default: 0,\n },\n },\n watch: {\n noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; },\n scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; },\n scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; },\n grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; },\n },\n mounted() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'FilmPass',\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n const pass = new ShaderPass(FXAAShader);\n this.passes.push(pass);\n this.pass = pass;\n\n // resize will be called in three init\n this.three.onAfterResize(this.resize);\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n const { resolution } = this.pass.material.uniforms;\n resolution.value.x = 1 / this.three.size.width;\n resolution.value.y = 1 / this.three.size.height;\n },\n },\n __hmrId: 'FXAAPass',\n};\n","import { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n },\n mounted() {\n const pass = new HalftonePass(this.three.size.width, this.three.size.height, {});\n\n ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => {\n pass.uniforms[p].value = this[p];\n watch(() => this[p], () => {\n pass.uniforms[p].value = this[p];\n });\n });\n\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'HalftonePass',\n};\n","import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n // three size is not set yet, but this pass will be resized by effect composer\n const pass = new SMAAPass(this.three.size.width, this.three.size.height);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'SMAAPass',\n};\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { Vector2 } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\nimport TiltShift from '../shaders/TiltShift.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object, default: { x: 0, y: 100 } },\n end: { type: Object, default: { x: 10, y: 100 } },\n },\n mounted() {\n this.pass = new ShaderPass(TiltShift);\n this.passes.push(this.pass);\n\n this.pass1 = new ShaderPass(TiltShift);\n this.passes.push(this.pass1);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n const uniforms1 = this.uniforms1 = this.pass1.uniforms;\n uniforms1.blurRadius = uniforms.blurRadius;\n uniforms1.gradientRadius = uniforms.gradientRadius;\n uniforms1.start = uniforms.start;\n uniforms1.end = uniforms.end;\n uniforms1.texSize = uniforms.texSize;\n\n 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 methods: {\n updateFocusLine() {\n this.uniforms.start.value.copy(this.start);\n this.uniforms.end.value.copy(this.end);\n const dv = new Vector2().copy(this.end).sub(this.start).normalize();\n this.uniforms.delta.value.copy(dv);\n this.uniforms1.delta.value.set(-dv.y, dv.x);\n },\n },\n __hmrId: 'TiltShiftPass',\n};\n","import { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n },\n watch: {\n strength() { this.pass.strength = this.strength; },\n radius() { this.pass.radius = this.radius; },\n threshold() { this.pass.threshold = this.threshold; },\n },\n mounted() {\n const size = new Vector2(this.three.size.width, this.three.size.height);\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'UnrealBloomPass',\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport ZoomBlur from '../shaders/ZoomBlur.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n center: { type: Object, default: { x: 0.5, y: 0.5 } },\n strength: { type: Number, default: 0.5 },\n },\n mounted() {\n this.pass = new ShaderPass(ZoomBlur);\n this.passes.push(this.pass);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n bindProp(this, 'center', uniforms.center, 'value');\n bindProp(this, 'strength', uniforms.strength, 'value');\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 '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 '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":["const","let","Plane","i","o","OrthographicCamera","this","PerspectiveCamera","Group","Scene","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","TubeGeometry","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","ShaderMaterial","TShaderMaterial","Mesh","TMesh","InstancedMesh","Sprite","EffectComposer","RenderPass","BokehPass","FilmPass","HalftonePass","SMAAPass","UnrealBloomPass","_createApp"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"trois.module.cdn.js","sources":["../src/core/useRaycaster.js","../src/core/usePointer.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 { 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 { 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 { 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 ',\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":["Raycaster","Plane","InstancedMesh","OrthographicCamera","PerspectiveCamera","Group","Scene","props","createGeometry","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","TubeGeometry","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","ShaderMaterial","TShaderMaterial","TMesh","Sprite","EffectComposer","RenderPass","BokehPass","FilmPass","HalftonePass","SMAAPass","SSAOPass","UnrealBloomPass","_createApp"],"mappings":"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"} \ No newline at end of file diff --git a/build/trois.module.cdn.min.js b/build/trois.module.cdn.min.js index a93c596..9bf57bd 100644 --- a/build/trois.module.cdn.min.js +++ b/build/trois.module.cdn.min.js @@ -1,2 +1,2 @@ -import{h as e,toRef as t,watch as r,createApp as i}from"https://unpkg.com/vue@3.0.7/dist/vue.esm-browser.prod.js";import{Vector2 as s,Vector3 as n,Plane as a,Raycaster as o,WebGLRenderer as h,OrthographicCamera as u,PerspectiveCamera as d,Group as m,Scene as c,Color as l,BoxGeometry as f,CircleGeometry as p,ConeGeometry as g,CylinderGeometry as y,DodecahedronGeometry as b,IcosahedronGeometry as v,LatheGeometry as S,OctahedronGeometry as x,PolyhedronGeometry as w,RingGeometry as N,SphereGeometry as _,TetrahedronGeometry as M,TorusGeometry as C,TorusKnotGeometry as G,Curve as k,TubeGeometry as z,AmbientLight as L,DirectionalLight as I,HemisphereLight as j,PointLight as P,RectAreaLight as R,SpotLight as B,FrontSide as E,MeshBasicMaterial as T,MeshLambertMaterial as O,TextureLoader as A,MeshMatcapMaterial as F,MeshPhongMaterial as U,MeshStandardMaterial as D,MeshPhysicalMaterial as $,ShaderMaterial as H,ShaderChunk as W,UniformsUtils as X,ShaderLib as V,MeshToonMaterial as q,UVMapping as Z,ClampToEdgeWrapping as K,LinearFilter as Y,LinearMipmapLinearFilter as J,CubeTextureLoader as Q,CubeRefractionMapping as ee,Mesh as te,BoxBufferGeometry as re,CircleBufferGeometry as ie,ConeBufferGeometry as se,CylinderBufferGeometry as ne,DodecahedronBufferGeometry as ae,IcosahedronBufferGeometry as oe,LatheBufferGeometry as he,OctahedronBufferGeometry as ue,PlaneBufferGeometry as de,PolyhedronBufferGeometry as me,RingBufferGeometry as ce,SphereBufferGeometry as le,TetrahedronBufferGeometry as fe,FontLoader as pe,TextBufferGeometry as ge,TorusBufferGeometry as ye,TorusKnotBufferGeometry as be,CatmullRomCurve3 as ve,WebGLCubeRenderTarget as Se,RGBFormat as xe,CubeCamera as we,BackSide as Ne,DoubleSide as _e,InstancedMesh as Me,SpriteMaterial as Ce,Sprite as Ge}from"https://unpkg.com/three@0.126.1/build/three.module.js";import{OrbitControls as ke}from"https://unpkg.com/three@0.126.1/examples/jsm/controls/OrbitControls.js";import{RectAreaLightUniformsLib as ze}from"https://unpkg.com/three@0.126.1/examples/jsm/lights/RectAreaLightUniformsLib.js";import{RectAreaLightHelper as Le}from"https://unpkg.com/three@0.126.1/examples/jsm/helpers/RectAreaLightHelper.js";import{GLTFLoader as Ie}from"https://unpkg.com/three@0.126.1/examples/jsm/loaders/GLTFLoader.js";import{FBXLoader as je}from"https://unpkg.com/three@0.126.1/examples/jsm/loaders/FBXLoader.js";import{EffectComposer as Pe}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as Re}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/RenderPass.js";import{BokehPass as Be}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/BokehPass.js";import{FilmPass as Ee}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/FilmPass.js";import{ShaderPass as Te}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as Oe}from"https://unpkg.com/three@0.126.1/examples/jsm/shaders/FXAAShader.js";import{HalftonePass as Ae}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/HalftonePass.js";import{SMAAPass as Fe}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/SMAAPass.js";import{UnrealBloomPass as Ue}from"https://unpkg.com/three@0.126.1/examples/jsm/postprocessing/UnrealBloomPass.js";function De(){var e={canvas:null,antialias:!0,alpha:!1,autoClear:!0,orbit_ctrl:!1,mouse_move:!1,mouse_raycast:!1,mouse_over:!1,click:!1,resize:!0,width:0,height:0},t={width:1,height:1,wWidth:1,wHeight:1,ratio:1},r=[],i=[],u=[],d=new s,m=new n,c=new a(new n(0,0,1),0),l=new o,f=[],p={conf:e,renderer:null,camera:null,cameraCtrl:null,materials:{},scene:null,size:t,mouse:d,mouseV3:m,init:function(t){t&&Object.entries(t).forEach((function(t){var r=t[0],i=t[1];e[r]=i}));if(!p.scene)return void console.error("Missing Scene");if(!p.camera)return void console.error("Missing Camera");p.renderer=new h({canvas:e.canvas,antialias:e.antialias,alpha:e.alpha}),p.renderer.autoClear=e.autoClear,e.orbit_ctrl&&(p.orbitCtrl=new ke(p.camera,p.renderer.domElement),e.orbit_ctrl instanceof Object&&Object.entries(e.orbit_ctrl).forEach((function(e){var t=e[0],r=e[1];p.orbitCtrl[t]=r})));e.resize?(x(),window.addEventListener("resize",x)):w(300|e.width,150|e.height);e.mouse_move=e.mouse_move||e.mouse_over,e.mouse_move&&("body"===e.mouse_move?p.mouse_move_element=document.body:p.mouse_move_element=p.renderer.domElement,p.mouse_move_element.addEventListener("mousemove",b),p.mouse_move_element.addEventListener("mouseleave",v));e.click&&p.renderer.domElement.addEventListener("click",y);return r.forEach((function(e){return e()})),!0},dispose:function(){u=[],window.removeEventListener("resize",x),p.mouse_move_element&&(p.mouse_move_element.removeEventListener("mousemove",b),p.mouse_move_element.removeEventListener("mouseleave",v));p.renderer.domElement.removeEventListener("click",y),p.orbitCtrl&&p.orbitCtrl.dispose();this.renderer.dispose()},render:function(){p.orbitCtrl&&p.orbitCtrl.update();u.forEach((function(e){return e()})),p.renderer.render(p.scene,p.camera)},renderC:function(){p.orbitCtrl&&p.orbitCtrl.update();u.forEach((function(e){return e()})),p.composer.render()},setSize:w,onAfterInit:function(e){r.push(e)},onAfterResize:function(e){i.push(e)},offAfterResize:function(e){i=i.filter((function(t){return t!==e}))},onBeforeRender:function(e){u.push(e)},offBeforeRender:function(e){u=u.filter((function(t){return t!==e}))},addIntersectObject:function(e){-1===f.indexOf(e)&&f.push(e)},removeIntersectObject:function(e){var t=f.indexOf(e);-1!==t&&f.splice(t,1)}};function g(e){var r=e.target.getBoundingClientRect();d.x=(e.clientX-r.left)/t.width*2-1,d.y=-(e.clientY-r.top)/t.height*2+1}function y(e){g(e),l.setFromCamera(d,p.camera);for(var t=l.intersectObjects(f),r=0;r1?1:r)}function Ze(e,t,r){e.x=qe(e.x,t.x,r),e.y=qe(e.y,t.y,r)}function Ke(e,t,r){e.x=qe(e.x,t.x,r),e.y=qe(e.y,t.y,r),e.z=qe(e.z,t.z,r)}function Ye(e,t,r){return er?r:e}function Je(e,t){return void 0===t&&(t=1024),"https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/"+t+"/"+(""+e+function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)+".png")}var Qe="\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}",et="\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}",tt={name:"OrthographicCamera",inject:["three"],props:{left:{type:Number,default:-1},right:{type:Number,default:1},top:{type:Number,default:1},bottom:{type:Number,default:-1},near:{type:Number,default:.1},far:{type:Number,default:2e3},zoom:{type:Number,default:1},position:{type:Object,default:{x:0,y:0,z:0}}},created:function(){var e=this;this.camera=new u(this.left,this.right,this.top,this.bottom,this.near,this.far),Xe(this,"position",this.camera),["left","right","top","bottom","near","far","zoom"].forEach((function(t){r((function(){return e[t]}),(function(){e.camera[t]=e[t],e.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},render:function(){return[]},__hmrId:"OrthographicCamera"},rt={name:"PerspectiveCamera",inject:["three"],props:{aspect:{type:Number,default:1},far:{type:Number,default:2e3},fov:{type:Number,default:50},near:{type:Number,default:.1},position:{type:Object,default:{x:0,y:0,z:0}},lookAt:{type:Object,default:null}},created:function(){var e=this;this.camera=new d(this.fov,this.aspect,this.near,this.far),Xe(this,"position",this.camera),this.lookAt&&this.camera.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),r((function(){return e.lookAt}),(function(t){e.camera.lookAt(t.x,t.y,t.z)}),{deep:!0}),["aspect","far","fov","near"].forEach((function(t){r((function(){return e[t]}),(function(){e.camera[t]=e[t],e.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},render:function(){return[]},__hmrId:"PerspectiveCamera"},it={name:"Object3D",inject:["three","scene","rendererComponent"],props:{position:{type:Object,default:{x:0,y:0,z:0}},rotation:{type:Object,default:{x:0,y:0,z:0}},scale:{type:Object,default:{x:1,y:1,z:1}},lookAt:{type:Object,default:null}},unmounted:function(){this._parent&&this._parent.remove(this.o3d)},methods:{initObject3D:function(e){var t=this;this.o3d=e,Xe(this,"position",this.o3d),Xe(this,"rotation",this.o3d),Xe(this,"scale",this.o3d),this.lookAt&&this.o3d.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),r((function(){return t.lookAt}),(function(e){t.o3d.lookAt(e.x,e.y,e.z)}),{deep:!0});for(var i=this.$parent;i;){if(i.add){i.add(this.o3d),this._parent=i;break}i=i.$parent}this._parent||console.error("Missing parent (Scene, Group...)")},add:function(e){this.o3d.add(e)},remove:function(e){this.o3d.remove(e)}},render:function(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Object3D"},st={name:"Group",extends:it,created:function(){this.group=new m,this.initObject3D(this.group)},__hmrId:"Group"},nt={name:"Scene",inject:["three"],props:{id:String,background:[String,Number]},setup:function(e){var t=new c;return e.background&&(t.background=new l(e.background)),r((function(){return e.background}),(function(e){t.background.set(e)})),{scene:t}},provide:function(){return{scene:this.scene}},mounted:function(){this.three.scene||(this.three.scene=this.scene)},methods:{add:function(e){this.scene.add(e)},remove:function(e){this.scene.remove(e)}},render:function(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Scene"},at={inject:["mesh"],props:{rotateX:Number,rotateY:Number,rotateZ:Number},created:function(){var e=this;this.mesh||console.error("Missing parent Mesh"),this.watchProps=[],Object.entries(this.$props).forEach((function(t){return e.watchProps.push(t[0])})),this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),this.addWatchers()},unmounted:function(){this.geometry.dispose()},methods:{addWatchers:function(){var e=this;this.watchProps.forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},rotateGeometry:function(){this.rotateX&&this.geometry.rotateX(this.rotateX),this.rotateY&&this.geometry.rotateY(this.rotateY),this.rotateZ&&this.geometry.rotateZ(this.rotateZ)},refreshGeometry:function(){var e=this.geometry;this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),e.dispose()}},render:function(){return[]}},ot={extends:at,props:{size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}},methods:{createGeometry:function(){var e=this.width,t=this.height,r=this.depth;this.size&&(e=this.size,t=this.size,r=this.size),this.geometry=new f(e,t,r,this.widthSegments,this.heightSegments,this.depthSegments)}}},ht={extends:at,props:{radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new p(this.radius,this.segments,this.thetaStart,this.thetaLength)}}},ut={extends:at,props:{radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new g(this.radius,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}}},dt={extends:at,props:{radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new y(this.radiusTop,this.radiusBottom,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}}},mt={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new b(this.radius,this.detail)}}},ct={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new v(this.radius,this.detail)}}},lt={extends:at,props:{points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new S(this.points,this.segments,this.phiStart,this.phiLength)}}},ft={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new x(this.radius,this.detail)}}},pt={extends:at,props:{vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new w(this.vertices,this.indices,this.radius,this.detail)}}},gt={extends:at,props:{innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new N(this.innerRadius,this.outerRadius,this.thetaSegments,this.phiSegments,this.thetaStart,this.thetaLength)}}},yt={extends:at,props:{radius:{type:Number,default:1},widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12}},methods:{createGeometry:function(){this.geometry=new _(this.radius,this.widthSegments,this.heightSegments)}}},bt={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new M(this.radius,this.detail)}}},vt={extends:at,props:{radius:{type:Number,default:1},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new C(this.radius,this.tube,this.radialSegments,this.tubularSegments,this.arc)}}},St={extends:at,props:{radius:{type:Number,default:1},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}},methods:{createGeometry:function(){this.geometry=new G(this.radius,this.tube,this.tubularSegments,this.radialSegments,this.p,this.q)}}},xt={extends:at,props:{path:k,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radiusSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}},methods:{createGeometry:function(){this.geometry=new z(this.path,this.tubularSegments,this.radius,this.radiusSegments,this.closed)}}},wt={extends:it,name:"Light",props:{color:{type:String,default:"#ffffff"},intensity:{type:Number,default:1},castShadow:{type:Boolean,default:!1},shadowMapSize:{type:Object,default:{x:512,y:512}},shadowCamera:{type:Object,default:{}}},unmounted:function(){this.light.target&&this.$parent.remove(this.light.target)},methods:{initLight:function(){var e=this;this.light.target&&Xe(this,"target",this.light.target,"position"),this.light.shadow&&(this.light.castShadow=this.castShadow,He(this.light.shadow.mapSize,this.shadowMapSize),He(this.light.shadow.camera,this.shadowCamera)),["color","intensity","castShadow"].forEach((function(t){r((function(){return e[t]}),(function(){"color"===t?e.light.color.set(e.color):e.light[t]=e[t]}))})),this.initObject3D(this.light),this.light.target&&this.$parent.add(this.light.target)}},__hmrId:"Light"},Nt={extends:wt,created:function(){this.light=new L(this.color,this.intensity),this.initLight()},__hmrId:"AmbientLight"},_t={extends:wt,props:{target:Object},created:function(){this.light=new I(this.color,this.intensity),this.initLight()},__hmrId:"DirectionalLight"},Mt={extends:wt,props:{groundColor:{type:String,default:"#444444"}},created:function(){var e=this;this.light=new j(this.color,this.groundColor,this.intensity),r((function(){return e.groundColor}),(function(t){e.light.groundColor.set(t)})),this.initLight()},__hmrId:"HemisphereLight"},Ct={extends:wt,props:{distance:{type:Number,default:0},decay:{type:Number,default:1}},created:function(){this.light=new P(this.color,this.intensity,this.distance,this.decay),this.initLight()},__hmrId:"PointLight"},Gt={extends:wt,props:{width:{type:Number,default:10},height:{type:Number,default:10},helper:Boolean},created:function(){var e=this;ze.init(),this.light=new R(this.color,this.intensity,this.width,this.height),["width","height"].forEach((function(t){r((function(){return e[t]}),(function(){e.light[t]=e[t]}))})),this.helper&&(this.lightHelper=new Le(this.light),this.$parent.add(this.lightHelper)),this.initLight()},unmounted:function(){this.lightHelper&&this.$parent.remove(this.lightHelper)},__hmrId:"RectAreaLight"},kt={extends:wt,props:{angle:{type:Number,default:Math.PI/3},decay:{type:Number,default:1},distance:{type:Number,default:0},penumbra:{type:Number,default:0},target:Object},created:function(){var e=this;this.light=new B(this.color,this.intensity,this.distance,this.angle,this.penumbra,this.decay),["angle","decay","distance","penumbra"].forEach((function(t){r((function(){return e[t]}),(function(){e.light[t]=e[t]}))})),this.initLight()},__hmrId:"SpotLight"},zt={inject:["three","mesh"],props:{color:{type:[String,Number],default:"#ffffff"},depthTest:{type:Boolean,default:!0},depthWrite:{type:Boolean,default:!0},fog:{type:Boolean,default:!0},opacity:{type:Number,default:1},side:{type:Number,default:E},transparent:Boolean,vertexColors:Boolean},provide:function(){return{material:this}},created:function(){this.createMaterial(),this.mesh.setMaterial(this.material),this._addWatchers(),this.addWatchers&&this.addWatchers()},unmounted:function(){this.material.dispose()},methods:{setProp:function(e,t,r){void 0===r&&(r=!1),this.material[e]=t,this.material.needsUpdate=r},setTexture:function(e,t){void 0===t&&(t="map"),this.setProp(t,e,!0)},_addWatchers:function(){var e=this;["color","depthTest","depthWrite","fog","opacity","side","transparent"].forEach((function(t){r((function(){return e[t]}),(function(){"color"===t?e.material.color.set(e.color):e.material[t]=e[t]}))}))}},render:function(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Material"},Lt={wireframe:{type:Boolean,default:!1},wireframeLinewidth:{type:Number,default:1}},It={extends:zt,props:Object.assign({},Lt),methods:{createMaterial:function(){this.material=new T(Ve(this.$props))},addWatchers:function(){We(this,Object.keys(Lt),this.material)}},__hmrId:"BasicMaterial"},jt={extends:zt,props:Object.assign({},Lt),methods:{createMaterial:function(){this.material=new O(Ve(this.$props))},addWatchers:function(){We(this,Object.keys(Lt),this.material)}},__hmrId:"LambertMaterial"},Pt={extends:zt,props:{src:String,name:String,flatShading:Boolean},methods:{createMaterial:function(){var e=this.name?Je(this.name):this.src,t=Ve(this.$props,["src","name"]);t.matcap=(new A).load(e),this.material=new F(t)},addWatchers:function(){}},__hmrId:"MatcapMaterial"},Rt={extends:zt,props:Object.assign({},{emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},reflectivity:{type:Number,default:1},shininess:{type:Number,default:30},specular:{type:[String,Number],default:1118481},flatShading:Boolean},Lt),methods:{createMaterial:function(){this.material=new U(Ve(this.$props))},addWatchers:function(){var e=this;["emissive","emissiveIntensity","reflectivity","shininess","specular"].forEach((function(t){r((function(){return e[t]}),(function(r){"emissive"===t||"specular"===t?e.material[t].set(r):e.material[t]=r}))})),We(this,Object.keys(Lt),this.material)}},__hmrId:"PhongMaterial"},Bt={aoMapIntensity:{type:Number,default:1},bumpScale:{type:Number,default:1},displacementBias:{type:Number,default:0},displacementScale:{type:Number,default:1},emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},envMapIntensity:{type:Number,default:1},lightMapIntensity:{type:Number,default:1},metalness:{type:Number,default:0},normalScale:{type:Object,default:{x:1,y:1}},roughness:{type:Number,default:1},refractionRatio:{type:Number,default:.98},flatShading:Boolean},Et={extends:zt,props:Object.assign({},Bt,Lt),methods:{createMaterial:function(){this.material=new D(Ve(this.$props,["normalScale"]))},addWatchers:function(){var e=this;Object.keys(Bt).forEach((function(t){"normalScale"!==t&&r((function(){return e[t]}),(function(r){"emissive"===t?e.material[t].set(r):e.material[t]=r}))})),Xe(this,"normalScale",this.material),We(this,Object.keys(Lt),this.material)}},__hmrId:"StandardMaterial"},Tt={extends:Et,props:{flatShading:Boolean},methods:{createMaterial:function(){this.material=new $(Ve(this.$props))},addWatchers:function(){}},__hmrId:"PhysicalMaterial"},Ot={inject:["three","mesh"],props:{uniforms:{type:Object,default:function(){return{}}},vertexShader:{type:String,default:Qe},fragmentShader:{type:String,default:et}},created:function(){var e=this;this.createMaterial(),["vertexShader","fragmentShader"].forEach((function(t){r((function(){return e[t]}),(function(){e.material.dispose(),e.createMaterial()}))}))},unmounted:function(){this.material.dispose()},methods:{createMaterial:function(){this.material=new H(Ve(this.$props)),this.mesh.setMaterial(this.material)}},render:function(){return[]},__hmrId:"ShaderMaterial"};var At,Ft,Ut,Dt=W.meshphong_frag.slice(0,W.meshphong_frag.indexOf("void main() {")),$t=W.meshphong_frag.slice(W.meshphong_frag.indexOf("void main() {")),Ht={uniforms:X.merge([V.phong.uniforms,{thicknessColor:{value:new l(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:"\n #define USE_UV\n "+W.meshphong_vert+"\n ",fragmentShader:"\n #define USE_UV\n #define SUBSURFACE\n\n "+Dt+"\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 "+$t.replace("#include ",(At=W.lights_fragment_begin,Ft="RE_Direct( directLight, geometry, material, reflectedLight );",Ut="\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 ",At.split(Ft).join(Ut)))},Wt={inject:["three","mesh"],props:{color:{type:String,default:"#ffffff"},thicknessColor:{type:String,default:"#ffffff"},thicknessDistortion:{type:Number,default:.4},thicknessAmbient:{type:Number,default:.01},thicknessAttenuation:{type:Number,default:.7},thicknessPower:{type:Number,default:2},thicknessScale:{type:Number,default:4},transparent:{type:Boolean,default:!1},opacity:{type:Number,default:1},vertexColors:{type:Boolean,default:!1}},created:function(){this.createMaterial(),this.mesh.setMaterial(this.material)},unmounted:function(){this.material.dispose()},methods:{createMaterial:function(){var e=Ht,t=X.clone(e.uniforms);Object.entries(this.$props).forEach((function(e){var r=e[0],i=e[1],s=r,n=i;["color","thicknessColor"].includes(r)&&("color"===r&&(s="diffuse"),n=new l(i)),["transparent","vertexColors"].includes(r)||(t[s].value=n)})),this.material=new H(Object.assign({},e,{uniforms:t,lights:!0,transparent:this.transparent,vertexColors:this.vertexColors}))}},render:function(){return[]},__hmrId:"SubSurfaceMaterial"},Xt={extends:zt,props:Object.assign({},Lt),methods:{createMaterial:function(){this.material=new q(Ve(this.$props))},addWatchers:function(){We(this,Object.keys(Lt),this.material)}},__hmrId:"ToonMaterial"},Vt={inject:["material"],emits:["loaded"],props:{id:{type:String,default:"map"},src:String,onLoad:Function,onProgress:Function,onError:Function,mapping:{type:Number,default:Z},wrapS:{type:Number,default:K},wrapT:{type:Number,default:K},magFilter:{type:Number,default:Y},minFilter:{type:Number,default:J},repeat:{type:Object,default:{x:1,y:1}},rotation:{type:Number,default:0},center:{type:Object,default:{x:0,y:0}}},created:function(){var e=this;this.refreshTexture(),r((function(){return e.src}),this.refreshTexture)},unmounted:function(){this.material.setTexture(null,this.id),this.texture.dispose()},methods:{createTexture:function(){var e=this;this.texture=(new A).load(this.src,this.onLoaded,this.onProgress,this.onError);["mapping","wrapS","wrapT","magFilter","minFilter","repeat","rotation","rotation","center"].forEach((function(t){Xe(e,t,e.texture)}))},refreshTexture:function(){this.createTexture(),this.material.setTexture(this.texture,this.id)},onLoaded:function(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:function(){return[]}},qt={inject:["material"],emits:["loaded"],props:{path:String,urls:{type:Array,default:["px.jpg","nx.jpg","py.jpg","ny.jpg","pz.jpg","nz.jpg"]},onLoad:Function,onProgress:Function,onError:Function,id:{type:String,default:"envMap"},refraction:Boolean,refractionRatio:{type:Number,default:.98}},created:function(){var e=this;this.refreshTexture(),r((function(){return e.path}),this.refreshTexture),r((function(){return e.urls}),this.refreshTexture)},unmounted:function(){this.material.setTexture(null,this.id),this.texture.dispose()},methods:{createTexture:function(){this.texture=(new Q).setPath(this.path).load(this.urls,this.onLoaded,this.onProgress,this.onError)},refreshTexture:function(){this.createTexture(),this.material.setTexture(this.texture,this.id),this.refraction&&(this.texture.mapping=ee,this.material.setProp("refractionRatio",this.refractionRatio))},onLoaded:function(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:function(){return[]}},Zt={extends:it,name:"Mesh",props:{castShadow:Boolean,receiveShadow:Boolean,onHover:Function,onClick:Function},provide:function(){return{mesh:this}},mounted:function(){this.mesh||this.loading||this.initMesh()},methods:{initMesh:function(){var e=this;this.mesh=new te(this.geometry,this.material),["castShadow","receiveShadow"].forEach((function(t){e.mesh[t]=e[t],r((function(){return e[t]}),(function(){e.mesh[t]=e[t]}))})),this.onHover&&(this.mesh.onHover=function(t){e.onHover({component:e,over:t})},this.three.addIntersectObject(this.mesh)),this.onClick&&(this.mesh.onClick=function(t){e.onClick({component:e,event:t})},this.three.addIntersectObject(this.mesh)),this.initObject3D(this.mesh)},setGeometry:function(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial:function(e){this.material=e,this.mesh&&(this.mesh.material=e)},refreshGeometry:function(){var e=this.geometry;this.createGeometry(),this.mesh.geometry=this.geometry,e.dispose()}},unmounted:function(){this.mesh&&this.three.removeIntersectObject(this.mesh),this.geometry&&this.geometry.dispose(),this.material&&this.material.dispose()},__hmrId:"Mesh"},Kt={extends:Zt,props:{size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}},created:function(){var e=this;this.createGeometry(),["size","width","height","depth","widthSegments","heightSegments","depthSegments"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.size?this.geometry=new re(this.size,this.size,this.size):this.geometry=new re(this.width,this.height,this.depth)}},__hmrId:"Box"},Yt={extends:Zt,props:{radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radius","segments","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ie(this.radius,this.segments,this.thetaStart,this.thetaLength)}},__hmrId:"Circle"},Jt={extends:Zt,props:{radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radius","height","radialSegments","heightSegments","openEnded","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new se(this.radius,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}},__hmrId:"Cone"},Qt={extends:Zt,props:{radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radiusTop","radiusBottom","height","radialSegments","heightSegments","openEnded","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ne(this.radiusTop,this.radiusBottom,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}},__hmrId:"Cylinder"},er={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ae(this.radius,this.detail)}},__hmrId:"Dodecahedron"},tr={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new oe(this.radius,this.detail)}},__hmrId:"Icosahedron"},rr={extends:Zt,props:{points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["points","segments","phiStart","phiLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new he(this.points,this.segments,this.phiStart,this.phiLength)}},__hmrId:"Lathe"},ir={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ue(this.radius,this.detail)}},__hmrId:"Octahedron"},sr={extends:Zt,props:{width:{type:Number,default:1},height:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1}},created:function(){var e=this;this.createGeometry();["width","height","widthSegments","heightSegments"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new de(this.width,this.height,this.widthSegments,this.heightSegments)}},__hmrId:"Plane"},nr={extends:Zt,props:{vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["vertices","indices","radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new me(this.vertices,this.indices,this.radius,this.detail)}},__hmrId:"Polyhedron"},ar={extends:Zt,props:{innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["innerRadius","outerRadius","thetaSegments","phiSegments","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ce(this.innerRadius,this.outerRadius,this.thetaSegments,this.phiSegments,this.thetaStart,this.thetaLength)}},__hmrId:"Ring"},or={extends:Zt,props:{radius:Number,widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12}},watch:{radius:function(){this.refreshGeometry()},widthSegments:function(){this.refreshGeometry()},heightSegments:function(){this.refreshGeometry()}},created:function(){this.createGeometry()},methods:{createGeometry:function(){this.geometry=new le(this.radius,this.widthSegments,this.heightSegments)}},__hmrId:"Sphere"},hr={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new fe(this.radius,this.detail)}},__hmrId:"Tetrahedron"},ur={text:String,fontSrc:String,size:{type:Number,default:80},height:{type:Number,default:5},depth:{type:Number,default:1},curveSegments:{type:Number,default:12},bevelEnabled:{type:Boolean,default:!1},bevelThickness:{type:Number,default:10},bevelSize:{type:Number,default:8},bevelOffset:{type:Number,default:0},bevelSegments:{type:Number,default:5},align:{type:[Boolean,String],default:!1}},dr={extends:Zt,props:Object.assign({},ur),data:function(){return{loading:!0}},created:function(){var e=this;["text","size","height","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align"].forEach((function(t){r((function(){return e[t]}),(function(){e.font&&e.refreshGeometry()}))})),(new pe).load(this.fontSrc,(function(t){e.loading=!1,e.font=t,e.createGeometry(),e.initMesh()}))},methods:{createGeometry:function(){this.geometry=new ge(this.text,{font:this.font,size:this.size,height:this.height,depth:this.depth,curveSegments:this.curveSegments,bevelEnabled:this.bevelEnabled,bevelThickness:this.bevelThickness,bevelSize:this.bevelSize,bevelOffset:this.bevelOffset,bevelSegments:this.bevelSegments}),"center"===this.align&&this.geometry.center()}}},mr={extends:Zt,props:{radius:{type:Number,default:.5},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radius","tube","radialSegments","tubularSegments","arc"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ye(this.radius,this.tube,this.radialSegments,this.tubularSegments,this.arc)}},__hmrId:"Torus"},cr={extends:Zt,props:{radius:{type:Number,default:.5},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}},created:function(){var e=this;this.createGeometry();["radius","tube","radialSegments","tubularSegments","p","q"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new be(this.radius,this.tube,this.tubularSegments,this.radialSegments,this.p,this.q)}},__hmrId:"TorusKnot"},lr={extends:Zt,props:{path:k,points:Array,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radialSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}},created:function(){var e=this;this.createGeometry();["tubularSegments","radius","radialSegments","closed"].forEach((function(t){r((function(){return e[t]}),(function(t){e.refreshGeometry()}))})),r((function(){return e.points}),(function(){fr(e.geometry,e.points)}))},methods:{createGeometry:function(){var e;this.points?e=new ve(this.points):this.path?e=this.path:console.error("Missing path curve or points."),this.geometry=new z(e,this.tubularSegments,this.radius,this.radialSegments,this.closed)},updateCurve:function(e){fr(this.geometry,e)}},__hmrId:"Tube"};function fr(e,t){var r=new ve(t),i=e.parameters,s=i.radialSegments,a=i.radius,o=i.tubularSegments,h=i.closed,u=r.computeFrenetFrames(o,h);e.tangents=u.tangents,e.normals=u.normals,e.binormals=u.binormals,e.parameters.path=r;for(var d,m=e.attributes.position.array,c=e.attributes.normal.array,l=new n,f=0;f1?t=.5/this.iRatio:e=.5/this.iRatio;var r=this.geometry.attributes.position.array;r[0]=-e,r[1]=-t,r[5]=e,r[6]=-t,r[10]=e,r[11]=t,r[15]=-e,r[16]=t,this.geometry.attributes.position.needsUpdate=!0}},__hmrId:"Sprite"},xr={extends:it,emits:["loaded"],props:{src:String},created:function(){var e=this;(new Ie).load(this.src,(function(t){e.$emit("loaded",t),e.initObject3D(t.scene)}))}},wr={extends:it,emits:["loaded"],props:{src:String},created:function(){var e=this;(new je).load(this.src,(function(t){e.$emit("loaded",t),e.initObject3D(t)}))}},Nr={setup:function(){return{passes:[]}},inject:["three"],provide:function(){return{passes:this.passes}},mounted:function(){var e=this;this.three.onAfterInit((function(){e.composer=new Pe(e.three.renderer),e.three.renderer.autoClear=!1,e.passes.forEach((function(t){e.composer.addPass(t)})),e.three.composer=e.composer,e.resize(),e.three.onAfterResize(e.resize)}))},unmounted:function(){this.three.offAfterResize(this.resize)},methods:{resize:function(){this.composer.setSize(this.three.size.width,this.three.size.height)}},render:function(){return this.$slots.default()},__hmrId:"EffectComposer"},_r={inject:["three","passes"],beforeMount:function(){this.passes||console.error("Missing parent EffectComposer")},unmounted:function(){this.pass.dispose&&this.pass.dispose()},render:function(){return[]},__hmrId:"EffectPass"},Mr={extends:_r,mounted:function(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");var e=new Re(this.three.scene,this.three.camera);this.passes.push(e),this.pass=e},__hmrId:"RenderPass"},Cr={extends:_r,props:{focus:{type:Number,default:1},aperture:{type:Number,default:.025},maxblur:{type:Number,default:.01}},watch:{focus:function(){this.pass.uniforms.focus.value=this.focus},aperture:function(){this.pass.uniforms.aperture.value=this.aperture},maxblur:function(){this.pass.uniforms.maxblur.value=this.maxblur}},mounted:function(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");var e={focus:this.focus,aperture:this.aperture,maxblur:this.maxblur,width:this.three.size.width,height:this.three.size.height},t=new Be(this.three.scene,this.three.camera,e);this.passes.push(t),this.pass=t},__hmrId:"BokehPass"},Gr={extends:_r,props:{noiseIntensity:{type:Number,default:.5},scanlinesIntensity:{type:Number,default:.05},scanlinesCount:{type:Number,default:4096},grayscale:{type:Number,default:0}},watch:{noiseIntensity:function(){this.pass.uniforms.nIntensity.value=this.noiseIntensity},scanlinesIntensity:function(){this.pass.uniforms.sIntensity.value=this.scanlinesIntensity},scanlinesCount:function(){this.pass.uniforms.sCount.value=this.scanlinesCount},grayscale:function(){this.pass.uniforms.grayscale.value=this.grayscale}},mounted:function(){var e=new Ee(this.noiseIntensity,this.scanlinesIntensity,this.scanlinesCount,this.grayscale);this.passes.push(e),this.pass=e},__hmrId:"FilmPass"},kr={extends:_r,mounted:function(){var e=new Te(Oe);this.passes.push(e),this.pass=e,this.three.onAfterResize(this.resize)},unmounted:function(){this.three.offAfterResize(this.resize)},methods:{resize:function(){var e=this.pass.material.uniforms.resolution;e.value.x=1/this.three.size.width,e.value.y=1/this.three.size.height}},__hmrId:"FXAAPass"},zr={extends:_r,props:{shape:{type:Number,default:1},radius:{type:Number,default:4},rotateR:{type:Number,default:Math.PI/12*1},rotateG:{type:Number,default:Math.PI/12*2},rotateB:{type:Number,default:Math.PI/12*3},scatter:{type:Number,default:0}},mounted:function(){var e=this,t=new Ae(this.three.size.width,this.three.size.height,{});["shape","radius","rotateR","rotateG","rotateB","scatter"].forEach((function(i){t.uniforms[i].value=e[i],r((function(){return e[i]}),(function(){t.uniforms[i].value=e[i]}))})),this.passes.push(t),this.pass=t},__hmrId:"HalftonePass"},Lr={extends:_r,mounted:function(){var e=new Fe(this.three.size.width,this.three.size.height);this.passes.push(e),this.pass=e},__hmrId:"SMAAPass"},Ir="\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",jr={uniforms:{tDiffuse:{value:null},blurRadius:{value:0},gradientRadius:{value:0},start:{value:new s},end:{value:new s},delta:{value:new s},texSize:{value:new s}},vertexShader:Ir,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 "},Pr={extends:_r,props:{blurRadius:{type:Number,default:10},gradientRadius:{type:Number,default:100},start:{type:Object,default:{x:0,y:100}},end:{type:Object,default:{x:10,y:100}}},mounted:function(){var e=this;this.pass=new Te(jr),this.passes.push(this.pass),this.pass1=new Te(jr),this.passes.push(this.pass1);var t=this.uniforms=this.pass.uniforms,i=this.uniforms1=this.pass1.uniforms;i.blurRadius=t.blurRadius,i.gradientRadius=t.gradientRadius,i.start=t.start,i.end=t.end,i.texSize=t.texSize,Xe(this,"blurRadius",t.blurRadius,"value"),Xe(this,"gradientRadius",t.gradientRadius,"value"),this.updateFocusLine(),["start","end"].forEach((function(t){r((function(){return e[t]}),e.updateFocusLine,{deep:!0})})),this.pass.setSize=function(e,r){t.texSize.value.set(e,r)}},methods:{updateFocusLine:function(){this.uniforms.start.value.copy(this.start),this.uniforms.end.value.copy(this.end);var e=(new s).copy(this.end).sub(this.start).normalize();this.uniforms.delta.value.copy(e),this.uniforms1.delta.value.set(-e.y,e.x)}},__hmrId:"TiltShiftPass"},Rr={extends:_r,props:{strength:{type:Number,default:1.5},radius:{type:Number,default:0},threshold:{type:Number,default:0}},watch:{strength:function(){this.pass.strength=this.strength},radius:function(){this.pass.radius=this.radius},threshold:function(){this.pass.threshold=this.threshold}},mounted:function(){var e=new s(this.three.size.width,this.three.size.height),t=new Ue(e,this.strength,this.radius,this.threshold);this.passes.push(t),this.pass=t},__hmrId:"UnrealBloomPass"},Br={uniforms:{tDiffuse:{value:null},center:{value:new s(.5,.5)},strength:{value:0}},vertexShader:Ir,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 "},Er={extends:_r,props:{center:{type:Object,default:{x:.5,y:.5}},strength:{type:Number,default:.5}},mounted:function(){this.pass=new Te(Br),this.passes.push(this.pass);var e=this.uniforms=this.pass.uniforms;Xe(this,"center",e.center,"value"),Xe(this,"strength",e.strength,"value")},__hmrId:"ZoomBlurPass"},Tr=Object.freeze({__proto__:null,Renderer:$e,OrthographicCamera:tt,PerspectiveCamera:rt,Camera:rt,Group:st,Scene:nt,BoxGeometry:ot,CircleGeometry:ht,ConeGeometry:ut,CylinderGeometry:dt,DodecahedronGeometry:mt,IcosahedronGeometry:ct,LatheGeometry:lt,OctahedronGeometry:ft,PolyhedronGeometry:pt,RingGeometry:gt,SphereGeometry:yt,TetrahedronGeometry:bt,TorusGeometry:vt,TorusKnotGeometry:St,TubeGeometry:xt,AmbientLight:Nt,DirectionalLight:_t,HemisphereLight:Mt,PointLight:Ct,RectAreaLight:Gt,SpotLight:kt,BasicMaterial:It,LambertMaterial:jt,MatcapMaterial:Pt,PhongMaterial:Rt,PhysicalMaterial:Tt,ShaderMaterial:Ot,StandardMaterial:Et,SubSurfaceMaterial:Wt,ToonMaterial:Xt,Texture:Vt,CubeTexture:qt,Mesh:Zt,Box:Kt,Circle:Yt,Cone:Jt,Cylinder:Qt,Dodecahedron:er,Icosahedron:tr,Lathe:rr,Octahedron:ir,Plane:sr,Polyhedron:nr,Ring:ar,Sphere:or,Tetrahedron:hr,Text:dr,Torus:mr,TorusKnot:cr,Tube:lr,Gem:pr,Image:gr,InstancedMesh:yr,MirrorMesh:br,RefractionMesh:vr,Sprite:Sr,GLTFModel:xr,FBXModel:wr,EffectComposer:Nr,RenderPass:Mr,BokehPass:Cr,FilmPass:Gr,FXAAPass:kr,HalftonePass:zr,SMAAPass:Lr,TiltShiftPass:Pr,UnrealBloomPass:Rr,ZoomBlurPass:Er,setFromProp:He,bindProps:We,bindProp:Xe,propsValues:Ve,lerp:qe,lerpv2:Ze,lerpv3:Ke,limit:Ye,getMatcapUrl:Je,defaultVertexShader:Qe,defaultFragmentShader:et}),Or={install:function(e){["Camera","OrthographicCamera","PerspectiveCamera","Renderer","Scene","Group","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","BasicMaterial","LambertMaterial","MatcapMaterial","PhongMaterial","PhysicalMaterial","ShaderMaterial","StandardMaterial","SubSurfaceMaterial","ToonMaterial","Texture","CubeTexture","Mesh","Box","BoxGeometry","Circle","CircleGeometry","Cone","ConeGeometry","Cylinder","CylinderGeometry","Dodecahedron","DodecahedronGeometry","Icosahedron","IcosahedronGeometry","Lathe","LatheGeometry","Octahedron","OctahedronGeometry","Plane","Polyhedron","PolyhedronGeometry","Ring","RingGeometry","Sphere","SphereGeometry","Tetrahedron","TetrahedronGeometry","Text","Torus","TorusGeometry","TorusKnot","TorusKnotGeometry","Tube","TubeGeometry","Gem","Image","InstancedMesh","MirrorMesh","RefractionMesh","Sprite","FBXModel","GLTFModel","BokehPass","EffectComposer","FilmPass","FXAAPass","HalftonePass","RenderPass","SAOPass","SMAAPass","TiltShiftPass","UnrealBloomPass","ZoomBlurPass","GLTFViewer"].forEach((function(t){e.component(t,Tr[t])}))}};function Ar(e){return i(e).use(Or)}export{Nt as AmbientLight,It as BasicMaterial,Cr as BokehPass,Kt as Box,ot as BoxGeometry,rt as Camera,Yt as Circle,ht as CircleGeometry,Jt as Cone,ut as ConeGeometry,qt as CubeTexture,Qt as Cylinder,dt as CylinderGeometry,_t as DirectionalLight,er as Dodecahedron,mt as DodecahedronGeometry,Nr as EffectComposer,wr as FBXModel,kr as FXAAPass,Gr as FilmPass,xr as GLTFModel,pr as Gem,st as Group,zr as HalftonePass,Mt as HemisphereLight,tr as Icosahedron,ct as IcosahedronGeometry,gr as Image,yr as InstancedMesh,jt as LambertMaterial,rr as Lathe,lt as LatheGeometry,Pt as MatcapMaterial,Zt as Mesh,br as MirrorMesh,ir as Octahedron,ft as OctahedronGeometry,tt as OrthographicCamera,rt as PerspectiveCamera,Rt as PhongMaterial,Tt as PhysicalMaterial,sr as Plane,Ct as PointLight,nr as Polyhedron,pt as PolyhedronGeometry,Gt as RectAreaLight,vr as RefractionMesh,Mr as RenderPass,$e as Renderer,ar as Ring,gt as RingGeometry,Lr as SMAAPass,nt as Scene,Ot as ShaderMaterial,or as Sphere,yt as SphereGeometry,kt as SpotLight,Sr as Sprite,Et as StandardMaterial,Wt as SubSurfaceMaterial,hr as Tetrahedron,bt as TetrahedronGeometry,dr as Text,Vt as Texture,Pr as TiltShiftPass,Xt as ToonMaterial,mr as Torus,vt as TorusGeometry,cr as TorusKnot,St as TorusKnotGeometry,Or as TroisJSVuePlugin,lr as Tube,xt as TubeGeometry,Rr as UnrealBloomPass,Er as ZoomBlurPass,Xe as bindProp,We as bindProps,Ar as createApp,et as defaultFragmentShader,Qe as defaultVertexShader,Je as getMatcapUrl,qe as lerp,Ze as lerpv2,Ke as lerpv3,Ye as limit,Ve as propsValues,He as setFromProp}; +import{defineComponent as e,h as t,toRef as r,watch as s,createApp as i}from"https://unpkg.com/vue@3.0.11/dist/vue.esm-browser.prod.js";import{VRButton as a}from"https://unpkg.com/three@0.127.0/examples/jsm/webxr/VRButton.js";import{Vector3 as n,Raycaster as o,Plane as h,Vector2 as d,InstancedMesh as m,WebGLRenderer as u,OrthographicCamera as l,PerspectiveCamera as c,Group as p,Scene as f,Color as g,BoxGeometry as y,CircleGeometry as b,ConeGeometry as v,CylinderGeometry as x,DodecahedronGeometry as S,IcosahedronGeometry as w,LatheGeometry as P,OctahedronGeometry as C,PolyhedronGeometry as N,RingGeometry as M,SphereGeometry as _,TetrahedronGeometry as L,TorusGeometry as j,TorusKnotGeometry as k,TubeGeometry as R,Curve as z,CatmullRomCurve3 as I,AmbientLight as G,DirectionalLight as B,HemisphereLight as O,PointLight as T,RectAreaLight as E,SpotLight as A,FrontSide as F,MeshBasicMaterial as U,MeshLambertMaterial as D,TextureLoader as $,MeshMatcapMaterial as W,MeshPhongMaterial as H,MeshStandardMaterial as X,MeshPhysicalMaterial as V,ShaderMaterial as K,ShaderChunk as Z,UniformsUtils as Y,ShaderLib as q,MeshToonMaterial as J,UVMapping as Q,ClampToEdgeWrapping as ee,LinearFilter as te,LinearMipmapLinearFilter as re,CubeTextureLoader as se,CubeRefractionMapping as ie,Mesh as ae,PlaneGeometry as ne,FontLoader as oe,TextGeometry as he,WebGLCubeRenderTarget as de,RGBFormat as me,CubeCamera as ue,BackSide as le,DoubleSide as ce,SpriteMaterial as pe,Sprite as fe}from"https://unpkg.com/three@0.127.0/build/three.module.js";import{OrbitControls as ge}from"https://unpkg.com/three@0.127.0/examples/jsm/controls/OrbitControls.js";import{RectAreaLightUniformsLib as ye}from"https://unpkg.com/three@0.127.0/examples/jsm/lights/RectAreaLightUniformsLib.js";import{RectAreaLightHelper as be}from"https://unpkg.com/three@0.127.0/examples/jsm/helpers/RectAreaLightHelper.js";import{GLTFLoader as ve}from"https://unpkg.com/three@0.127.0/examples/jsm/loaders/GLTFLoader.js";import{FBXLoader as xe}from"https://unpkg.com/three@0.127.0/examples/jsm/loaders/FBXLoader.js";import{EffectComposer as Se}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as we}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/RenderPass.js";import{BokehPass as Pe}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/BokehPass.js";import{FilmPass as Ce}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/FilmPass.js";import{ShaderPass as Ne}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as Me}from"https://unpkg.com/three@0.127.0/examples/jsm/shaders/FXAAShader.js";import{HalftonePass as _e}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/HalftonePass.js";import{SMAAPass as Le}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/SMAAPass.js";import{SSAOPass as je}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/SSAOPass.js";import{UnrealBloomPass as ke}from"https://unpkg.com/three@0.127.0/examples/jsm/postprocessing/UnrealBloomPass.js";function Re(e){const{camera:t,domElement:r,intersectObjects:s,touch:i=!0,resetOnEnd:a=!1,resetPosition:u=new d(0,0),resetPositionV3:l=new n(0,0,0),onEnter:c=(()=>{}),onMove:p=(()=>{}),onLeave:f=(()=>{}),onIntersectEnter:g=(()=>{}),onIntersectOver:y=(()=>{}),onIntersectMove:b=(()=>{}),onIntersectLeave:v=(()=>{}),onIntersectClick:x=(()=>{})}=e,S=u.clone(),w=new d(0,0),P=function(e){const{camera:t,resetPosition:r=new n(0,0,0)}=e,s=new o,i=r.clone(),a=new h(new n(0,0,1),0);return{position:i,updatePosition:e=>{s.setFromCamera(e,t),t.getWorldDirection(a.normal),s.ray.intersectPlane(a,i)},intersect:(e,r)=>(s.setFromCamera(e,t),s.intersectObjects(r))}}({camera:t}),C=P.position,N={position:S,positionN:w,positionV3:C,intersectObjects:s,listeners:!1,addListeners:function(){r.addEventListener("mouseenter",L),r.addEventListener("mousemove",j),r.addEventListener("mouseleave",R),r.addEventListener("click",k),i&&(r.addEventListener("touchstart",L),r.addEventListener("touchmove",j),r.addEventListener("touchend",R));N.listeners=!0},removeListeners:function(){r.removeEventListener("mouseenter",L),r.removeEventListener("mousemove",j),r.removeEventListener("mouseleave",R),r.removeEventListener("click",k),r.removeEventListener("touchstart",L),r.removeEventListener("touchmove",j),r.removeEventListener("touchend",R),N.listeners=!1},intersect:_};return N;function M(e){let t,s;e.touches&&e.touches.length>0?(t=e.touches[0].clientX,s=e.touches[0].clientY):(t=e.clientX,s=e.clientY);const i=r.getBoundingClientRect();S.x=t-i.left,S.y=s-i.top,w.x=S.x/i.width*2-1,w.y=-S.y/i.height*2+1,P.updatePosition(w)}function _(){if(s.length){const e=P.intersect(w,s),t=[...s],r=[];e.forEach((e=>{const{object:s}=e,{component:i}=s;if(s instanceof m){if(-1!==r.indexOf(s))return;r.push(s)}if(!s.over){s.over=!0;const t={type:"pointerover",over:!0,component:i,intersect:e},r={...t,type:"pointerenter"};y(t),g(r),i.onPointerOver?.(t),i.onPointerEnter?.(r)}const a={type:"pointermove",component:i,intersect:e};b(a),i.onPointerMove?.(a),t.splice(t.indexOf(s),1)})),t.forEach((e=>{const{component:t}=e;if(e.over){e.over=!1;const r={type:"pointerover",over:!1,component:t},s={...r,type:"pointerleave"};y(r),v(s),t.onPointerOver?.(r),t.onPointerLeave?.(s)}}))}}function L(e){M(e),c({type:"pointerenter",position:S,positionN:w,positionV3:C})}function j(e){M(e),p({type:"pointermove",position:S,positionN:w,positionV3:C}),_()}function k(e){if(M(e),s.length){const e=P.intersect(w,s),t=[];e.forEach((e=>{const{object:r}=e,{component:s}=r;if(r instanceof m){if(-1!==t.indexOf(r))return;t.push(r)}const i={type:"click",component:s,intersect:e};x(i),s.onClick?.(i)}))}}function R(){a&&(S.copy(u),C.copy(l)),f({type:"pointerleave"})}}function ze(){const e={canvas:null,antialias:!0,alpha:!1,autoClear:!0,orbit_ctrl:!1,pointer:!1,resize:!1,width:300,height:150},t={width:1,height:1,wWidth:1,wHeight:1,ratio:1},r=[];let s=[],i=[];const a=[],n={conf:e,renderer:null,camera:null,cameraCtrl:null,scene:null,pointer:null,size:t,init:function(t){t&&Object.entries(t).forEach((([t,r])=>{e[t]=r}));if(!n.scene)return void console.error("Missing Scene");if(!n.camera)return void console.error("Missing Camera");n.renderer=new u({canvas:e.canvas,antialias:e.antialias,alpha:e.alpha}),n.renderer.autoClear=e.autoClear,e.resize?(d(),window.addEventListener("resize",d)):m(e.width,e.height);o(),e.orbit_ctrl&&(n.orbitCtrl=new ge(n.camera,n.renderer.domElement),e.orbit_ctrl instanceof Object&&Object.entries(e.orbit_ctrl).forEach((([e,t])=>{n.orbitCtrl[e]=t})));return r.forEach((e=>e())),!0},dispose:function(){i=[],window.removeEventListener("resize",d),n.pointer&&n.pointer.removeListeners();n.orbitCtrl&&n.orbitCtrl.dispose();n.renderer.dispose()},render:function(){n.orbitCtrl&&n.orbitCtrl.update();i.forEach((e=>e())),n.renderer.render(n.scene,n.camera)},renderC:function(){n.orbitCtrl&&n.orbitCtrl.update();i.forEach((e=>e())),n.composer.render()},setSize:m,onAfterInit:function(e){r.push(e)},onAfterResize:function(e){s.push(e)},offAfterResize:function(e){s=s.filter((t=>t!==e))},onBeforeRender:h,offBeforeRender:function(e){i=i.filter((t=>t!==e))},addIntersectObject:function(e){-1===a.indexOf(e)&&a.push(e);n.pointer&&!n.pointer.listeners&&n.pointer.addListeners()},removeIntersectObject:function(t){const r=a.indexOf(t);-1!==r&&a.splice(r,1);n.pointer&&!e.pointer&&0===a.length&&n.pointer.removeListeners()}};function o(){let t={camera:n.camera,domElement:n.renderer.domElement,intersectObjects:a};e.pointer&&e.pointer instanceof Object&&(t={...t,...e.pointer}),n.pointer=Re(t),(e.pointer||a.length)&&(n.pointer.addListeners(),"frame"===e.pointer.intersectMode&&h((()=>{n.pointer.intersect()})))}function h(e){i.push(e)}function d(){if("window"===e.resize)m(window.innerWidth,window.innerHeight);else{const e=n.renderer.domElement.parentNode;m(e.clientWidth,e.clientHeight)}s.forEach((e=>e()))}function m(e,r){if(t.width=e,t.height=r,t.ratio=e/r,n.renderer.setSize(e,r,!1),n.camera.aspect=t.ratio,n.camera.updateProjectionMatrix(),n.composer&&n.composer.setSize(e,r),"OrthographicCamera"===n.camera.type)t.wWidth=n.camera.right-n.camera.left,t.wHeight=n.camera.top-n.camera.bottom;else{const e=function(){const e=n.camera.fov*Math.PI/180,t=2*Math.tan(e/2)*Math.abs(n.camera.position.z);return[t*n.camera.aspect,t]}();t.wWidth=e[0],t.wHeight=e[1]}}return n}var Ie=e({name:"Renderer",props:{antialias:Boolean,alpha:Boolean,autoClear:{type:Boolean,default:!0},orbitCtrl:{type:[Boolean,Object],default:!1},pointer:{type:[Boolean,Object],default:!1},resize:{type:[Boolean,String],default:!1},shadow:Boolean,width:String,height:String,xr:Boolean},setup:()=>({three:ze(),raf:!0,onMountedCallbacks:[]}),provide(){return{three:this.three,rendererComponent:this}},mounted(){const e={canvas:this.$el,antialias:this.antialias,alpha:this.alpha,autoClear:this.autoClear,orbit_ctrl:this.orbitCtrl,pointer:this.pointer,resize:this.resize,width:this.width,height:this.height};this.three.init(e)&&(this.renderer=this.three.renderer,this.renderer.shadowMap.enabled=this.shadow,this.xr?(this.vrButton=a.createButton(this.renderer),this.renderer.domElement.parentNode.appendChild(this.vrButton),this.renderer.xr.enabled=!0,this.three.composer?this.renderer.setAnimationLoop(this.animateXRC):this.renderer.setAnimationLoop(this.animateXR)):this.three.composer?this.animateC():this.animate()),this.onMountedCallbacks.forEach((e=>e()))},beforeUnmount(){this.raf=!1,this.three.dispose()},methods:{onMounted(e){this.onMountedCallbacks.push(e)},onBeforeRender(e){this.three.onBeforeRender(e)},onAfterResize(e){this.three.onAfterResize(e)},animate(){this.raf&&requestAnimationFrame(this.animate),this.three.render()},animateC(){this.raf&&requestAnimationFrame(this.animateC),this.three.renderC()},animateXR(){this.three.render()},animateXRC(){this.three.renderC()}},render(){return t("canvas",{},this.$slots.default())},__hmrId:"Renderer"});function Ge(e,t){t instanceof Object&&Object.entries(t).forEach((([t,r])=>{e[t]=r}))}function Be(e,t,r){t.forEach((t=>{Oe(e,t,r)}))}function Oe(e,t,i,a){a||(a=t);const n=r(e,t);n.value instanceof Object?(Ge(i[a],n.value),s(n,(e=>{Ge(i[a],e)}),{deep:!0})):(n.value&&(i[a]=e[t]),s(n,(e=>{i[a]=e})))}function Te(e,t){const r={};return Object.entries(e).forEach((([e,s])=>{(!t||t&&!t.includes(e))&&(r[e]=s)})),r}function Ee(e,t,r){return e+(t-e)*(r=(r=r<0?0:r)>1?1:r)}function Ae(e,t,r){e.x=Ee(e.x,t.x,r),e.y=Ee(e.y,t.y,r)}function Fe(e,t,r){e.x=Ee(e.x,t.x,r),e.y=Ee(e.y,t.y,r),e.z=Ee(e.z,t.z,r)}function Ue(e,t,r){return er?r:e}function De(e,t=1024){return`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${t}/${`${e}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)}.png`}`}var $e=e({inject:["three"],render(){return this.$slots.default?this.$slots.default():[]}}),We=e({extends:$e,name:"OrthographicCamera",inject:["three"],props:{left:{type:Number,default:-1},right:{type:Number,default:1},top:{type:Number,default:1},bottom:{type:Number,default:-1},near:{type:Number,default:.1},far:{type:Number,default:2e3},zoom:{type:Number,default:1},position:{type:Object,default:{x:0,y:0,z:0}}},created(){this.camera=new l(this.left,this.right,this.top,this.bottom,this.near,this.far),Oe(this,"position",this.camera),["left","right","top","bottom","near","far","zoom"].forEach((e=>{s((()=>this[e]),(()=>{this.camera[e]=this[e],this.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},__hmrId:"OrthographicCamera"}),He=e({extends:$e,name:"PerspectiveCamera",inject:["three"],props:{aspect:{type:Number,default:1},far:{type:Number,default:2e3},fov:{type:Number,default:50},near:{type:Number,default:.1},position:{type:Object,default:{x:0,y:0,z:0}},lookAt:{type:Object,default:null}},created(){this.camera=new c(this.fov,this.aspect,this.near,this.far),Oe(this,"position",this.camera),this.lookAt&&this.camera.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),s((()=>this.lookAt),(e=>{this.camera.lookAt(e.x,e.y,e.z)}),{deep:!0}),["aspect","far","fov","near"].forEach((e=>{s((()=>this[e]),(()=>{this.camera[e]=this[e],this.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},__hmrId:"PerspectiveCamera"}),Xe=e({name:"Object3D",inject:["three","scene","rendererComponent"],emits:["created","ready"],props:{position:{type:Object,default:{x:0,y:0,z:0}},rotation:{type:Object,default:{x:0,y:0,z:0}},scale:{type:Object,default:{x:1,y:1,z:1}},lookAt:{type:Object,default:null},autoRemove:{type:Boolean,default:!0}},unmounted(){this.autoRemove&&this.removeFromParent()},methods:{initObject3D(e){this.o3d=e,this.$emit("created",this.o3d),Oe(this,"position",this.o3d),Oe(this,"rotation",this.o3d),Oe(this,"scale",this.o3d),this.lookAt&&this.o3d.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),s((()=>this.lookAt),(e=>{this.o3d.lookAt(e.x,e.y,e.z)}),{deep:!0}),this._parent=this.getParent(),this.addToParent()?this.$emit("ready",this):console.error("Missing parent (Scene, Group...)")},getParent(){let e=this.$parent;for(;e;){if(e.add)return e;e=e.$parent}return!1},addToParent(e){const t=e||this.o3d;return!!this._parent&&(this._parent.add(t),!0)},removeFromParent(e){const t=e||this.o3d;return!!this._parent&&(this._parent.remove(t),!0)},add(e){this.o3d.add(e)},remove(e){this.o3d.remove(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Object3D"}),Ve=e({name:"Group",extends:Xe,created(){this.group=new p,this.initObject3D(this.group)},__hmrId:"Group"}),Ke=e({name:"Scene",inject:["three"],props:{id:String,background:[String,Number]},setup(e){const t=new f;return e.background&&(t.background=new g(e.background)),s((()=>e.background),(e=>{t.background.set(e)})),{scene:t}},provide(){return{scene:this.scene}},mounted(){this.three.scene||(this.three.scene=this.scene)},methods:{add(e){this.scene.add(e)},remove(e){this.scene.remove(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Scene"}),Ze=e({name:"Raycaster",inject:["three","rendererComponent"],props:{onPointerEnter:{type:Function,default:()=>{}},onPointerOver:{type:Function,default:()=>{}},onPointerMove:{type:Function,default:()=>{}},onPointerLeave:{type:Function,default:()=>{}},onClick:{type:Function,default:()=>{}},intersectMode:{type:String,default:"move"}},mounted(){this.rendererComponent.onMounted((()=>{this.pointer=Re({camera:this.three.camera,domElement:this.three.renderer.domElement,intersectObjects:this.getIntersectObjects(),onIntersectEnter:this.onPointerEnter,onIntersectOver:this.onPointerOver,onIntersectMove:this.onPointerMove,onIntersectLeave:this.onPointerLeave,onIntersectClick:this.onClick}),this.pointer.addListeners(),"frame"===this.intersectMode&&this.three.onBeforeRender(this.pointer.intersect)}))},unmounted(){this.pointer&&(this.pointer.removeListeners(),this.three.offBeforeRender(this.pointer.intersect))},methods:{getIntersectObjects(){return this.three.scene.children.filter((e=>"Mesh"===e.type))}},render:()=>[],__hmrId:"Raycaster"});const Ye=e({inject:["mesh"],props:{rotateX:Number,rotateY:Number,rotateZ:Number},created(){this.mesh||console.error("Missing parent Mesh"),this.watchProps=[],Object.entries(this.$props).forEach((e=>this.watchProps.push(e[0]))),this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),this.addWatchers()},unmounted(){this.geometry.dispose()},methods:{addWatchers(){this.watchProps.forEach((e=>{s((()=>this[e]),(()=>{this.refreshGeometry()}))}))},rotateGeometry(){this.rotateX&&this.geometry.rotateX(this.rotateX),this.rotateY&&this.geometry.rotateY(this.rotateY),this.rotateZ&&this.geometry.rotateZ(this.rotateZ)},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),e.dispose()}},render:()=>[]});function qe(t,r,s){return e({name:t,extends:Ye,props:r,methods:{createGeometry(){this.geometry=s(this)}}})}const Je={size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}};function Qe(e){return e.size?new y(e.size,e.size,e.size,e.widthSegments,e.heightSegments,e.depthSegments):new y(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}var et=qe("BoxGeometry",Je,Qe);const tt={radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function rt(e){return new b(e.radius,e.segments,e.thetaStart,e.thetaLength)}var st=qe("CircleGeometry",tt,rt);const it={radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function at(e){return new v(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var nt=qe("ConeGeometry",it,at);const ot={radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function ht(e){return new x(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var dt=qe("CylinderGeometry",ot,ht);const mt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function ut(e){return new S(e.radius,e.detail)}var lt=qe("DodecahedronGeometry",mt,ut);const ct={radius:{type:Number,default:1},detail:{type:Number,default:0}};function pt(e){return new w(e.radius,e.detail)}var ft=qe("IcosahedronGeometry",ct,pt);const gt={points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:2*Math.PI}};function yt(e){return new P(e.points,e.segments,e.phiStart,e.phiLength)}var bt=qe("LatheGeometry",gt,yt);const vt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function xt(e){return new C(e.radius,e.detail)}var St=qe("OctahedronGeometry",vt,xt);const wt={vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}};function Pt(e){return new N(e.vertices,e.indices,e.radius,e.detail)}var Ct=qe("PolyhedronGeometry",wt,Pt);const Nt={innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function Mt(e){return new M(e.innerRadius,e.outerRadius,e.thetaSegments,e.phiSegments,e.thetaStart,e.thetaLength)}var _t=qe("RingGeometry",Nt,Mt);const Lt={radius:{type:Number,default:1},widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12}};function jt(e){return new _(e.radius,e.widthSegments,e.heightSegments)}var kt=qe("SphereGeometry",Lt,jt);const Rt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function zt(e){return new L(e.radius,e.detail)}var It=qe("TetrahedronGeometry",Rt,zt);const Gt={radius:{type:Number,default:1},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:2*Math.PI}};function Bt(e){return new j(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}var Ot=qe("TorusGeometry",Gt,Bt);const Tt={radius:{type:Number,default:1},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}};function Et(e){return new k(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}var At=qe("TorusKnotGeometry",Tt,Et);const Ft={points:Array,path:z,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radialSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}};function Ut(e){let t;return e.points?t=new I(e.points):e.path?t=e.path:console.error("Missing path curve or points."),new R(t,e.tubularSegments,e.radius,e.radiusSegments,e.closed)}var Dt=e({extends:Ye,props:Ft,methods:{createGeometry(){this.geometry=Ut(this)},updatePoints(e){$t(this.geometry,e)}}});function $t(e,t){const r=new I(t),{radialSegments:s,radius:i,tubularSegments:a,closed:o}=e.parameters,h=r.computeFrenetFrames(a,o);e.tangents=h.tangents,e.normals=h.normals,e.binormals=h.binormals,e.parameters.path=r;const d=e.attributes.position.array,m=e.attributes.normal.array,u=new n;let l;for(let e=0;e{s((()=>this[e]),(()=>{"color"===e?this.light.color.set(this.color):this.light[e]=this[e]}))})),this.initObject3D(this.light),this.light.target&&this.addToParent(this.light.target)}},__hmrId:"Light"}),Ht=e({extends:Wt,created(){this.light=new G(this.color,this.intensity),this.initLight()},__hmrId:"AmbientLight"}),Xt=e({extends:Wt,props:{target:Object},created(){this.light=new B(this.color,this.intensity),this.initLight()},__hmrId:"DirectionalLight"}),Vt=e({extends:Wt,props:{groundColor:{type:String,default:"#444444"}},created(){this.light=new O(this.color,this.groundColor,this.intensity),s((()=>this.groundColor),(e=>{this.light.groundColor.set(e)})),this.initLight()},__hmrId:"HemisphereLight"}),Kt=e({extends:Wt,props:{distance:{type:Number,default:0},decay:{type:Number,default:1}},created(){this.light=new T(this.color,this.intensity,this.distance,this.decay),this.initLight()},__hmrId:"PointLight"}),Zt=e({extends:Wt,props:{width:{type:Number,default:10},height:{type:Number,default:10},helper:Boolean},created(){ye.init(),this.light=new E(this.color,this.intensity,this.width,this.height),["width","height"].forEach((e=>{s((()=>this[e]),(()=>{this.light[e]=this[e]}))})),this.helper&&(this.lightHelper=new be(this.light),this.light.add(this.lightHelper)),this.initLight()},unmounted(){this.lightHelper&&this.removeFromParent(this.lightHelper)},__hmrId:"RectAreaLight"}),Yt=e({extends:Wt,props:{angle:{type:Number,default:Math.PI/3},decay:{type:Number,default:1},distance:{type:Number,default:0},penumbra:{type:Number,default:0},target:Object},created(){this.light=new A(this.color,this.intensity,this.distance,this.angle,this.penumbra,this.decay),["angle","decay","distance","penumbra"].forEach((e=>{s((()=>this[e]),(()=>{this.light[e]=this[e]}))})),this.initLight()},__hmrId:"SpotLight"}),qt=e({inject:["three","mesh"],props:{color:{type:[String,Number],default:"#ffffff"},depthTest:{type:Boolean,default:!0},depthWrite:{type:Boolean,default:!0},fog:{type:Boolean,default:!0},opacity:{type:Number,default:1},side:{type:Number,default:F},transparent:Boolean,vertexColors:Boolean},provide(){return{material:this}},created(){this.createMaterial(),this.mesh.setMaterial(this.material),this._addWatchers(),this.addWatchers&&this.addWatchers()},unmounted(){this.material.dispose()},methods:{setProp(e,t,r=!1){this.material[e]=t,this.material.needsUpdate=r},setTexture(e,t="map"){this.setProp(t,e,!0)},_addWatchers(){["color","depthTest","depthWrite","fog","opacity","side","transparent"].forEach((e=>{s((()=>this[e]),(()=>{"color"===e?this.material.color.set(this.color):this.material[e]=this[e]}))}))}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Material"});const Jt={wireframe:{type:Boolean,default:!1},wireframeLinewidth:{type:Number,default:1}};var Qt=e({extends:qt,props:{...Jt},methods:{createMaterial(){this.material=new U(Te(this.$props))},addWatchers(){Be(this,Object.keys(Jt),this.material)}},__hmrId:"BasicMaterial"}),er=e({extends:qt,props:{...Jt},methods:{createMaterial(){this.material=new D(Te(this.$props))},addWatchers(){Be(this,Object.keys(Jt),this.material)}},__hmrId:"LambertMaterial"}),tr=e({extends:qt,props:{src:String,name:String,flatShading:Boolean},methods:{createMaterial(){const e=this.name?De(this.name):this.src,t=Te(this.$props,["src","name"]);t.matcap=(new $).load(e),this.material=new W(t)},addWatchers(){}},__hmrId:"MatcapMaterial"}),rr=e({extends:qt,props:{emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},reflectivity:{type:Number,default:1},shininess:{type:Number,default:30},specular:{type:[String,Number],default:1118481},flatShading:Boolean,...Jt},methods:{createMaterial(){this.material=new H(Te(this.$props))},addWatchers(){["emissive","emissiveIntensity","reflectivity","shininess","specular"].forEach((e=>{s((()=>this[e]),(t=>{"emissive"===e||"specular"===e?this.material[e].set(t):this.material[e]=t}))})),Be(this,Object.keys(Jt),this.material)}},__hmrId:"PhongMaterial"});const sr={aoMapIntensity:{type:Number,default:1},bumpScale:{type:Number,default:1},displacementBias:{type:Number,default:0},displacementScale:{type:Number,default:1},emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},envMapIntensity:{type:Number,default:1},lightMapIntensity:{type:Number,default:1},metalness:{type:Number,default:0},normalScale:{type:Object,default:{x:1,y:1}},roughness:{type:Number,default:1},refractionRatio:{type:Number,default:.98},flatShading:Boolean};var ir=e({extends:qt,props:{...sr,...Jt},methods:{createMaterial(){this.material=new X(Te(this.$props,["normalScale"]))},addWatchers(){Object.keys(sr).forEach((e=>{"normalScale"!==e&&s((()=>this[e]),(t=>{"emissive"===e?this.material[e].set(t):this.material[e]=t}))})),Oe(this,"normalScale",this.material),Be(this,Object.keys(Jt),this.material)}},__hmrId:"StandardMaterial"}),ar=e({extends:ir,props:{flatShading:Boolean},methods:{createMaterial(){this.material=new V(Te(this.$props))},addWatchers(){}},__hmrId:"PhysicalMaterial"});var nr=e({inject:["three","mesh"],props:{uniforms:{type:Object,default:()=>({})},vertexShader:{type:String,default:"\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}"},fragmentShader:{type:String,default:"\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}"}},provide(){return{material:this}},created(){this.createMaterial(),["vertexShader","fragmentShader"].forEach((e=>{s((()=>this[e]),(()=>{this.material.dispose(),this.createMaterial()}))}))},unmounted(){this.material.dispose()},methods:{createMaterial(){this.material=new K(Te(this.$props)),this.mesh.setMaterial(this.material)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"ShaderMaterial"});const or=Z.meshphong_frag.slice(0,Z.meshphong_frag.indexOf("void main() {")),hr=Z.meshphong_frag.slice(Z.meshphong_frag.indexOf("void main() {")),dr={uniforms:Y.merge([q.phong.uniforms,{thicknessColor:{value:new g(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:`\n #define USE_UV\n ${Z.meshphong_vert}\n `,fragmentShader:`\n #define USE_UV\n #define SUBSURFACE\n\n ${or}\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 `+hr.replace("#include ",(mr=Z.lights_fragment_begin,ur="RE_Direct( directLight, geometry, material, reflectedLight );",lr="\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 ",mr.split(ur).join(lr)))};var mr,ur,lr,cr=e({inject:["three","mesh"],props:{color:{type:String,default:"#ffffff"},thicknessColor:{type:String,default:"#ffffff"},thicknessDistortion:{type:Number,default:.4},thicknessAmbient:{type:Number,default:.01},thicknessAttenuation:{type:Number,default:.7},thicknessPower:{type:Number,default:2},thicknessScale:{type:Number,default:4},transparent:{type:Boolean,default:!1},opacity:{type:Number,default:1},vertexColors:{type:Boolean,default:!1}},created(){this.createMaterial(),this.mesh.setMaterial(this.material)},unmounted(){this.material.dispose()},methods:{createMaterial(){const e=dr,t=Y.clone(e.uniforms);Object.entries(this.$props).forEach((([e,r])=>{let s=e,i=r;["color","thicknessColor"].includes(e)&&("color"===e&&(s="diffuse"),i=new g(r)),["transparent","vertexColors"].includes(e)||(t[s].value=i)})),this.material=new K({...e,uniforms:t,lights:!0,transparent:this.transparent,vertexColors:this.vertexColors})}},render:()=>[],__hmrId:"SubSurfaceMaterial"}),pr=e({extends:qt,props:{...Jt},methods:{createMaterial(){this.material=new J(Te(this.$props))},addWatchers(){Be(this,Object.keys(Jt),this.material)}},__hmrId:"ToonMaterial"}),fr=e({inject:["material"],emits:["loaded"],props:{name:{type:String,default:"map"},uniform:{type:String,default:null},src:String,onLoad:Function,onProgress:Function,onError:Function,mapping:{type:Number,default:Q},wrapS:{type:Number,default:ee},wrapT:{type:Number,default:ee},magFilter:{type:Number,default:te},minFilter:{type:Number,default:re},repeat:{type:Object,default:{x:1,y:1}},rotation:{type:Number,default:0},center:{type:Object,default:{x:0,y:0}}},created(){this.refreshTexture(),s((()=>this.src),this.refreshTexture)},unmounted(){this.material&&this.material.setTexture&&this.material.setTexture(null,this.name),this.texture.dispose()},methods:{createTexture(){this.texture=(new $).load(this.src,this.onLoaded,this.onProgress,this.onError);["mapping","wrapS","wrapT","magFilter","minFilter","repeat","rotation","rotation","center"].forEach((e=>{Oe(this,e,this.texture)}))},refreshTexture(){if(this.createTexture(),this.material&&this.material.setTexture)this.material.setTexture(this.texture,this.name);else if(this.material&&"ShaderMaterial"===this.material.material.type){if(!this.uniform)return void console.warn('"uniform" prop required to use texture in a shader.');this.material.uniforms[this.uniform]={value:this.texture}}},onLoaded(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:()=>[]}),gr=e({inject:["material"],emits:["loaded"],props:{path:String,urls:{type:Array,default:["px.jpg","nx.jpg","py.jpg","ny.jpg","pz.jpg","nz.jpg"]},onLoad:Function,onProgress:Function,onError:Function,name:{type:String,default:"envMap"},refraction:Boolean,refractionRatio:{type:Number,default:.98}},created(){this.refreshTexture(),s((()=>this.path),this.refreshTexture),s((()=>this.urls),this.refreshTexture)},unmounted(){this.material.setTexture(null,this.name),this.texture.dispose()},methods:{createTexture(){this.texture=(new se).setPath(this.path).load(this.urls,this.onLoaded,this.onProgress,this.onError)},refreshTexture(){this.createTexture(),this.material.setTexture(this.texture,this.name),this.refraction&&(this.texture.mapping=ie,this.material.setProp("refractionRatio",this.refractionRatio))},onLoaded(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:()=>[]});const yr={onPointerEnter:Function,onPointerOver:Function,onPointerMove:Function,onPointerLeave:Function,onPointerDown:Function,onPointerUp:Function,onClick:Function},br=e({name:"Mesh",extends:Xe,props:{castShadow:Boolean,receiveShadow:Boolean,...yr},provide(){return{mesh:this}},mounted(){this.mesh||this.loading||this.initMesh()},methods:{initMesh(){this.mesh=new ae(this.geometry,this.material),this.mesh.component=this,Oe(this,"castShadow",this.mesh),Oe(this,"receiveShadow",this.mesh),(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.three.addIntersectObject(this.mesh),this.initObject3D(this.mesh)},addGeometryWatchers(e){Object.keys(e).forEach((e=>{s((()=>this[e]),(()=>{this.refreshGeometry()}))}))},setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){this.material=e,this.mesh&&(this.mesh.material=e)},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.mesh.geometry=this.geometry,e.dispose()}},unmounted(){this.mesh&&this.three.removeIntersectObject(this.mesh),this.geometry&&this.geometry.dispose()},__hmrId:"Mesh"});function vr(t,r,s){return e({name:t,extends:br,props:r,created(){this.createGeometry(),this.addGeometryWatchers(r)},methods:{createGeometry(){this.geometry=s(this)}},__hmrId:t})}var xr=vr("Box",Je,Qe),Sr=vr("Circle",tt,rt),wr=vr("Cone",it,at),Pr=vr("Cylinder",ot,ht),Cr=vr("Dodecahedron",mt,ut),Nr=vr("Icosahedron",ct,pt),Mr=vr("Lathe",gt,yt),_r=vr("Octahedron",vt,xt);const Lr={width:{type:Number,default:1},height:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1}};function jr(e){return new ne(e.width,e.height,e.widthSegments,e.heightSegments)}qe("PlaneGeometry",Lr,jr);var kr=vr("Plane",Lr,jr),Rr=vr("Polyhedron",wt,Pt),zr=vr("Ring",Nt,Mt),Ir=vr("Sphere",Lt,jt),Gr=vr("Tetrahedron",Rt,zt);const Br={text:String,fontSrc:String,size:{type:Number,default:80},height:{type:Number,default:5},depth:{type:Number,default:1},curveSegments:{type:Number,default:12},bevelEnabled:{type:Boolean,default:!1},bevelThickness:{type:Number,default:10},bevelSize:{type:Number,default:8},bevelOffset:{type:Number,default:0},bevelSegments:{type:Number,default:5},align:{type:[Boolean,String],default:!1}};var Or=e({extends:br,props:Br,data:()=>({loading:!0}),created(){["text","size","height","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align"].forEach((e=>{s((()=>this[e]),(()=>{this.font&&this.refreshGeometry()}))}));(new oe).load(this.fontSrc,(e=>{this.loading=!1,this.font=e,this.createGeometry(),this.initMesh()}))},methods:{createGeometry(){this.geometry=new he(this.text,{font:this.font,size:this.size,height:this.height,depth:this.depth,curveSegments:this.curveSegments,bevelEnabled:this.bevelEnabled,bevelThickness:this.bevelThickness,bevelSize:this.bevelSize,bevelOffset:this.bevelOffset,bevelSegments:this.bevelSegments}),"center"===this.align&&this.geometry.center()}}}),Tr=vr("Torus",Gt,Bt),Er=vr("TorusKnot",Tt,Et),Ar=e({extends:br,props:Ft,created(){this.createGeometry(),this.addGeometryWatchers(Ft)},methods:{createGeometry(){this.geometry=Ut(this)},updatePoints(e){$t(this.geometry,e)}},__hmrId:"Tube"}),Fr=e({extends:br,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},autoUpdate:Boolean},mounted(){this.initGem(),this.autoUpdate?this.three.onBeforeRender(this.updateCubeRT):this.rendererComponent.onMounted(this.updateCubeRT)},unmounted(){this.three.offBeforeRender(this.updateCubeRT),this.cubeCamera&&this.removeFromParent(this.cubeCamera),this.meshBack&&this.removeFromParent(this.meshBack),this.materialBack&&this.materialBack.dispose()},methods:{initGem(){const e=new de(this.cubeRTSize,{format:me,generateMipmaps:!0,minFilter:re});this.cubeCamera=new ue(this.cubeCameraNear,this.cubeCameraFar,e),Oe(this,"position",this.cubeCamera),this.addToParent(this.cubeCamera),this.material.side=F,this.material.envMap=e.texture,this.material.envMapIntensity=10,this.material.metalness=0,this.material.roughness=0,this.material.opacity=.75,this.material.transparent=!0,this.material.premultipliedAlpha=!0,this.material.needsUpdate=!0,this.materialBack=this.material.clone(),this.materialBack.side=le,this.materialBack.envMapIntensity=5,this.materialBack.metalness=1,this.materialBack.roughness=0,this.materialBack.opacity=.5,this.meshBack=new ae(this.geometry,this.materialBack),Oe(this,"position",this.meshBack),Oe(this,"rotation",this.meshBack),Oe(this,"scale",this.meshBack),this.addToParent(this.meshBack)},updateCubeRT(){this.mesh.visible=!1,this.meshBack.visible=!1,this.cubeCamera.update(this.three.renderer,this.scene),this.mesh.visible=!0,this.meshBack.visible=!0}},__hmrId:"Gem"}),Ur=e({emits:["loaded"],extends:br,props:{src:String,width:Number,height:Number,keepSize:Boolean},created(){this.createGeometry(),this.createMaterial(),this.initMesh(),s((()=>this.src),this.refreshTexture),["width","height"].forEach((e=>{s((()=>this[e]),this.resize)})),this.keepSize&&this.three.onAfterResize(this.resize)},methods:{createGeometry(){this.geometry=new ne(1,1,1,1)},createMaterial(){this.material=new U({side:ce,map:this.loadTexture()})},loadTexture(){return(new $).load(this.src,this.onLoaded)},refreshTexture(){this.texture&&this.texture.dispose(),this.material.map=this.loadTexture(),this.material.needsUpdate=!0},onLoaded(e){this.texture=e,this.resize(),this.$emit("loaded")},resize(){if(!this.texture)return;const e=this.three.size,t=this.texture.image.width/this.texture.image.height;let r,s;this.width&&this.height?(r=this.width*e.wWidth/e.width,s=this.height*e.wHeight/e.height):this.width?(r=this.width*e.wWidth/e.width,s=r/t):this.height&&(s=this.height*e.wHeight/e.height,r=s*t),this.mesh.scale.x=r,this.mesh.scale.y=s}},__hmrId:"Image"}),Dr=e({extends:Xe,props:{castShadow:Boolean,receiveShadow:Boolean,count:Number,...yr},provide(){return{mesh:this}},beforeMount(){this.$slots.default||console.error("Missing Geometry")},mounted(){this.initMesh()},methods:{initMesh(){this.mesh=new m(this.geometry,this.material,this.count),this.mesh.component=this,Oe(this,"castShadow",this.mesh),Oe(this,"receiveShadow",this.mesh),(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.three.addIntersectObject(this.mesh),this.initObject3D(this.mesh)},setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){this.material=e,this.material.instancingColor=!0,this.mesh&&(this.mesh.material=e)}},unmounted(){this.mesh&&this.three.removeIntersectObject(this.mesh)},__hmrId:"InstancedMesh"}),$r=e({extends:br,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},autoUpdate:Boolean},mounted(){this.initMirrorMesh(),this.autoUpdate?this.three.onBeforeRender(this.updateCubeRT):this.rendererComponent.onMounted(this.updateCubeRT)},unmounted(){this.three.offBeforeRender(this.updateCubeRT),this.cubeCamera&&this.removeFromParent(this.cubeCamera)},methods:{initMirrorMesh(){const e=new de(this.cubeRTSize,{format:me,generateMipmaps:!0,minFilter:re});this.cubeCamera=new ue(this.cubeCameraNear,this.cubeCameraFar,e),this.addToParent(this.cubeCamera),this.material.envMap=e.texture,this.material.needsUpdate=!0},updateCubeRT(){this.mesh.visible=!1,this.cubeCamera.update(this.three.renderer,this.scene),this.mesh.visible=!0}},__hmrId:"MirrorMesh"}),Wr=e({extends:br,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},refractionRatio:{type:Number,default:.98},autoUpdate:Boolean},mounted(){this.initMirrorMesh(),this.autoUpdate?this.three.onBeforeRender(this.updateCubeRT):this.rendererComponent.onMounted(this.updateCubeRT)},unmounted(){this.three.offBeforeRender(this.updateCubeRT),this.cubeCamera&&this.removeFromParent(this.cubeCamera)},methods:{initMirrorMesh(){const e=new de(this.cubeRTSize,{mapping:ie,format:me,generateMipmaps:!0,minFilter:re});this.cubeCamera=new ue(this.cubeCameraNear,this.cubeCameraFar,e),Oe(this,"position",this.cubeCamera),this.addToParent(this.cubeCamera),this.material.envMap=e.texture,this.material.refractionRatio=this.refractionRatio,this.material.needsUpdate=!0},updateCubeRT(){this.mesh.visible=!1,this.cubeCamera.update(this.three.renderer,this.scene),this.mesh.visible=!0}},__hmrId:"RefractionMesh"}),Hr=e({extends:Xe,emits:["loaded"],props:{src:String},data:()=>({loading:!0}),created(){this.texture=(new $).load(this.src,this.onLoaded),this.material=new pe({map:this.texture}),this.sprite=new fe(this.material),this.geometry=this.sprite.geometry,this.initObject3D(this.sprite)},unmounted(){this.texture.dispose(),this.material.dispose()},methods:{onLoaded(){this.loading=!1,this.updateUV(),this.$emit("loaded")},updateUV(){this.iWidth=this.texture.image.width,this.iHeight=this.texture.image.height,this.iRatio=this.iWidth/this.iHeight;let e=.5,t=.5;this.iRatio>1?t=.5/this.iRatio:e=.5/this.iRatio;const r=this.geometry.attributes.position.array;r[0]=-e,r[1]=-t,r[5]=e,r[6]=-t,r[10]=e,r[11]=t,r[15]=-e,r[16]=t,this.geometry.attributes.position.needsUpdate=!0}},__hmrId:"Sprite"}),Xr=e({extends:Xe,emits:["load","progress","error"],data:()=>({progress:0}),methods:{onLoad(e){this.$emit("load",e),this.initObject3D(e)},onProgress(e){this.progress=e.loaded/e.total,this.$emit("progress",e)},onError(e){this.$emit("error",e)}}}),Vr=e({extends:Xr,props:{src:String},created(){(new ve).load(this.src,(e=>{this.onLoad(e.scene)}),this.onProgress,this.onError)}}),Kr=e({extends:Xr,props:{src:String},created(){(new xe).load(this.src,(e=>{this.onLoad(e)}),this.onProgress,this.onError)}}),Zr=e({setup:()=>({passes:[]}),inject:["three"],provide(){return{passes:this.passes}},mounted(){this.three.onAfterInit((()=>{this.composer=new Se(this.three.renderer),this.three.renderer.autoClear=!1,this.passes.forEach((e=>{this.composer.addPass(e)})),this.three.composer=this.composer,this.resize(),this.three.onAfterResize(this.resize)}))},unmounted(){this.three.offAfterResize(this.resize)},methods:{resize(){this.composer.setSize(this.three.size.width,this.three.size.height)}},render(){return this.$slots.default()},__hmrId:"EffectComposer"}),Yr=e({inject:["three","passes"],emits:["ready"],beforeMount(){this.passes||console.error("Missing parent EffectComposer")},unmounted(){this.pass.dispose&&this.pass.dispose()},methods:{completePass(e){this.passes.push(e),this.pass=e,this.$emit("ready",e)}},render:()=>[],__hmrId:"EffectPass"}),qr=e({extends:Yr,mounted(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");const e=new we(this.three.scene,this.three.camera);this.completePass(e)},__hmrId:"RenderPass"}),Jr=e({extends:Yr,props:{focus:{type:Number,default:1},aperture:{type:Number,default:.025},maxblur:{type:Number,default:.01}},watch:{focus(){this.pass.uniforms.focus.value=this.focus},aperture(){this.pass.uniforms.aperture.value=this.aperture},maxblur(){this.pass.uniforms.maxblur.value=this.maxblur}},mounted(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");const e={focus:this.focus,aperture:this.aperture,maxblur:this.maxblur,width:this.three.size.width,height:this.three.size.height},t=new Pe(this.three.scene,this.three.camera,e);this.completePass(t)},__hmrId:"BokehPass"}),Qr=e({extends:Yr,props:{noiseIntensity:{type:Number,default:.5},scanlinesIntensity:{type:Number,default:.05},scanlinesCount:{type:Number,default:4096},grayscale:{type:Number,default:0}},watch:{noiseIntensity(){this.pass.uniforms.nIntensity.value=this.noiseIntensity},scanlinesIntensity(){this.pass.uniforms.sIntensity.value=this.scanlinesIntensity},scanlinesCount(){this.pass.uniforms.sCount.value=this.scanlinesCount},grayscale(){this.pass.uniforms.grayscale.value=this.grayscale}},mounted(){const e=new Ce(this.noiseIntensity,this.scanlinesIntensity,this.scanlinesCount,this.grayscale);this.completePass(e)},__hmrId:"FilmPass"}),es=e({extends:Yr,mounted(){const e=new Ne(Me);this.completePass(e),this.three.onAfterResize(this.resize)},unmounted(){this.three.offAfterResize(this.resize)},methods:{resize(){const{resolution:e}=this.pass.material.uniforms;e.value.x=1/this.three.size.width,e.value.y=1/this.three.size.height}},__hmrId:"FXAAPass"}),ts=e({extends:Yr,props:{shape:{type:Number,default:1},radius:{type:Number,default:4},rotateR:{type:Number,default:Math.PI/12*1},rotateG:{type:Number,default:Math.PI/12*2},rotateB:{type:Number,default:Math.PI/12*3},scatter:{type:Number,default:0}},mounted(){const e=new _e(this.three.size.width,this.three.size.height,{});["shape","radius","rotateR","rotateG","rotateB","scatter"].forEach((t=>{e.uniforms[t].value=this[t],s((()=>this[t]),(()=>{e.uniforms[t].value=this[t]}))})),this.completePass(e)},__hmrId:"HalftonePass"}),rs=e({extends:Yr,mounted(){const e=new Le(this.three.size.width,this.three.size.height);this.completePass(e)},__hmrId:"SMAAPass"}),ss=e({extends:Yr,props:{scene:null,camera:null,options:{type:Object,default:()=>({})}},mounted(){const e=new je(this.scene||this.three.scene,this.camera||this.three.camera,this.three.size.width,this.three.size.height);for(const t of Object.keys(this.options))e[t]=this.options[t];this.completePass(e)},__hmrId:"SSAOPass"}),is={uniforms:{},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:"\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n "},as={uniforms:{tDiffuse:{value:null},blurRadius:{value:0},gradientRadius:{value:0},start:{value:new d},end:{value:new d},delta:{value:new d},texSize:{value:new d}},vertexShader:is.vertexShader,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 "},ns=e({extends:Yr,props:{blurRadius:{type:Number,default:10},gradientRadius:{type:Number,default:100},start:{type:Object,default:{x:0,y:100}},end:{type:Object,default:{x:10,y:100}}},mounted(){this.pass=new Ne(as),this.passes.push(this.pass),this.pass1=new Ne(as),this.passes.push(this.pass1);const e=this.uniforms=this.pass.uniforms,t=this.uniforms1=this.pass1.uniforms;t.blurRadius=e.blurRadius,t.gradientRadius=e.gradientRadius,t.start=e.start,t.end=e.end,t.texSize=e.texSize,Oe(this,"blurRadius",e.blurRadius,"value"),Oe(this,"gradientRadius",e.gradientRadius,"value"),this.updateFocusLine(),["start","end"].forEach((e=>{s((()=>this[e]),this.updateFocusLine,{deep:!0})})),this.pass.setSize=(t,r)=>{e.texSize.value.set(t,r)},this.$emit("ready",[this.pass,this.pass1])},methods:{updateFocusLine(){this.uniforms.start.value.copy(this.start),this.uniforms.end.value.copy(this.end);const e=(new d).copy(this.end).sub(this.start).normalize();this.uniforms.delta.value.copy(e),this.uniforms1.delta.value.set(-e.y,e.x)}},__hmrId:"TiltShiftPass"}),os=e({extends:Yr,props:{strength:{type:Number,default:1.5},radius:{type:Number,default:0},threshold:{type:Number,default:0}},watch:{strength(){this.pass.strength=this.strength},radius(){this.pass.radius=this.radius},threshold(){this.pass.threshold=this.threshold}},mounted(){const e=new d(this.three.size.width,this.three.size.height),t=new ke(e,this.strength,this.radius,this.threshold);this.completePass(t)},__hmrId:"UnrealBloomPass"}),hs={uniforms:{tDiffuse:{value:null},center:{value:new d(.5,.5)},strength:{value:0}},vertexShader:is.vertexShader,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 "},ds=e({extends:Yr,props:{center:{type:Object,default:{x:.5,y:.5}},strength:{type:Number,default:.5}},mounted(){const e=new Ne(hs),t=this.uniforms=e.uniforms;Oe(this,"center",t.center,"value"),Oe(this,"strength",t.strength,"value"),this.completePass(e)},__hmrId:"ZoomBlurPass"}),ms=Object.freeze({__proto__:null,Renderer:Ie,OrthographicCamera:We,PerspectiveCamera:He,Camera:He,Group:Ve,Scene:Ke,Object3D:Xe,Raycaster:Ze,BoxGeometry:et,CircleGeometry:st,ConeGeometry:nt,CylinderGeometry:dt,DodecahedronGeometry:lt,IcosahedronGeometry:ft,LatheGeometry:bt,OctahedronGeometry:St,PolyhedronGeometry:Ct,RingGeometry:_t,SphereGeometry:kt,TetrahedronGeometry:It,TorusGeometry:Ot,TorusKnotGeometry:At,TubeGeometry:Dt,AmbientLight:Ht,DirectionalLight:Xt,HemisphereLight:Vt,PointLight:Kt,RectAreaLight:Zt,SpotLight:Yt,BasicMaterial:Qt,LambertMaterial:er,MatcapMaterial:tr,PhongMaterial:rr,PhysicalMaterial:ar,ShaderMaterial:nr,StandardMaterial:ir,SubSurfaceMaterial:cr,ToonMaterial:pr,Texture:fr,CubeTexture:gr,Mesh:br,Box:xr,Circle:Sr,Cone:wr,Cylinder:Pr,Dodecahedron:Cr,Icosahedron:Nr,Lathe:Mr,Octahedron:_r,Plane:kr,Polyhedron:Rr,Ring:zr,Sphere:Ir,Tetrahedron:Gr,Text:Or,Torus:Tr,TorusKnot:Er,Tube:Ar,Gem:Fr,Image:Ur,InstancedMesh:Dr,MirrorMesh:$r,RefractionMesh:Wr,Sprite:Hr,GLTFModel:Vr,FBXModel:Kr,EffectComposer:Zr,RenderPass:qr,BokehPass:Jr,FilmPass:Qr,FXAAPass:es,HalftonePass:ts,SMAAPass:rs,SSAOPass:ss,TiltShiftPass:ns,UnrealBloomPass:os,ZoomBlurPass:ds,setFromProp:Ge,bindProps:Be,bindProp:Oe,propsValues:Te,lerp:Ee,lerpv2:Ae,lerpv3:Fe,limit:Ue,getMatcapUrl:De});const us={install:e=>{["Camera","OrthographicCamera","PerspectiveCamera","Raycaster","Renderer","Scene","Group","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","BasicMaterial","LambertMaterial","MatcapMaterial","PhongMaterial","PhysicalMaterial","ShaderMaterial","StandardMaterial","SubSurfaceMaterial","ToonMaterial","Texture","CubeTexture","Mesh","Box","BoxGeometry","Circle","CircleGeometry","Cone","ConeGeometry","Cylinder","CylinderGeometry","Dodecahedron","DodecahedronGeometry","Icosahedron","IcosahedronGeometry","Lathe","LatheGeometry","Octahedron","OctahedronGeometry","Plane","Polyhedron","PolyhedronGeometry","Ring","RingGeometry","Sphere","SphereGeometry","Tetrahedron","TetrahedronGeometry","Text","Torus","TorusGeometry","TorusKnot","TorusKnotGeometry","Tube","TubeGeometry","Gem","Image","InstancedMesh","MirrorMesh","RefractionMesh","Sprite","FBXModel","GLTFModel","BokehPass","EffectComposer","FilmPass","FXAAPass","HalftonePass","RenderPass","SAOPass","SMAAPass","SSAOPass","TiltShiftPass","UnrealBloomPass","ZoomBlurPass","GLTFViewer"].forEach((t=>{e.component(t,ms[t])}))}};function ls(e){return i(e).use(us)}export{Ht as AmbientLight,Qt as BasicMaterial,Jr as BokehPass,xr as Box,et as BoxGeometry,He as Camera,Sr as Circle,st as CircleGeometry,wr as Cone,nt as ConeGeometry,gr as CubeTexture,Pr as Cylinder,dt as CylinderGeometry,Xt as DirectionalLight,Cr as Dodecahedron,lt as DodecahedronGeometry,Zr as EffectComposer,Kr as FBXModel,es as FXAAPass,Qr as FilmPass,Vr as GLTFModel,Fr as Gem,Ve as Group,ts as HalftonePass,Vt as HemisphereLight,Nr as Icosahedron,ft as IcosahedronGeometry,Ur as Image,Dr as InstancedMesh,er as LambertMaterial,Mr as Lathe,bt as LatheGeometry,tr as MatcapMaterial,br as Mesh,$r as MirrorMesh,Xe as Object3D,_r as Octahedron,St as OctahedronGeometry,We as OrthographicCamera,He as PerspectiveCamera,rr as PhongMaterial,ar as PhysicalMaterial,kr as Plane,Kt as PointLight,Rr as Polyhedron,Ct as PolyhedronGeometry,Ze as Raycaster,Zt as RectAreaLight,Wr as RefractionMesh,qr as RenderPass,Ie as Renderer,zr as Ring,_t as RingGeometry,rs as SMAAPass,ss as SSAOPass,Ke as Scene,nr as ShaderMaterial,Ir as Sphere,kt as SphereGeometry,Yt as SpotLight,Hr as Sprite,ir as StandardMaterial,cr as SubSurfaceMaterial,Gr as Tetrahedron,It as TetrahedronGeometry,Or as Text,fr as Texture,ns as TiltShiftPass,pr as ToonMaterial,Tr as Torus,Ot as TorusGeometry,Er as TorusKnot,At as TorusKnotGeometry,us as TroisJSVuePlugin,Ar as Tube,Dt as TubeGeometry,os as UnrealBloomPass,ds as ZoomBlurPass,Oe as bindProp,Be as bindProps,ls as createApp,De as getMatcapUrl,Ee as lerp,Ae as lerpv2,Fe as lerpv3,Ue as limit,Te as propsValues,Ge as setFromProp}; //# sourceMappingURL=trois.module.cdn.min.js.map diff --git a/build/trois.module.cdn.min.js.map b/build/trois.module.cdn.min.js.map index 6d7cf75..a7578f6 100644 --- a/build/trois.module.cdn.min.js.map +++ b/build/trois.module.cdn.min.js.map @@ -1 +1 @@ -{"version":3,"file":"trois.module.cdn.min.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/core/OrthographicCamera.js","../src/core/PerspectiveCamera.js","../src/core/Object3D.js","../src/core/Group.js","../src/core/Scene.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/CircleGeometry.js","../src/geometries/ConeGeometry.js","../src/geometries/CylinderGeometry.js","../src/geometries/DodecahedronGeometry.js","../src/geometries/IcosahedronGeometry.js","../src/geometries/LatheGeometry.js","../src/geometries/OctahedronGeometry.js","../src/geometries/PolyhedronGeometry.js","../src/geometries/RingGeometry.js","../src/geometries/SphereGeometry.js","../src/geometries/TetrahedronGeometry.js","../src/geometries/TorusGeometry.js","../src/geometries/TorusKnotGeometry.js","../src/geometries/TubeGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.js","../src/lights/DirectionalLight.js","../src/lights/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/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.js","../src/meshes/TextProps.js","../src/meshes/Text.js","../src/meshes/Torus.js","../src/meshes/TorusKnot.js","../src/meshes/Tube.js","../src/meshes/Gem.js","../src/meshes/Image.js","../src/meshes/InstancedMesh.js","../src/meshes/MirrorMesh.js","../src/meshes/RefractionMesh.js","../src/meshes/Sprite.js","../src/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/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 {\n Plane,\n Raycaster,\n Vector2,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\n/**\n * Three.js helper\n */\nexport default function useThree() {\n // default conf\n const conf = {\n canvas: null,\n antialias: true,\n alpha: false,\n autoClear: true,\n orbit_ctrl: false,\n mouse_move: false,\n mouse_raycast: false,\n mouse_over: false,\n click: false,\n resize: true,\n width: 0,\n height: 0,\n };\n\n // size\n const size = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n };\n\n // handlers\n const afterInitCallbacks = [];\n let afterResizeCallbacks = [];\n let beforeRenderCallbacks = [];\n\n // mouse tracking\n const mouse = new Vector2();\n const mouseV3 = new Vector3();\n const mousePlane = new Plane(new Vector3(0, 0, 1), 0);\n const raycaster = new Raycaster();\n\n // raycast objects\n const intersectObjects = [];\n\n // returned object\n const obj = {\n conf,\n renderer: null,\n camera: null,\n cameraCtrl: null,\n materials: {},\n scene: null,\n size,\n mouse, mouseV3,\n init,\n dispose,\n render,\n renderC,\n setSize,\n onAfterInit,\n onAfterResize, offAfterResize,\n onBeforeRender, offBeforeRender,\n addIntersectObject, removeIntersectObject,\n };\n\n /**\n * init three\n */\n function init(params) {\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n conf[key] = value;\n });\n }\n\n if (!obj.scene) {\n console.error('Missing Scene');\n return;\n }\n\n if (!obj.camera) {\n console.error('Missing Camera');\n return;\n }\n\n obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha });\n obj.renderer.autoClear = conf.autoClear;\n\n if (conf.orbit_ctrl) {\n obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement);\n if (conf.orbit_ctrl instanceof Object) {\n Object.entries(conf.orbit_ctrl).forEach(([key, value]) => {\n obj.orbitCtrl[key] = value;\n });\n }\n }\n\n if (conf.resize) {\n onResize();\n window.addEventListener('resize', onResize);\n } else {\n setSize(conf.width | 300, conf.height | 150);\n }\n\n conf.mouse_move = conf.mouse_move || conf.mouse_over;\n if (conf.mouse_move) {\n if (conf.mouse_move === 'body') {\n obj.mouse_move_element = document.body;\n } else {\n obj.mouse_move_element = obj.renderer.domElement;\n }\n obj.mouse_move_element.addEventListener('mousemove', onMousemove);\n obj.mouse_move_element.addEventListener('mouseleave', onMouseleave);\n }\n\n if (conf.click) {\n obj.renderer.domElement.addEventListener('click', onClick);\n }\n\n afterInitCallbacks.forEach(c => c());\n\n return true;\n };\n\n /**\n * add after init callback\n */\n function onAfterInit(callback) {\n afterInitCallbacks.push(callback);\n }\n\n /**\n * add after resize callback\n */\n function onAfterResize(callback) {\n afterResizeCallbacks.push(callback);\n }\n\n /**\n * remove after resize callback\n */\n function offAfterResize(callback) {\n afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback);\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(callback) {\n beforeRenderCallbacks.push(callback);\n }\n\n /**\n * remove before render callback\n */\n function offBeforeRender(callback) {\n beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback);\n }\n\n /**\n * default render\n */\n function render() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.renderer.render(obj.scene, obj.camera);\n }\n\n /**\n * composer render\n */\n function renderC() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.composer.render();\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o);\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o) {\n const i = intersectObjects.indexOf(o);\n if (i !== -1) {\n intersectObjects.splice(i, 1);\n }\n }\n\n /**\n * remove listeners\n */\n function dispose() {\n beforeRenderCallbacks = [];\n window.removeEventListener('resize', onResize);\n if (obj.mouse_move_element) {\n obj.mouse_move_element.removeEventListener('mousemove', onMousemove);\n obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave);\n }\n obj.renderer.domElement.removeEventListener('click', onClick);\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\n this.renderer.dispose();\n }\n\n /**\n */\n function updateMouse(e) {\n const rect = e.target.getBoundingClientRect();\n mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1;\n mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1;\n }\n\n /**\n * click listener\n */\n function onClick(e) {\n updateMouse(e);\n raycaster.setFromCamera(mouse, obj.camera);\n const objects = raycaster.intersectObjects(intersectObjects);\n for (let i = 0; i < objects.length; i++) {\n const o = objects[i].object;\n if (o.onClick) o.onClick(e);\n }\n }\n\n /**\n * mousemove listener\n */\n function onMousemove(e) {\n updateMouse(e);\n onMousechange(e);\n }\n\n /**\n * mouseleave listener\n */\n function onMouseleave(e) {\n // mouse.x = 0;\n // mouse.y = 0;\n onMousechange(e);\n }\n\n /**\n * mouse change\n */\n function onMousechange(e) {\n if (conf.mouse_over || conf.mouse_raycast) {\n raycaster.setFromCamera(mouse, obj.camera);\n\n if (conf.mouse_raycast) {\n // get mouse 3d position\n obj.camera.getWorldDirection(mousePlane.normal);\n mousePlane.normal.normalize();\n raycaster.ray.intersectPlane(mousePlane, mouseV3);\n }\n\n if (conf.mouse_over) {\n const onObjects = raycaster.intersectObjects(intersectObjects);\n const offObjects = [...intersectObjects];\n for (let i = 0; i < onObjects.length; i++) {\n const o = onObjects[i].object;\n if (!o.hover && o.onHover) {\n o.hover = true;\n o.onHover(true);\n }\n offObjects.splice(offObjects.indexOf(o), 1);\n }\n for (let i = 0; i < offObjects.length; i++) {\n const o = offObjects[i];\n if (o.hover && o.onHover) {\n o.hover = false;\n o.onHover(false);\n }\n }\n }\n }\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (conf.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight);\n } else {\n const elt = obj.renderer.domElement.parentNode;\n setSize(elt.clientWidth, elt.clientHeight);\n }\n afterResizeCallbacks.forEach(c => c());\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width, height) {\n size.width = width;\n size.height = height;\n size.ratio = width / height;\n\n obj.renderer.setSize(width, height, false);\n obj.camera.aspect = size.ratio;\n obj.camera.updateProjectionMatrix();\n\n if (obj.composer) {\n obj.composer.setSize(width, height);\n }\n\n if (obj.camera.type === 'OrthographicCamera') {\n size.wWidth = obj.camera.right - obj.camera.left;\n size.wHeight = obj.camera.top - obj.camera.bottom;\n } else {\n const wsize = getCameraSize();\n size.wWidth = wsize[0]; size.wHeight = wsize[1];\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const vFOV = (obj.camera.fov * Math.PI) / 180;\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z);\n const w = h * obj.camera.aspect;\n return [w, h];\n }\n\n return obj;\n}\n","import { h } from 'vue';\nimport useThree from './useThree';\n\nexport default {\n name: 'Renderer',\n props: {\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n mouseMove: { type: [Boolean, String], default: false },\n mouseRaycast: { type: Boolean, default: false },\n mouseOver: { type: Boolean, default: false },\n click: { type: Boolean, default: false },\n orbitCtrl: { type: [Boolean, Object], default: false },\n resize: { type: [Boolean, String], default: false },\n shadow: Boolean,\n width: String,\n height: String,\n },\n setup() {\n return {\n three: useThree(),\n raf: true,\n onMountedCallbacks: [],\n };\n },\n provide() {\n return {\n three: this.three,\n // renderer: this.three.renderer,\n rendererComponent: this,\n };\n },\n mounted() {\n const params = {\n canvas: this.$el,\n antialias: this.antialias,\n alpha: this.alpha,\n autoClear: this.autoClear,\n orbit_ctrl: this.orbitCtrl,\n mouse_move: this.mouseMove,\n mouse_raycast: this.mouseRaycast,\n mouse_over: this.mouseOver,\n click: this.click,\n resize: this.resize,\n width: this.width,\n height: this.height,\n };\n\n if (this.three.init(params)) {\n this.renderer = this.three.renderer;\n this.renderer.shadowMap.enabled = this.shadow;\n if (this.three.composer) this.animateC();\n else this.animate();\n };\n\n this.onMountedCallbacks.forEach(c => c());\n },\n beforeUnmount() {\n this.raf = false;\n this.three.dispose();\n },\n methods: {\n onMounted(callback) {\n this.onMountedCallbacks.push(callback);\n },\n onBeforeRender(callback) {\n this.three.onBeforeRender(callback);\n },\n onAfterResize(callback) {\n this.three.onAfterResize(callback);\n },\n animate() {\n if (this.raf) requestAnimationFrame(this.animate);\n this.three.render();\n },\n animateC() {\n if (this.raf) requestAnimationFrame(this.animateC);\n this.three.renderC();\n },\n },\n render() {\n return h('canvas', {}, this.$slots.default());\n },\n __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\n// shader defaults\nexport const defaultVertexShader = `\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\nexport const defaultFragmentShader = `\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}`;\n","import { OrthographicCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'OrthographicCamera',\n};\n","import { PerspectiveCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'PerspectiveCamera',\n};\n","import { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n name: 'Object3D',\n inject: ['three', 'scene', 'rendererComponent'],\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 },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this._parent) this._parent.remove(this.o3d);\n },\n methods: {\n initObject3D(o3d) {\n this.o3d = 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 let parent = this.$parent;\n while (parent) {\n if (parent.add) {\n parent.add(this.o3d);\n this._parent = parent;\n break;\n }\n parent = parent.$parent;\n }\n if (!this._parent) console.error('Missing parent (Scene, Group...)');\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 { Group } from 'three';\nimport Object3D from './Object3D.js';\n\nexport default {\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 { Scene, Color } from 'three';\nimport { watch } from 'vue';\n\nexport default {\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 { watch } from 'vue';\n\nexport default {\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","import { BoxGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n methods: {\n createGeometry() {\n let w = this.width, h = this.height, d = this.depth;\n if (this.size) {\n w = this.size; h = this.size; d = this.size;\n }\n this.geometry = new BoxGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments);\n },\n },\n};\n","import { CircleGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { ConeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { CylinderGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { DodecahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { IcosahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { LatheGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n};\n","import { OctahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { PolyhedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n};\n","import { RingGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new RingGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { SphereGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n};\n","import { TetrahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { TorusGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n};\n","import { TorusKnotGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n 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 methods: {\n createGeometry() {\n this.geometry = new TorusKnotGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n};\n","import { Curve, TubeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radiusSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed);\n },\n },\n};\n","import { watch } from 'vue';\nimport Object3D from '../core/Object3D.js';\nimport { bindProp, setFromProp } from '../tools.js';\n\nexport default {\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.$parent.remove(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.$parent.add(this.light.target);\n },\n },\n __hmrId: 'Light',\n};\n","import { AmbientLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n created() {\n this.light = new AmbientLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'AmbientLight',\n};\n","import { DirectionalLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n target: Object,\n },\n created() {\n this.light = new DirectionalLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'DirectionalLight',\n};\n","import { HemisphereLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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 { PointLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n distance: {\n type: Number,\n default: 0,\n },\n decay: {\n type: Number,\n default: 1,\n },\n },\n created() {\n this.light = new PointLight(this.color, this.intensity, this.distance, this.decay);\n this.initLight();\n },\n __hmrId: 'PointLight',\n};\n","import { RectAreaLight } from 'three';\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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.$parent.add(this.lightHelper);\n }\n\n this.initLight();\n },\n unmounted() {\n if (this.lightHelper) this.$parent.remove(this.lightHelper);\n },\n __hmrId: 'RectAreaLight',\n};\n","import { SpotLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n angle: { 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 { watch } from 'vue';\nimport { FrontSide } from 'three';\n\nexport default {\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 { MeshBasicMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshLambertMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshMatcapMaterial, TextureLoader } from 'three';\n// import { watch } from 'vue';\nimport { propsValues, getMatcapUrl } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n props: {\n src: String,\n name: String,\n 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 { MeshPhongMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n reflectivity: { type: Number, default: 1 },\n shininess: { type: Number, default: 30 },\n specular: { type: [String, Number], default: 0x111111 },\n 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 { MeshStandardMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProp, bindProps, propsValues } from '../tools.js';\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 {\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 { MeshPhysicalMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport StandardMaterial from './StandardMaterial';\n\nexport default {\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 { ShaderMaterial } from 'three';\nimport { watch } from 'vue';\nimport { propsValues, defaultFragmentShader, defaultVertexShader } from '../tools.js';\n\nexport default {\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 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 [];\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 ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\n\nexport default {\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 { MeshToonMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, TextureLoader, UVMapping } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n id: { type: String, default: 'map' },\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 this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\n 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 this.material.setTexture(this.texture, this.id);\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() { return []; },\n};\n","import { CubeTextureLoader, CubeRefractionMapping } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n path: String,\n urls: {\n type: Array,\n default: ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n id: { type: String, default: 'envMap' },\n refraction: Boolean,\n // todo: remove ?\n refractionRatio: { type: Number, default: 0.98 },\n },\n created() {\n this.refreshTexture();\n watch(() => this.path, this.refreshTexture);\n watch(() => this.urls, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError);\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n if (this.refraction) {\n this.texture.mapping = CubeRefractionMapping;\n this.material.setProp('refractionRatio', this.refractionRatio);\n }\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() {\n return [];\n },\n};\n","import { watch } from 'vue';\nimport { Mesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n name: 'Mesh',\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n onHover: Function,\n onClick: Function,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n 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 Mesh(this.geometry, this.material);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n if (this.onHover) {\n this.mesh.onHover = (over) => { this.onHover({ component: this, over }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n if (this.onClick) {\n this.mesh.onClick = (e) => { this.onClick({ component: this, event: e }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n this.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 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 and material are not unmounted)\n if (this.geometry) this.geometry.dispose();\n if (this.material) this.material.dispose();\n },\n __hmrId: 'Mesh',\n};\n","import { BoxBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n if (this.size) {\n this.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\n } else {\n this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\n }\n },\n },\n __hmrId: 'Box',\n};\n","import { CircleBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Circle',\n};\n","import { ConeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cone',\n};\n","import { CylinderBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cylinder',\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Dodecahedron',\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Icosahedron',\n};\n","import { LatheBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['points', 'segments', 'phiStart', 'phiLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n __hmrId: 'Lathe',\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Octahedron',\n};\n","import { PlaneBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['width', 'height', 'widthSegments', 'heightSegments'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Plane',\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['vertices', 'indices', 'radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n __hmrId: 'Polyhedron',\n};\n","import { RingBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Ring',\n};\n","import { SphereBufferGeometry } from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: Number,\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n watch: {\n radius() { this.refreshGeometry(); },\n widthSegments() { this.refreshGeometry(); },\n heightSegments() { this.refreshGeometry(); },\n },\n created() {\n this.createGeometry();\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Sphere',\n};\n","import { TetrahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Tetrahedron',\n};\n","export default {\n text: String,\n fontSrc: String,\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String], default: false },\n};\n","import { FontLoader, TextBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport TextProps from './TextProps.js';\n\nexport default {\n extends: Mesh,\n props: {\n ...TextProps,\n },\n 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 TextBufferGeometry(this.text, {\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n });\n\n if (this.align === 'center') {\n this.geometry.center();\n }\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n __hmrId: 'Torus',\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n __hmrId: 'TorusKnot',\n};\n","import { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n path: Curve,\n points: Array,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n created() {\n this.createGeometry();\n const watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed'];\n watchProps.forEach(prop => {\n watch(() => this[prop], (v) => {\n this.refreshGeometry();\n });\n });\n watch(() => this.points, () => {\n updateTubeGeometryPoints(this.geometry, this.points);\n });\n },\n methods: {\n createGeometry() {\n let curve;\n if (this.points) {\n curve = new CatmullRomCurve3(this.points);\n } else if (this.path) {\n curve = this.path;\n } else {\n console.error('Missing path curve or points.');\n }\n this.geometry = new TubeGeometry(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed);\n },\n // update curve points (without using prop, faster)\n updateCurve(points) {\n updateTubeGeometryPoints(this.geometry, points);\n },\n },\n __hmrId: 'Tube',\n};\n\nfunction 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 {\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.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initGem();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.meshBack) this.$parent.remove(this.meshBack);\n if (this.materialBack) this.materialBack.dispose();\n },\n methods: {\n initGem() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.side = FrontSide;\n this.material.envMap = cubeRT.texture;\n this.material.envMapIntensity = 10;\n this.material.metalness = 0;\n this.material.roughness = 0;\n this.material.opacity = 0.75;\n this.material.transparent = true;\n this.material.premultipliedAlpha = true;\n this.material.needsUpdate = true;\n\n this.materialBack = this.material.clone();\n this.materialBack.side = BackSide;\n this.materialBack.envMapIntensity = 5;\n this.materialBack.metalness = 1;\n this.materialBack.roughness = 0;\n this.materialBack.opacity = 0.5;\n\n this.meshBack = new TMesh(this.geometry, this.materialBack);\n\n bindProp(this, 'position', this.meshBack);\n bindProp(this, 'rotation', this.meshBack);\n bindProp(this, 'scale', this.meshBack);\n this.$parent.add(this.meshBack);\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.meshBack.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n this.meshBack.visible = true;\n },\n },\n __hmrId: 'Gem',\n};\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry, TextureLoader } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: String,\n width: Number,\n height: Number,\n keepSize: Boolean,\n },\n created() {\n this.createGeometry();\n this.createMaterial();\n this.initMesh();\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], this.resize);\n });\n\n if (this.keepSize) this.three.onAfterResize(this.resize);\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(1, 1, 1, 1);\n },\n createMaterial() {\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\n },\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded);\n },\n refreshTexture() {\n if (this.texture) this.texture.dispose();\n this.material.map = this.loadTexture();\n this.material.needsUpdate = true;\n },\n onLoaded(texture) {\n this.texture = texture;\n this.resize();\n this.$emit('loaded');\n },\n resize() {\n if (!this.texture) return;\n const screen = this.three.size;\n const iW = this.texture.image.width;\n const iH = this.texture.image.height;\n const iRatio = iW / iH;\n let w, h;\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width;\n h = this.height * screen.wHeight / screen.height;\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width;\n h = w / iRatio;\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height;\n w = h * iRatio;\n }\n this.mesh.scale.x = w;\n this.mesh.scale.y = h;\n },\n },\n __hmrId: 'Image',\n};\n","import { watch } from 'vue';\nimport { InstancedMesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n count: Number,\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 created() {\n this.initMesh();\n },\n methods: {\n initMesh() {\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\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 if (this.mesh) this.mesh.material = material;\n },\n },\n __hmrId: 'InstancedMesh',\n};\n","import {\n CubeCamera,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'MirrorMesh',\n};\n","import {\n CubeCamera,\n CubeRefractionMapping,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n refractionRatio: { type: Number, default: 0.98 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.refractionRatio = this.refractionRatio;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'RefractionMesh',\n};\n","import { Sprite, SpriteMaterial, TextureLoader } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\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 { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', gltf);\r\n this.initObject3D(gltf.scene);\r\n });\r\n },\r\n};\r\n","import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', fbx);\r\n this.initObject3D(fbx);\r\n });\r\n },\r\n};\r\n","import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\n\nexport default {\n setup() {\n return {\n passes: [],\n };\n },\n inject: ['three'],\n provide() {\n return {\n passes: this.passes,\n };\n },\n mounted() {\n this.three.onAfterInit(() => {\n this.composer = new EffectComposer(this.three.renderer);\n this.three.renderer.autoClear = false;\n this.passes.forEach(pass => {\n this.composer.addPass(pass);\n });\n this.three.composer = this.composer;\n\n this.resize();\n this.three.onAfterResize(this.resize);\n });\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n this.composer.setSize(this.three.size.width, this.three.size.height);\n },\n },\n render() {\n return this.$slots.default();\n },\n __hmrId: 'EffectComposer',\n};\n","export default {\n inject: ['three', 'passes'],\n beforeMount() {\n if (!this.passes) {\n console.error('Missing parent EffectComposer');\n }\n },\n unmounted() {\n if (this.pass.dispose) this.pass.dispose();\n },\n render() {\n return [];\n },\n __hmrId: 'EffectPass',\n};\n","import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const pass = new RenderPass(this.three.scene, this.three.camera);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'RenderPass',\n};\n","import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n focus: {\n type: Number,\n default: 1,\n },\n aperture: {\n type: Number,\n default: 0.025,\n },\n maxblur: {\n type: Number,\n default: 0.01,\n },\n },\n watch: {\n focus() { this.pass.uniforms.focus.value = this.focus; },\n aperture() { this.pass.uniforms.aperture.value = this.aperture; },\n maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; },\n },\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.three.size.width,\n height: this.three.size.height,\n };\n const pass = new BokehPass(this.three.scene, this.three.camera, params);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'BokehPass',\n};\n","import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n noiseIntensity: {\n type: Number,\n default: 0.5,\n },\n scanlinesIntensity: {\n type: Number,\n default: 0.05,\n },\n scanlinesCount: {\n type: Number,\n default: 4096,\n },\n grayscale: {\n type: Number,\n default: 0,\n },\n },\n watch: {\n noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; },\n scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; },\n scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; },\n grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; },\n },\n mounted() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'FilmPass',\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n const pass = new ShaderPass(FXAAShader);\n this.passes.push(pass);\n this.pass = pass;\n\n // resize will be called in three init\n this.three.onAfterResize(this.resize);\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n const { resolution } = this.pass.material.uniforms;\n resolution.value.x = 1 / this.three.size.width;\n resolution.value.y = 1 / this.three.size.height;\n },\n },\n __hmrId: 'FXAAPass',\n};\n","import { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n },\n mounted() {\n const pass = new HalftonePass(this.three.size.width, this.three.size.height, {});\n\n ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => {\n pass.uniforms[p].value = this[p];\n watch(() => this[p], () => {\n pass.uniforms[p].value = this[p];\n });\n });\n\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'HalftonePass',\n};\n","import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n // three size is not set yet, but this pass will be resized by effect composer\n const pass = new SMAAPass(this.three.size.width, this.three.size.height);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'SMAAPass',\n};\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { Vector2 } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\nimport TiltShift from '../shaders/TiltShift.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object, default: { x: 0, y: 100 } },\n end: { type: Object, default: { x: 10, y: 100 } },\n },\n mounted() {\n this.pass = new ShaderPass(TiltShift);\n this.passes.push(this.pass);\n\n this.pass1 = new ShaderPass(TiltShift);\n this.passes.push(this.pass1);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n const uniforms1 = this.uniforms1 = this.pass1.uniforms;\n uniforms1.blurRadius = uniforms.blurRadius;\n uniforms1.gradientRadius = uniforms.gradientRadius;\n uniforms1.start = uniforms.start;\n uniforms1.end = uniforms.end;\n uniforms1.texSize = uniforms.texSize;\n\n 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 methods: {\n updateFocusLine() {\n this.uniforms.start.value.copy(this.start);\n this.uniforms.end.value.copy(this.end);\n const dv = new Vector2().copy(this.end).sub(this.start).normalize();\n this.uniforms.delta.value.copy(dv);\n this.uniforms1.delta.value.set(-dv.y, dv.x);\n },\n },\n __hmrId: 'TiltShiftPass',\n};\n","import { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n },\n watch: {\n strength() { this.pass.strength = this.strength; },\n radius() { this.pass.radius = this.radius; },\n threshold() { this.pass.threshold = this.threshold; },\n },\n mounted() {\n const size = new Vector2(this.three.size.width, this.three.size.height);\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'UnrealBloomPass',\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport ZoomBlur from '../shaders/ZoomBlur.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n center: { type: Object, default: { x: 0.5, y: 0.5 } },\n strength: { type: Number, default: 0.5 },\n },\n mounted() {\n this.pass = new ShaderPass(ZoomBlur);\n this.passes.push(this.pass);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n bindProp(this, 'center', uniforms.center, 'value');\n bindProp(this, 'strength', uniforms.strength, 'value');\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 '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 '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":["useThree","const","conf","canvas","antialias","alpha","autoClear","orbit_ctrl","mouse_move","mouse_raycast","mouse_over","click","resize","width","height","size","wWidth","wHeight","ratio","afterInitCallbacks","afterResizeCallbacks","beforeRenderCallbacks","mouse","Vector2","mouseV3","Vector3","mousePlane","Plane","raycaster","Raycaster","intersectObjects","obj","renderer","camera","cameraCtrl","materials","scene","params","Object","entries","forEach","key","value","console","error","WebGLRenderer","orbitCtrl","OrbitControls","domElement","onResize","window","addEventListener","setSize","mouse_move_element","document","body","onMousemove","onMouseleave","onClick","c","removeEventListener","dispose","this","update","render","composer","callback","push","filter","o","indexOf","i","splice","updateMouse","e","rect","target","getBoundingClientRect","x","clientX","left","y","clientY","top","setFromCamera","objects","length","object","onMousechange","getWorldDirection","normal","normalize","ray","intersectPlane","onObjects","offObjects","hover","onHover","let","innerWidth","innerHeight","elt","parentNode","clientWidth","clientHeight","aspect","updateProjectionMatrix","type","right","bottom","wsize","vFOV","fov","Math","PI","h","tan","abs","position","z","getCameraSize","name","props","Boolean","default","mouseMove","String","mouseRaycast","mouseOver","shadow","setup","three","raf","onMountedCallbacks","provide","rendererComponent","mounted","$el","init","shadowMap","enabled","animateC","animate","beforeUnmount","methods","onMounted","onBeforeRender","onAfterResize","requestAnimationFrame","renderC","$slots","__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","MATCAP_ROOT","defaultVertexShader","defaultFragmentShader","inject","Number","near","far","zoom","created","OrthographicCamera","p","lookAt","PerspectiveCamera","v","rotation","scale","unmounted","_parent","remove","o3d","initObject3D","parent","$parent","add","extends","Object3D","group","Group","id","background","Scene","Color","set","rotateX","rotateY","rotateZ","mesh","watchProps","$props","createGeometry","rotateGeometry","setGeometry","geometry","addWatchers","refreshGeometry","oldGeo","Geometry","depth","widthSegments","heightSegments","depthSegments","w","d","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","radiusSegments","closed","TubeGeometry","color","intensity","castShadow","shadowMapSize","shadowCamera","light","initLight","mapSize","Light","AmbientLight","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","setProp","needsUpdate","setTexture","texture","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","string","find","replace","meshphongFragHead","ShaderChunk","meshphong_frag","slice","meshphongFragBody","SubsurfaceScatteringShader","UniformsUtils","merge","ShaderLib","phong","thicknessColor","thicknessDistortion","thicknessAmbient","thicknessAttenuation","thicknessPower","thicknessScale","lights_fragment_begin","split","join","clone","_key","_value","TShaderMaterial","lights","MeshToonMaterial","emits","onLoad","Function","onProgress","onError","mapping","UVMapping","wrapS","ClampToEdgeWrapping","wrapT","magFilter","LinearFilter","minFilter","LinearMipmapLinearFilter","repeat","center","refreshTexture","createTexture","onLoaded","$emit","urls","refraction","CubeTextureLoader","setPath","CubeRefractionMapping","receiveShadow","loading","initMesh","Mesh","over","component","addIntersectObject","event","removeIntersectObject","BoxBufferGeometry","CircleBufferGeometry","ConeBufferGeometry","CylinderBufferGeometry","DodecahedronBufferGeometry","IcosahedronBufferGeometry","LatheBufferGeometry","OctahedronBufferGeometry","PlaneBufferGeometry","PolyhedronBufferGeometry","RingBufferGeometry","SphereBufferGeometry","TetrahedronBufferGeometry","text","fontSrc","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align","TextProps","data","font","FontLoader","TextBufferGeometry","TorusBufferGeometry","TorusKnotBufferGeometry","updateTubeGeometryPoints","curve","CatmullRomCurve3","updateCurve","parameters","frames","computeFrenetFrames","tangents","normals","binormals","P","pArray","attributes","array","nArray","updateSegment","getPointAt","N","B","j","sin","cos","index","cubeRTSize","cubeCameraNear","cubeCameraFar","autoUpdate","initGem","updateCubeRT","offBeforeRender","meshBack","materialBack","cubeRT","WebGLCubeRenderTarget","RGBFormat","generateMipmaps","cubeCamera","CubeCamera","envMap","premultipliedAlpha","BackSide","TMesh","visible","keepSize","DoubleSide","map","loadTexture","screen","iRatio","image","count","beforeMount","InstancedMesh","initMirrorMesh","SpriteMaterial","sprite","Sprite","updateUV","iWidth","iHeight","positions","GLTFLoader","gltf","FBXLoader","fbx","passes","onAfterInit","EffectComposer","pass","addPass","offAfterResize","EffectPass","RenderPass","focus","aperture","maxblur","BokehPass","noiseIntensity","scanlinesIntensity","scanlinesCount","grayscale","nIntensity","sIntensity","sCount","FilmPass","ShaderPass","FXAAShader","resolution","shape","rotateR","rotateG","rotateB","scatter","HalftonePass","SMAAPass","tDiffuse","blurRadius","gradientRadius","start","end","delta","texSize","DefaultShader","TiltShift","pass1","uniforms1","updateFocusLine","copy","dv","sub","strength","threshold","UnrealBloomPass","ZoomBlur","TroisJSVuePlugin","install","app","comp","TROIS","createApp","_createApp","use"],"mappings":"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"} \ No newline at end of file +{"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 ',\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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"} \ No newline at end of file diff --git a/build/trois.module.js b/build/trois.module.js index 6e56aeb..cae5669 100644 --- a/build/trois.module.js +++ b/build/trois.module.js @@ -1,5 +1,6 @@ -import { h, toRef, watch, createApp as createApp$1 } from 'vue'; -import { Vector2, Vector3, Plane as Plane$1, Raycaster, WebGLRenderer, OrthographicCamera as OrthographicCamera$1, PerspectiveCamera as PerspectiveCamera$1, Group as Group$1, Scene as Scene$1, Color, BoxGeometry as BoxGeometry$1, CircleGeometry as CircleGeometry$1, ConeGeometry as ConeGeometry$1, CylinderGeometry as CylinderGeometry$1, DodecahedronGeometry as DodecahedronGeometry$1, IcosahedronGeometry as IcosahedronGeometry$1, LatheGeometry as LatheGeometry$1, OctahedronGeometry as OctahedronGeometry$1, PolyhedronGeometry as PolyhedronGeometry$1, RingGeometry as RingGeometry$1, SphereGeometry as SphereGeometry$1, TetrahedronGeometry as TetrahedronGeometry$1, TorusGeometry as TorusGeometry$1, TorusKnotGeometry as TorusKnotGeometry$1, Curve, TubeGeometry as TubeGeometry$1, AmbientLight as AmbientLight$1, DirectionalLight as DirectionalLight$1, HemisphereLight as HemisphereLight$1, PointLight as PointLight$1, RectAreaLight as RectAreaLight$1, SpotLight as SpotLight$1, FrontSide, MeshBasicMaterial, MeshLambertMaterial, TextureLoader, MeshMatcapMaterial, MeshPhongMaterial, MeshStandardMaterial, MeshPhysicalMaterial, ShaderMaterial as ShaderMaterial$1, ShaderChunk, UniformsUtils, ShaderLib, MeshToonMaterial, UVMapping, ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, CubeTextureLoader, CubeRefractionMapping, Mesh as Mesh$1, BoxBufferGeometry, CircleBufferGeometry, ConeBufferGeometry, CylinderBufferGeometry, DodecahedronBufferGeometry, IcosahedronBufferGeometry, LatheBufferGeometry, OctahedronBufferGeometry, PlaneBufferGeometry, PolyhedronBufferGeometry, RingBufferGeometry, SphereBufferGeometry, TetrahedronBufferGeometry, FontLoader, TextBufferGeometry, TorusBufferGeometry, TorusKnotBufferGeometry, CatmullRomCurve3, WebGLCubeRenderTarget, RGBFormat, CubeCamera, BackSide, DoubleSide, InstancedMesh as InstancedMesh$1, SpriteMaterial, Sprite as Sprite$1 } from 'three'; +import { defineComponent, h, toRef, watch, createApp as createApp$1 } from 'vue'; +import { VRButton } from 'three/examples/jsm/webxr/VRButton.js'; +import { Vector3, Raycaster as Raycaster$1, Plane as Plane$1, Vector2, InstancedMesh as InstancedMesh$1, WebGLRenderer, OrthographicCamera as OrthographicCamera$1, PerspectiveCamera as PerspectiveCamera$1, Group as Group$1, Scene as Scene$1, Color, BoxGeometry as BoxGeometry$1, CircleGeometry as CircleGeometry$1, ConeGeometry as ConeGeometry$1, CylinderGeometry as CylinderGeometry$1, DodecahedronGeometry as DodecahedronGeometry$1, IcosahedronGeometry as IcosahedronGeometry$1, LatheGeometry as LatheGeometry$1, OctahedronGeometry as OctahedronGeometry$1, PolyhedronGeometry as PolyhedronGeometry$1, RingGeometry as RingGeometry$1, SphereGeometry as SphereGeometry$1, TetrahedronGeometry as TetrahedronGeometry$1, TorusGeometry as TorusGeometry$1, TorusKnotGeometry as TorusKnotGeometry$1, TubeGeometry as TubeGeometry$1, Curve, CatmullRomCurve3, AmbientLight as AmbientLight$1, DirectionalLight as DirectionalLight$1, HemisphereLight as HemisphereLight$1, PointLight as PointLight$1, RectAreaLight as RectAreaLight$1, SpotLight as SpotLight$1, FrontSide, MeshBasicMaterial, MeshLambertMaterial, TextureLoader, MeshMatcapMaterial, MeshPhongMaterial, MeshStandardMaterial, MeshPhysicalMaterial, ShaderMaterial as ShaderMaterial$1, ShaderChunk, UniformsUtils, ShaderLib, MeshToonMaterial, UVMapping, ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, CubeTextureLoader, CubeRefractionMapping, Mesh as Mesh$1, PlaneGeometry, FontLoader, TextGeometry, WebGLCubeRenderTarget, RGBFormat, CubeCamera, BackSide, DoubleSide, SpriteMaterial, Sprite as Sprite$1 } from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; import { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js'; import { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js'; @@ -13,68 +14,250 @@ import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'; import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'; import { HalftonePass as HalftonePass$1 } from 'three/examples/jsm/postprocessing/HalftonePass.js'; import { SMAAPass as SMAAPass$1 } from 'three/examples/jsm/postprocessing/SMAAPass.js'; +import { SSAOPass as SSAOPass$1 } from 'three/examples/jsm/postprocessing/SSAOPass.js'; import { UnrealBloomPass as UnrealBloomPass$1 } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'; +function useRaycaster(options) { + const { + camera, + resetPosition = new Vector3(0, 0, 0), + } = options; + + const raycaster = new Raycaster$1(); + const position = resetPosition.clone(); + const plane = new Plane$1(new Vector3(0, 0, 1), 0); + + const updatePosition = (coords) => { + raycaster.setFromCamera(coords, camera); + camera.getWorldDirection(plane.normal); + raycaster.ray.intersectPlane(plane, position); + }; + + const intersect = (coords, objects) => { + raycaster.setFromCamera(coords, camera); + return raycaster.intersectObjects(objects); + }; + + return { + position, + updatePosition, + intersect, + }; +} + +function usePointer(options) { + const { + camera, + domElement, + intersectObjects, + touch = true, + resetOnEnd = false, + resetPosition = new Vector2(0, 0), + resetPositionV3 = new Vector3(0, 0, 0), + onEnter = () => {}, + onMove = () => {}, + onLeave = () => {}, + onIntersectEnter = () => {}, + onIntersectOver = () => {}, + onIntersectMove = () => {}, + onIntersectLeave = () => {}, + onIntersectClick = () => {}, + } = options; + + const position = resetPosition.clone(); + const positionN = new Vector2(0, 0); + + const raycaster = useRaycaster({ camera }); + const positionV3 = raycaster.position; + + const obj = { + position, + positionN, + positionV3, + intersectObjects, + listeners: false, + addListeners, + removeListeners, + intersect, + }; + + return obj; + + function reset() { + position.copy(resetPosition); + positionV3.copy(resetPositionV3); + } + function updatePosition(event) { + let x, y; + if (event.touches && event.touches.length > 0) { + x = event.touches[0].clientX; + y = event.touches[0].clientY; + } else { + x = event.clientX; + y = event.clientY; + } + + const rect = domElement.getBoundingClientRect(); + position.x = x - rect.left; + position.y = y - rect.top; + positionN.x = (position.x / rect.width) * 2 - 1; + positionN.y = -(position.y / rect.height) * 2 + 1; + raycaster.updatePosition(positionN); + } + function intersect() { + if (intersectObjects.length) { + const intersects = raycaster.intersect(positionN, intersectObjects); + const offObjects = [...intersectObjects]; + const iMeshes = []; + + intersects.forEach(intersect => { + const { object } = intersect; + const { component } = object; + + // only once for InstancedMesh + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) return; + iMeshes.push(object); + } + + if (!object.over) { + object.over = true; + const overEvent = { type: 'pointerover', over: true, component, intersect }; + const enterEvent = { ...overEvent, type: 'pointerenter' }; + onIntersectOver(overEvent); + onIntersectEnter(enterEvent); + component.onPointerOver?.(overEvent); + component.onPointerEnter?.(enterEvent); + } + + const moveEvent = { type: 'pointermove', component, intersect }; + onIntersectMove(moveEvent); + component.onPointerMove?.(moveEvent); + + offObjects.splice(offObjects.indexOf(object), 1); + }); + + offObjects.forEach(object => { + const { component } = object; + if (object.over) { + object.over = false; + const overEvent = { type: 'pointerover', over: false, component }; + const leaveEvent = { ...overEvent, type: 'pointerleave' }; + onIntersectOver(overEvent); + onIntersectLeave(leaveEvent); + component.onPointerOver?.(overEvent); + component.onPointerLeave?.(leaveEvent); + } + }); + } + } + function pointerEnter(event) { + updatePosition(event); + onEnter({ type: 'pointerenter', position, positionN, positionV3 }); + } + function pointerMove(event) { + updatePosition(event); + onMove({ type: 'pointermove', position, positionN, positionV3 }); + intersect(); + } + function pointerClick(event) { + updatePosition(event); + if (intersectObjects.length) { + const intersects = raycaster.intersect(positionN, intersectObjects); + const iMeshes = []; + intersects.forEach(intersect => { + const { object } = intersect; + const { component } = object; + + // only once for InstancedMesh + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) return; + iMeshes.push(object); + } + + const event = { type: 'click', component, intersect }; + onIntersectClick(event); + component.onClick?.(event); + }); + } + } + function pointerLeave() { + if (resetOnEnd) reset(); + onLeave({ type: 'pointerleave' }); + } + function addListeners() { + domElement.addEventListener('mouseenter', pointerEnter); + domElement.addEventListener('mousemove', pointerMove); + domElement.addEventListener('mouseleave', pointerLeave); + domElement.addEventListener('click', pointerClick); + if (touch) { + domElement.addEventListener('touchstart', pointerEnter); + domElement.addEventListener('touchmove', pointerMove); + domElement.addEventListener('touchend', pointerLeave); + } + obj.listeners = true; + } + function removeListeners() { + domElement.removeEventListener('mouseenter', pointerEnter); + domElement.removeEventListener('mousemove', pointerMove); + domElement.removeEventListener('mouseleave', pointerLeave); + domElement.removeEventListener('click', pointerClick); + + domElement.removeEventListener('touchstart', pointerEnter); + domElement.removeEventListener('touchmove', pointerMove); + domElement.removeEventListener('touchend', pointerLeave); + obj.listeners = false; + }} + /** * Three.js helper */ function useThree() { // default conf - var conf = { + const conf = { canvas: null, antialias: true, alpha: false, autoClear: true, orbit_ctrl: false, - mouse_move: false, - mouse_raycast: false, - mouse_over: false, - click: false, - resize: true, - width: 0, - height: 0, + pointer: false, + resize: false, + width: 300, + height: 150, }; // size - var size = { + const size = { width: 1, height: 1, wWidth: 1, wHeight: 1, ratio: 1, }; // handlers - var afterInitCallbacks = []; - var afterResizeCallbacks = []; - var beforeRenderCallbacks = []; + const afterInitCallbacks = []; + let afterResizeCallbacks = []; + let beforeRenderCallbacks = []; - // mouse tracking - var mouse = new Vector2(); - var mouseV3 = new Vector3(); - var mousePlane = new Plane$1(new Vector3(0, 0, 1), 0); - var raycaster = new Raycaster(); - - // raycast objects - var intersectObjects = []; + const intersectObjects = []; // returned object - var obj = { - conf: conf, + const obj = { + conf, renderer: null, camera: null, cameraCtrl: null, - materials: {}, scene: null, - size: size, - mouse: mouse, mouseV3: mouseV3, - init: init, - dispose: dispose, - render: render, - renderC: renderC, - setSize: setSize, - onAfterInit: onAfterInit, - onAfterResize: onAfterResize, offAfterResize: offAfterResize, - onBeforeRender: onBeforeRender, offBeforeRender: offBeforeRender, - addIntersectObject: addIntersectObject, removeIntersectObject: removeIntersectObject, + pointer: null, + size, + init, + dispose, + render, + renderC, + setSize, + onAfterInit, + onAfterResize, offAfterResize, + onBeforeRender, offBeforeRender, + addIntersectObject, removeIntersectObject, }; /** @@ -82,10 +265,7 @@ function useThree() { */ function init(params) { if (params) { - Object.entries(params).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(params).forEach(([key, value]) => { conf[key] = value; }); } @@ -103,44 +283,50 @@ function useThree() { obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha }); obj.renderer.autoClear = conf.autoClear; + if (conf.resize) { + onResize(); + window.addEventListener('resize', onResize); + } else { + setSize(conf.width, conf.height); + } + + initPointer(); + if (conf.orbit_ctrl) { obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement); if (conf.orbit_ctrl instanceof Object) { - Object.entries(conf.orbit_ctrl).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(conf.orbit_ctrl).forEach(([key, value]) => { obj.orbitCtrl[key] = value; }); } } - if (conf.resize) { - onResize(); - window.addEventListener('resize', onResize); - } else { - setSize(conf.width | 300, conf.height | 150); - } + afterInitCallbacks.forEach(c => c()); - conf.mouse_move = conf.mouse_move || conf.mouse_over; - if (conf.mouse_move) { - if (conf.mouse_move === 'body') { - obj.mouse_move_element = document.body; - } else { - obj.mouse_move_element = obj.renderer.domElement; - } - obj.mouse_move_element.addEventListener('mousemove', onMousemove); - obj.mouse_move_element.addEventListener('mouseleave', onMouseleave); - } + return true; + } + function initPointer() { + let pointerConf = { + camera: obj.camera, + domElement: obj.renderer.domElement, + intersectObjects, + }; - if (conf.click) { - obj.renderer.domElement.addEventListener('click', onClick); + if (conf.pointer && conf.pointer instanceof Object) { + pointerConf = { ...pointerConf, ...conf.pointer }; } - afterInitCallbacks.forEach(function (c) { return c(); }); - - return true; + obj.pointer = usePointer(pointerConf); + if (conf.pointer || intersectObjects.length) { + obj.pointer.addListeners(); + if (conf.pointer.intersectMode === 'frame') { + onBeforeRender(() => { + obj.pointer.intersect(); + }); + } + } } + /** * add after init callback */ @@ -159,7 +345,7 @@ function useThree() { * remove after resize callback */ function offAfterResize(callback) { - afterResizeCallbacks = afterResizeCallbacks.filter(function (c) { return c !== callback; }); + afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback); } /** @@ -173,15 +359,15 @@ function useThree() { * remove before render callback */ function offBeforeRender(callback) { - beforeRenderCallbacks = beforeRenderCallbacks.filter(function (c) { return c !== callback; }); + beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback); } /** * default render */ function render() { - if (obj.orbitCtrl) { obj.orbitCtrl.update(); } - beforeRenderCallbacks.forEach(function (c) { return c(); }); + if (obj.orbitCtrl) obj.orbitCtrl.update(); + beforeRenderCallbacks.forEach(c => c()); obj.renderer.render(obj.scene, obj.camera); } @@ -189,8 +375,8 @@ function useThree() { * composer render */ function renderC() { - if (obj.orbitCtrl) { obj.orbitCtrl.update(); } - beforeRenderCallbacks.forEach(function (c) { return c(); }); + if (obj.orbitCtrl) obj.orbitCtrl.update(); + beforeRenderCallbacks.forEach(c => c()); obj.composer.render(); } @@ -201,105 +387,35 @@ function useThree() { if (intersectObjects.indexOf(o) === -1) { intersectObjects.push(o); } + // add listeners if needed + if (obj.pointer && !obj.pointer.listeners) { + obj.pointer.addListeners(); + } } /** * remove intersect object */ function removeIntersectObject(o) { - var i = intersectObjects.indexOf(o); + const i = intersectObjects.indexOf(o); if (i !== -1) { intersectObjects.splice(i, 1); } + // remove listeners if needed + if (obj.pointer && !conf.pointer && intersectObjects.length === 0) { + obj.pointer.removeListeners(); + } } /** - * remove listeners + * remove listeners and dispose */ function dispose() { beforeRenderCallbacks = []; window.removeEventListener('resize', onResize); - if (obj.mouse_move_element) { - obj.mouse_move_element.removeEventListener('mousemove', onMousemove); - obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave); - } - obj.renderer.domElement.removeEventListener('click', onClick); - if (obj.orbitCtrl) { obj.orbitCtrl.dispose(); } - this.renderer.dispose(); - } - - /** - */ - function updateMouse(e) { - var rect = e.target.getBoundingClientRect(); - mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1; - mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1; - } - - /** - * click listener - */ - function onClick(e) { - updateMouse(e); - raycaster.setFromCamera(mouse, obj.camera); - var objects = raycaster.intersectObjects(intersectObjects); - for (var i = 0; i < objects.length; i++) { - var o = objects[i].object; - if (o.onClick) { o.onClick(e); } - } - } - - /** - * mousemove listener - */ - function onMousemove(e) { - updateMouse(e); - onMousechange(); - } - - /** - * mouseleave listener - */ - function onMouseleave(e) { - // mouse.x = 0; - // mouse.y = 0; - onMousechange(); - } - - /** - * mouse change - */ - function onMousechange(e) { - if (conf.mouse_over || conf.mouse_raycast) { - raycaster.setFromCamera(mouse, obj.camera); - - if (conf.mouse_raycast) { - // get mouse 3d position - obj.camera.getWorldDirection(mousePlane.normal); - mousePlane.normal.normalize(); - raycaster.ray.intersectPlane(mousePlane, mouseV3); - } - - if (conf.mouse_over) { - var onObjects = raycaster.intersectObjects(intersectObjects); - var offObjects = [].concat( intersectObjects ); - for (var i = 0; i < onObjects.length; i++) { - var o = onObjects[i].object; - if (!o.hover && o.onHover) { - o.hover = true; - o.onHover(true); - } - offObjects.splice(offObjects.indexOf(o), 1); - } - for (var i$1 = 0; i$1 < offObjects.length; i$1++) { - var o$1 = offObjects[i$1]; - if (o$1.hover && o$1.onHover) { - o$1.hover = false; - o$1.onHover(false); - } - } - } - } + if (obj.pointer) obj.pointer.removeListeners(); + if (obj.orbitCtrl) obj.orbitCtrl.dispose(); + obj.renderer.dispose(); } /** @@ -309,10 +425,10 @@ function useThree() { if (conf.resize === 'window') { setSize(window.innerWidth, window.innerHeight); } else { - var elt = obj.renderer.domElement.parentNode; + const elt = obj.renderer.domElement.parentNode; setSize(elt.clientWidth, elt.clientHeight); } - afterResizeCallbacks.forEach(function (c) { return c(); }); + afterResizeCallbacks.forEach(c => c()); } /** @@ -335,7 +451,7 @@ function useThree() { size.wWidth = obj.camera.right - obj.camera.left; size.wHeight = obj.camera.top - obj.camera.bottom; } else { - var wsize = getCameraSize(); + const wsize = getCameraSize(); size.wWidth = wsize[0]; size.wHeight = wsize[1]; } } @@ -344,56 +460,51 @@ function useThree() { * calculate camera visible area size */ function getCameraSize() { - var vFOV = (obj.camera.fov * Math.PI) / 180; - var h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z); - var w = h * obj.camera.aspect; + const vFOV = (obj.camera.fov * Math.PI) / 180; + const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z); + const w = h * obj.camera.aspect; return [w, h]; } return obj; } -var Renderer = { +var Renderer = defineComponent({ name: 'Renderer', props: { antialias: Boolean, alpha: Boolean, autoClear: { type: Boolean, default: true }, - mouseMove: { type: [Boolean, String], default: false }, - mouseRaycast: { type: Boolean, default: false }, - mouseOver: { type: Boolean, default: false }, - click: { type: Boolean, default: false }, orbitCtrl: { type: [Boolean, Object], default: false }, + pointer: { type: [Boolean, Object], default: false }, resize: { type: [Boolean, String], default: false }, shadow: Boolean, width: String, height: String, + xr: Boolean, }, - setup: function setup() { + setup() { return { three: useThree(), raf: true, onMountedCallbacks: [], }; }, - provide: function provide() { + provide() { return { three: this.three, // renderer: this.three.renderer, rendererComponent: this, }; }, - mounted: function mounted() { - var params = { + mounted() { + const params = { canvas: this.$el, antialias: this.antialias, alpha: this.alpha, autoClear: this.autoClear, orbit_ctrl: this.orbitCtrl, - mouse_move: this.mouseMove, - mouse_raycast: this.mouseRaycast, - mouse_over: this.mouseOver, - click: this.click, + pointer: this.pointer, resize: this.resize, width: this.width, height: this.height, @@ -402,72 +513,77 @@ var Renderer = { if (this.three.init(params)) { this.renderer = this.three.renderer; this.renderer.shadowMap.enabled = this.shadow; - if (this.three.composer) { this.animateC(); } - else { this.animate(); } + + if (this.xr) { + this.vrButton = VRButton.createButton(this.renderer); + this.renderer.domElement.parentNode.appendChild(this.vrButton); + this.renderer.xr.enabled = true; + if (this.three.composer) this.renderer.setAnimationLoop(this.animateXRC); + else this.renderer.setAnimationLoop(this.animateXR); + } else { + if (this.three.composer) this.animateC(); + else this.animate(); + } } - this.onMountedCallbacks.forEach(function (c) { return c(); }); + this.onMountedCallbacks.forEach(c => c()); }, - beforeUnmount: function beforeUnmount() { + beforeUnmount() { this.raf = false; this.three.dispose(); }, methods: { - onMounted: function onMounted(callback) { + onMounted(callback) { this.onMountedCallbacks.push(callback); }, - onBeforeRender: function onBeforeRender(callback) { + onBeforeRender(callback) { this.three.onBeforeRender(callback); }, - onAfterResize: function onAfterResize(callback) { + onAfterResize(callback) { this.three.onAfterResize(callback); }, - animate: function animate() { - if (this.raf) { requestAnimationFrame(this.animate); } + animate() { + if (this.raf) requestAnimationFrame(this.animate); this.three.render(); }, - animateC: function animateC() { - if (this.raf) { requestAnimationFrame(this.animateC); } + animateC() { + if (this.raf) requestAnimationFrame(this.animateC); this.three.renderC(); }, + animateXR() { this.three.render(); }, + animateXRC() { this.three.renderC(); }, }, - render: function render() { + render() { return h('canvas', {}, this.$slots.default()); }, __hmrId: 'Renderer', -}; +}); function setFromProp(o, prop) { if (prop instanceof Object) { - Object.entries(prop).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + Object.entries(prop).forEach(([key, value]) => { o[key] = value; }); } } function bindProps(src, props, dst) { - props.forEach(function (prop) { + props.forEach(prop => { bindProp(src, prop, dst); }); } function bindProp(src, srcProp, dst, dstProp) { - if (!dstProp) { dstProp = srcProp; } - var ref = toRef(src, srcProp); + if (!dstProp) dstProp = srcProp; + const ref = toRef(src, srcProp); if (ref.value instanceof Object) { setFromProp(dst[dstProp], ref.value); - watch(ref, function (value) { setFromProp(dst[dstProp], value); }, { deep: true }); + watch(ref, (value) => { setFromProp(dst[dstProp], value); }, { deep: true }); } else { - if (ref.value) { dst[dstProp] = src[srcProp]; } - watch(ref, function (value) { dst[dstProp] = value; }); + if (ref.value) dst[dstProp] = src[srcProp]; + watch(ref, (value) => { dst[dstProp] = value; }); } } function propsValues(props, exclude) { - var values = {}; - Object.entries(props).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; - + const values = {}; + Object.entries(props).forEach(([key, value]) => { if (!exclude || (exclude && !exclude.includes(key))) { values[key] = value; } @@ -492,13 +608,11 @@ function limit(val, min, max) { return val < min ? min : (val > max ? max : val); } // from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx -var MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'; +const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'; -function getMatcapUrl(hash, format) { - if ( format === void 0 ) format = 1024; - - var fileName = "" + hash + (getMatcapFormatString(format)) + ".png"; - return (MATCAP_ROOT + "/" + format + "/" + fileName); +function getMatcapUrl(hash, format = 1024) { + const fileName = `${hash}${getMatcapFormatString(format)}.png`; + return `${MATCAP_ROOT}/${format}/${fileName}`; } function getMatcapFormatString(format) { switch (format) { @@ -515,12 +629,20 @@ function getMatcapFormatString(format) { } } -// shader defaults -var defaultVertexShader = "\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}"; +// import Object3D from '../core/Object3D.js'; -var defaultFragmentShader = "\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}"; +var Camera = defineComponent({ + // TODO: eventually extend Object3D, for now: error 'injection "scene" not found' + // because camera is a sibling of scene in Trois + // extends: Object3D, + inject: ['three'], + render() { + return this.$slots.default ? this.$slots.default() : []; + }, +}); -var OrthographicCamera = { +var OrthographicCamera = defineComponent({ + extends: Camera, name: 'OrthographicCamera', inject: ['three'], props: { @@ -533,26 +655,24 @@ var OrthographicCamera = { zoom: { type: Number, default: 1 }, position: { type: Object, default: { x: 0, y: 0, z: 0 } }, }, - created: function created() { - var this$1 = this; - + created() { this.camera = new OrthographicCamera$1(this.left, this.right, this.top, this.bottom, this.near, this.far); bindProp(this, 'position', this.camera); - ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.camera[p] = this$1[p]; - this$1.camera.updateProjectionMatrix(); + ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => { + watch(() => this[p], () => { + this.camera[p] = this[p]; + this.camera.updateProjectionMatrix(); }); }); this.three.camera = this.camera; }, - render: function render() { return []; }, __hmrId: 'OrthographicCamera', -}; +}); -var PerspectiveCamera = { +var PerspectiveCamera = defineComponent({ + extends: Camera, name: 'PerspectiveCamera', inject: ['three'], props: { @@ -563,135 +683,195 @@ var PerspectiveCamera = { position: { type: Object, default: { x: 0, y: 0, z: 0 } }, lookAt: { type: Object, default: null }, }, - created: function created() { - var this$1 = this; - + created() { this.camera = new PerspectiveCamera$1(this.fov, this.aspect, this.near, this.far); bindProp(this, 'position', this.camera); - if (this.lookAt) { this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); } - watch(function () { return this$1.lookAt; }, function (v) { this$1.camera.lookAt(v.x, v.y, v.z); }, { deep: true }); + if (this.lookAt) this.camera.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); + watch(() => this.lookAt, (v) => { this.camera.lookAt(v.x, v.y, v.z); }, { deep: true }); - ['aspect', 'far', 'fov', 'near'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.camera[p] = this$1[p]; - this$1.camera.updateProjectionMatrix(); + ['aspect', 'far', 'fov', 'near'].forEach(p => { + watch(() => this[p], () => { + this.camera[p] = this[p]; + this.camera.updateProjectionMatrix(); }); }); this.three.camera = this.camera; }, - render: function render() { return []; }, __hmrId: 'PerspectiveCamera', -}; +}); -var Object3D = { +var Object3D = defineComponent({ name: 'Object3D', inject: ['three', 'scene', 'rendererComponent'], + emits: ['created', 'ready'], props: { position: { type: Object, default: { x: 0, y: 0, z: 0 } }, rotation: { type: Object, default: { x: 0, y: 0, z: 0 } }, scale: { type: Object, default: { x: 1, y: 1, z: 1 } }, lookAt: { type: Object, default: null }, + autoRemove: { type: Boolean, default: true }, }, // can't use setup because it will not be used in sub components // setup() {}, - unmounted: function unmounted() { - if (this._parent) { this._parent.remove(this.o3d); } + unmounted() { + if (this.autoRemove) this.removeFromParent(); }, methods: { - initObject3D: function initObject3D(o3d) { - var this$1 = this; - + initObject3D(o3d) { this.o3d = o3d; + this.$emit('created', this.o3d); bindProp(this, 'position', this.o3d); bindProp(this, 'rotation', this.o3d); bindProp(this, 'scale', this.o3d); // TODO : fix lookat.x - if (this.lookAt) { this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); } - watch(function () { return this$1.lookAt; }, function (v) { this$1.o3d.lookAt(v.x, v.y, v.z); }, { deep: true }); + if (this.lookAt) this.o3d.lookAt(this.lookAt.x, this.lookAt.y, this.lookAt.z); + watch(() => this.lookAt, (v) => { this.o3d.lookAt(v.x, v.y, v.z); }, { deep: true }); - var parent = this.$parent; + this._parent = this.getParent(); + if (this.addToParent()) this.$emit('ready', this); + else console.error('Missing parent (Scene, Group...)'); + }, + getParent() { + let parent = this.$parent; while (parent) { - if (parent.add) { - parent.add(this.o3d); - this._parent = parent; - break; - } + if (parent.add) return parent; parent = parent.$parent; } - if (!this._parent) { console.error('Missing parent (Scene, Group...)'); } + return false; + }, + addToParent(o) { + const o3d = o || this.o3d; + if (this._parent) { + this._parent.add(o3d); + return true; + } + return false; }, - add: function add(o) { this.o3d.add(o); }, - remove: function remove(o) { this.o3d.remove(o); }, + removeFromParent(o) { + const o3d = o || this.o3d; + if (this._parent) { + this._parent.remove(o3d); + return true; + } + return false; + }, + add(o) { this.o3d.add(o); }, + remove(o) { this.o3d.remove(o); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Object3D', -}; +}); -var Group = { +var Group = defineComponent({ name: 'Group', extends: Object3D, - created: function created() { + created() { this.group = new Group$1(); this.initObject3D(this.group); }, __hmrId: 'Group', -}; +}); -var Scene = { +var Scene = defineComponent({ name: 'Scene', inject: ['three'], props: { id: String, background: [String, Number], }, - setup: function setup(props) { - var scene = new Scene$1(); - if (props.background) { scene.background = new Color(props.background); } - watch(function () { return props.background; }, function (value) { scene.background.set(value); }); - return { scene: scene }; + setup(props) { + const scene = new Scene$1(); + if (props.background) scene.background = new Color(props.background); + watch(() => props.background, (value) => { scene.background.set(value); }); + return { scene }; }, - provide: function provide() { + provide() { return { scene: this.scene, }; }, - mounted: function mounted() { + mounted() { if (!this.three.scene) { this.three.scene = this.scene; } }, methods: { - add: function add(o) { this.scene.add(o); }, - remove: function remove(o) { this.scene.remove(o); }, + add(o) { this.scene.add(o); }, + remove(o) { this.scene.remove(o); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Scene', -}; +}); + +var Raycaster = defineComponent({ + name: 'Raycaster', + inject: ['three', 'rendererComponent'], + props: { + onPointerEnter: { type: Function, default: () => {} }, + onPointerOver: { type: Function, default: () => {} }, + onPointerMove: { type: Function, default: () => {} }, + onPointerLeave: { type: Function, default: () => {} }, + onClick: { type: Function, default: () => {} }, + intersectMode: { type: String, default: 'move' }, + }, + mounted() { + this.rendererComponent.onMounted(() => { + this.pointer = usePointer({ + camera: this.three.camera, + domElement: this.three.renderer.domElement, + intersectObjects: this.getIntersectObjects(), + onIntersectEnter: this.onPointerEnter, + onIntersectOver: this.onPointerOver, + onIntersectMove: this.onPointerMove, + onIntersectLeave: this.onPointerLeave, + onIntersectClick: this.onClick, + }); + this.pointer.addListeners(); + + if (this.intersectMode === 'frame') { + this.three.onBeforeRender(this.pointer.intersect); + } + }); + }, + unmounted() { + if (this.pointer) { + this.pointer.removeListeners(); + this.three.offBeforeRender(this.pointer.intersect); + } + }, + methods: { + getIntersectObjects() { + return this.three.scene.children.filter(e => e.type === 'Mesh'); + }, + }, + render() { + return []; + }, + __hmrId: 'Raycaster', +}); -var Geometry = { +const Geometry = defineComponent({ inject: ['mesh'], props: { rotateX: Number, rotateY: Number, rotateZ: Number, }, - created: function created() { - var this$1 = this; - + created() { if (!this.mesh) { console.error('Missing parent Mesh'); } this.watchProps = []; - Object.entries(this.$props).forEach(function (e) { return this$1.watchProps.push(e[0]); }); + Object.entries(this.$props).forEach(e => this.watchProps.push(e[0])); this.createGeometry(); this.rotateGeometry(); @@ -699,272 +879,304 @@ var Geometry = { this.addWatchers(); }, - unmounted: function unmounted() { + unmounted() { this.geometry.dispose(); }, methods: { - addWatchers: function addWatchers() { - var this$1 = this; - - this.watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); + addWatchers() { + this.watchProps.forEach(prop => { + watch(() => this[prop], () => { + this.refreshGeometry(); }); }); }, - rotateGeometry: function rotateGeometry() { - if (this.rotateX) { this.geometry.rotateX(this.rotateX); } - if (this.rotateY) { this.geometry.rotateY(this.rotateY); } - if (this.rotateZ) { this.geometry.rotateZ(this.rotateZ); } + rotateGeometry() { + if (this.rotateX) this.geometry.rotateX(this.rotateX); + if (this.rotateY) this.geometry.rotateY(this.rotateY); + if (this.rotateZ) this.geometry.rotateZ(this.rotateZ); }, - refreshGeometry: function refreshGeometry() { - var oldGeo = this.geometry; + refreshGeometry() { + const oldGeo = this.geometry; this.createGeometry(); this.rotateGeometry(); this.mesh.setGeometry(this.geometry); oldGeo.dispose(); }, }, - render: function render() { return []; }, -}; + render() { return []; }, +}); -var BoxGeometry = { - extends: Geometry, - props: { - size: Number, - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - depth: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - depthSegments: { type: Number, default: 1 }, - }, - methods: { - createGeometry: function createGeometry() { - var w = this.width, h = this.height, d = this.depth; - if (this.size) { - w = this.size; h = this.size; d = this.size; - } - this.geometry = new BoxGeometry$1(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments); +function geometryComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Geometry, + props, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, }, - }, + }); +} + +const props$h = { + size: Number, + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + depth: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + depthSegments: { type: Number, default: 1 }, }; -var CircleGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - segments: { type: Number, default: 8 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CircleGeometry$1(this.radius, this.segments, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$f(comp) { + if (comp.size) { + return new BoxGeometry$1(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } else { + return new BoxGeometry$1(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } +} +var BoxGeometry = geometryComponent('BoxGeometry', props$h, createGeometry$f); + +const props$g = { + radius: { type: Number, default: 1 }, + segments: { type: Number, default: 8 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var ConeGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new ConeGeometry$1(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$e(comp) { + return new CircleGeometry$1(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength); +} +var CircleGeometry = geometryComponent('CircleGeometry', props$g, createGeometry$e); + +const props$f = { + radius: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var CylinderGeometry = { - extends: Geometry, - props: { - radiusTop: { type: Number, default: 1 }, - radiusBottom: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CylinderGeometry$1(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$d(comp) { + return new ConeGeometry$1(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var ConeGeometry = geometryComponent('ConeGeometry', props$f, createGeometry$d); + +const props$e = { + radiusTop: { type: Number, default: 1 }, + radiusBottom: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var DodecahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new DodecahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$c(comp) { + return new CylinderGeometry$1(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var CylinderGeometry = geometryComponent('CylinderGeometry', props$e, createGeometry$c); + +const props$d = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var IcosahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new IcosahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$b(comp) { + return new DodecahedronGeometry$1(comp.radius, comp.detail); +} +var DodecahedronGeometry = geometryComponent('DodecahedronGeometry', props$d, createGeometry$b); + +const props$c = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var LatheGeometry = { - extends: Geometry, - props: { - points: Array, - segments: { type: Number, default: 12 }, - phiStart: { type: Number, default: 0 }, - phiLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new LatheGeometry$1(this.points, this.segments, this.phiStart, this.phiLength); - }, - }, +function createGeometry$a(comp) { + return new IcosahedronGeometry$1(comp.radius, comp.detail); +} +var IcosahedronGeometry = geometryComponent('IcosahedronGeometry', props$c, createGeometry$a); + +const props$b = { + points: Array, + segments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 }, }; -var OctahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new OctahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$9(comp) { + return new LatheGeometry$1(comp.points, comp.segments, comp.phiStart, comp.phiLength); +} +var LatheGeometry = geometryComponent('LatheGeometry', props$b, createGeometry$9); + +const props$a = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var PolyhedronGeometry = { - extends: Geometry, - props: { - vertices: Array, - indices: Array, - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new PolyhedronGeometry$1(this.vertices, this.indices, this.radius, this.detail); - }, - }, +function createGeometry$8(comp) { + return new OctahedronGeometry$1(comp.radius, comp.detail); +} +var OctahedronGeometry = geometryComponent('OctahedronGeometry', props$a, createGeometry$8); + +const props$9 = { + vertices: Array, + indices: Array, + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var RingGeometry = { - extends: Geometry, - props: { - innerRadius: { type: Number, default: 0.5 }, - outerRadius: { type: Number, default: 1 }, - thetaSegments: { type: Number, default: 8 }, - phiSegments: { type: Number, default: 1 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new RingGeometry$1(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength); - }, - }, +function createGeometry$7(comp) { + return new PolyhedronGeometry$1(comp.vertices, comp.indices, comp.radius, comp.detail); +} +var PolyhedronGeometry = geometryComponent('PolyhedronGeometry', props$9, createGeometry$7); + +const props$8 = { + innerRadius: { type: Number, default: 0.5 }, + outerRadius: { type: Number, default: 1 }, + thetaSegments: { type: Number, default: 8 }, + phiSegments: { type: Number, default: 1 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 }, }; -var SphereGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 12 }, - heightSegments: { type: Number, default: 12 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new SphereGeometry$1(this.radius, this.widthSegments, this.heightSegments); - }, - }, +function createGeometry$6(comp) { + return new RingGeometry$1(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength); +} +var RingGeometry = geometryComponent('RingGeometry', props$8, createGeometry$6); + +const props$7 = { + radius: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 12 }, + heightSegments: { type: Number, default: 12 }, }; -var TetrahedronGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TetrahedronGeometry$1(this.radius, this.detail); - }, - }, +function createGeometry$5(comp) { + return new SphereGeometry$1(comp.radius, comp.widthSegments, comp.heightSegments); +} +var SphereGeometry = geometryComponent('SphereGeometry', props$7, createGeometry$5); + +const props$6 = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 }, }; -var TorusGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - tube: { type: Number, default: 0.4 }, - radialSegments: { type: Number, default: 8 }, - tubularSegments: { type: Number, default: 6 }, - arc: { type: Number, default: Math.PI * 2 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusGeometry$1(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc); - }, - }, +function createGeometry$4(comp) { + return new TetrahedronGeometry$1(comp.radius, comp.detail); +} +var TetrahedronGeometry = geometryComponent('TetrahedronGeometry', props$6, createGeometry$4); + +const props$5 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + radialSegments: { type: Number, default: 8 }, + tubularSegments: { type: Number, default: 6 }, + arc: { type: Number, default: Math.PI * 2 }, }; -var TorusKnotGeometry = { - extends: Geometry, - props: { - radius: { type: Number, default: 1 }, - tube: { type: Number, default: 0.4 }, - tubularSegments: { type: Number, default: 64 }, - radialSegments: { type: Number, default: 8 }, - p: { type: Number, default: 2 }, - q: { type: Number, default: 3 }, - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusKnotGeometry$1(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q); - }, - }, +function createGeometry$3(comp) { + return new TorusGeometry$1(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc); +} +var TorusGeometry = geometryComponent('TorusGeometry', props$5, createGeometry$3); + +const props$4 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + tubularSegments: { type: Number, default: 64 }, + radialSegments: { type: Number, default: 8 }, + p: { type: Number, default: 2 }, + q: { type: Number, default: 3 }, }; -var TubeGeometry = { +function createGeometry$2(comp) { + return new TorusKnotGeometry$1(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q); +} +var TorusKnotGeometry = geometryComponent('TorusKnotGeometry', props$4, createGeometry$2); + +const props$3 = { + points: Array, + path: Curve, + tubularSegments: { type: Number, default: 64 }, + radius: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + closed: { type: Boolean, default: false }, +}; + +function createGeometry$1(comp) { + let curve; + if (comp.points) { + curve = new CatmullRomCurve3(comp.points); + } else if (comp.path) { + curve = comp.path; + } else { + console.error('Missing path curve or points.'); + } + return new TubeGeometry$1(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed); +} +var TubeGeometry = defineComponent({ extends: Geometry, - props: { - path: Curve, - tubularSegments: { type: Number, default: 64 }, - radius: { type: Number, default: 1 }, - radiusSegments: { type: Number, default: 8 }, - closed: { type: Boolean, default: false }, - }, + props: props$3, methods: { - createGeometry: function createGeometry() { - this.geometry = new TubeGeometry$1(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed); + createGeometry() { + this.geometry = createGeometry$1(this); + }, + // update points (without using prop, faster) + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); }, }, -}; +}); -var Light = { +function updateTubeGeometryPoints(tube, points) { + const curve = new CatmullRomCurve3(points); + const { radialSegments, radius, tubularSegments, closed } = tube.parameters; + const frames = curve.computeFrenetFrames(tubularSegments, closed); + tube.tangents = frames.tangents; + tube.normals = frames.normals; + tube.binormals = frames.binormals; + tube.parameters.path = curve; + + const pArray = tube.attributes.position.array; + const nArray = tube.attributes.normal.array; + const normal = new Vector3(); + let P; + + for (let i = 0; i < tubularSegments; i++) { + updateSegment(i); + } + updateSegment(tubularSegments); + + tube.attributes.position.needsUpdate = true; + tube.attributes.normal.needsUpdate = true; + + function updateSegment(i) { + P = curve.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = (cos * N.x + sin * B.x); + normal.y = (cos * N.y + sin * B.y); + normal.z = (cos * N.z + sin * B.z); + normal.normalize(); + const index = (i * (radialSegments + 1) + j) * 3; + nArray[index] = normal.x; + nArray[index + 1] = normal.y; + nArray[index + 2] = normal.z; + pArray[index] = P.x + radius * normal.x; + pArray[index + 1] = P.y + radius * normal.y; + pArray[index + 2] = P.z + radius * normal.z; + } + } +} + +var Light = defineComponent({ extends: Object3D, name: 'Light', props: { @@ -976,13 +1188,11 @@ var Light = { }, // can't use setup because it will not be used in sub components // setup() {}, - unmounted: function unmounted() { - if (this.light.target) { this.$parent.remove(this.light.target); } + unmounted() { + if (this.light.target) this.removeFromParent(this.light.target); }, methods: { - initLight: function initLight() { - var this$1 = this; - + initLight() { if (this.light.target) { bindProp(this, 'target', this.light.target, 'position'); } @@ -993,60 +1203,58 @@ var Light = { setFromProp(this.light.shadow.camera, this.shadowCamera); } - ['color', 'intensity', 'castShadow'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { + ['color', 'intensity', 'castShadow'].forEach(p => { + watch(() => this[p], () => { if (p === 'color') { - this$1.light.color.set(this$1.color); + this.light.color.set(this.color); } else { - this$1.light[p] = this$1[p]; + this.light[p] = this[p]; } }); }); this.initObject3D(this.light); - if (this.light.target) { this.$parent.add(this.light.target); } + if (this.light.target) this.addToParent(this.light.target); }, }, __hmrId: 'Light', -}; +}); -var AmbientLight = { +var AmbientLight = defineComponent({ extends: Light, - created: function created() { + created() { this.light = new AmbientLight$1(this.color, this.intensity); this.initLight(); }, __hmrId: 'AmbientLight', -}; +}); -var DirectionalLight = { +var DirectionalLight = defineComponent({ extends: Light, props: { target: Object, }, - created: function created() { + created() { this.light = new DirectionalLight$1(this.color, this.intensity); this.initLight(); }, __hmrId: 'DirectionalLight', -}; +}); -var HemisphereLight = { +var HemisphereLight = defineComponent({ extends: Light, props: { groundColor: { type: String, default: '#444444' }, }, - created: function created() { - var this$1 = this; - + created() { this.light = new HemisphereLight$1(this.color, this.groundColor, this.intensity); - watch(function () { return this$1.groundColor; }, function (value) { this$1.light.groundColor.set(value); }); + watch(() => this.groundColor, (value) => { this.light.groundColor.set(value); }); this.initLight(); }, __hmrId: 'HemisphereLight', -}; +}); -var PointLight = { +var PointLight = defineComponent({ extends: Light, props: { distance: { @@ -1058,46 +1266,44 @@ var PointLight = { default: 1, }, }, - created: function created() { + created() { this.light = new PointLight$1(this.color, this.intensity, this.distance, this.decay); this.initLight(); }, __hmrId: 'PointLight', -}; +}); -var RectAreaLight = { +var RectAreaLight = defineComponent({ extends: Light, props: { width: { type: Number, default: 10 }, height: { type: Number, default: 10 }, helper: Boolean, }, - created: function created() { - var this$1 = this; - + created() { RectAreaLightUniformsLib.init(); this.light = new RectAreaLight$1(this.color, this.intensity, this.width, this.height); - ['width', 'height'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.light[p] = this$1[p]; + ['width', 'height'].forEach(p => { + watch(() => this[p], () => { + this.light[p] = this[p]; }); }); if (this.helper) { this.lightHelper = new RectAreaLightHelper(this.light); - this.$parent.add(this.lightHelper); + this.light.add(this.lightHelper); } this.initLight(); }, - unmounted: function unmounted() { - if (this.lightHelper) { this.$parent.remove(this.lightHelper); } + unmounted() { + if (this.lightHelper) this.removeFromParent(this.lightHelper); }, __hmrId: 'RectAreaLight', -}; +}); -var SpotLight = { +var SpotLight = defineComponent({ extends: Light, props: { angle: { type: Number, default: Math.PI / 3 }, @@ -1106,21 +1312,19 @@ var SpotLight = { penumbra: { type: Number, default: 0 }, target: Object, }, - created: function created() { - var this$1 = this; - + created() { this.light = new SpotLight$1(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay); - ['angle', 'decay', 'distance', 'penumbra'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - this$1.light[p] = this$1[p]; + ['angle', 'decay', 'distance', 'penumbra'].forEach(p => { + watch(() => this[p], () => { + this.light[p] = this[p]; }); }); this.initLight(); }, __hmrId: 'SpotLight', -}; +}); -var Material = { +var Material = defineComponent({ inject: ['three', 'mesh'], props: { color: { type: [String, Number], default: '#ffffff' }, @@ -1132,54 +1336,48 @@ var Material = { transparent: Boolean, vertexColors: Boolean, }, - provide: function provide() { + provide() { return { material: this, }; }, - created: function created() { + created() { this.createMaterial(); this.mesh.setMaterial(this.material); this._addWatchers(); - if (this.addWatchers) { this.addWatchers(); } + if (this.addWatchers) this.addWatchers(); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - setProp: function setProp(key, value, needsUpdate) { - if ( needsUpdate === void 0 ) needsUpdate = false; - + setProp(key, value, needsUpdate = false) { this.material[key] = value; this.material.needsUpdate = needsUpdate; }, - setTexture: function setTexture(texture, key) { - if ( key === void 0 ) key = 'map'; - + setTexture(texture, key = 'map') { this.setProp(key, texture, true); }, - _addWatchers: function _addWatchers() { - var this$1 = this; - - ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { + _addWatchers() { + ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(p => { + watch(() => this[p], () => { if (p === 'color') { - this$1.material.color.set(this$1.color); + this.material.color.set(this.color); } else { - this$1.material[p] = this$1[p]; + this.material[p] = this[p]; } }); }); }, }, - render: function render() { + render() { return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'Material', -}; +}); -var wireframeProps = { +const wireframeProps = { wireframe: { type: Boolean, default: false }, // not needed for WebGL // wireframeLinecap: { type: String, default: 'round' }, @@ -1187,35 +1385,39 @@ var wireframeProps = { wireframeLinewidth: { type: Number, default: 1 }, // not really useful }; -var BasicMaterial = { +var BasicMaterial = defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshBasicMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'BasicMaterial', -}; +}); -var LambertMaterial = { +var LambertMaterial = defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshLambertMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'LambertMaterial', -}; +}); -var MatcapMaterial = { +var MatcapMaterial = defineComponent({ extends: Material, props: { src: String, @@ -1223,42 +1425,42 @@ var MatcapMaterial = { flatShading: Boolean, }, methods: { - createMaterial: function createMaterial() { - var src = this.name ? getMatcapUrl(this.name) : this.src; - var opts = propsValues(this.$props, ['src', 'name']); + createMaterial() { + const src = this.name ? getMatcapUrl(this.name) : this.src; + const opts = propsValues(this.$props, ['src', 'name']); opts.matcap = new TextureLoader().load(src); this.material = new MeshMatcapMaterial(opts); }, - addWatchers: function addWatchers() { + addWatchers() { // TODO }, }, __hmrId: 'MatcapMaterial', -}; +}); -var PhongMaterial = { +var PhongMaterial = defineComponent({ extends: Material, - props: Object.assign({}, {emissive: { type: [Number, String], default: 0 }, + props: { + emissive: { type: [Number, String], default: 0 }, emissiveIntensity: { type: Number, default: 1 }, reflectivity: { type: Number, default: 1 }, shininess: { type: Number, default: 30 }, specular: { type: [String, Number], default: 0x111111 }, - flatShading: Boolean}, - wireframeProps), + flatShading: Boolean, + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshPhongMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { - var this$1 = this; - + addWatchers() { // TODO : handle flatShading ? - ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(function (p) { - watch(function () { return this$1[p]; }, function (value) { + ['emissive', 'emissiveIntensity', 'reflectivity', 'shininess', 'specular'].forEach(p => { + watch(() => this[p], (value) => { if (p === 'emissive' || p === 'specular') { - this$1.material[p].set(value); + this.material[p].set(value); } else { - this$1.material[p] = value; + this.material[p] = value; } }); }); @@ -1266,9 +1468,9 @@ var PhongMaterial = { }, }, __hmrId: 'PhongMaterial', -}; +}); -var props = { +const props$2 = { aoMapIntensity: { type: Number, default: 1 }, bumpScale: { type: Number, default: 1 }, displacementBias: { type: Number, default: 0 }, @@ -1284,25 +1486,25 @@ var props = { flatShading: Boolean, }; -var StandardMaterial = { +var StandardMaterial = defineComponent({ extends: Material, - props: Object.assign({}, props, - wireframeProps), + props: { + ...props$2, + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshStandardMaterial(propsValues(this.$props, ['normalScale'])); }, - addWatchers: function addWatchers() { - var this$1 = this; - + addWatchers() { // TODO : use setProp, handle flatShading ? - Object.keys(props).forEach(function (p) { - if (p === 'normalScale') { return; } - watch(function () { return this$1[p]; }, function (value) { + Object.keys(props$2).forEach(p => { + if (p === 'normalScale') return; + watch(() => this[p], (value) => { if (p === 'emissive') { - this$1.material[p].set(value); + this.material[p].set(value); } else { - this$1.material[p] = value; + this.material[p] = value; } }); }); @@ -1311,57 +1513,73 @@ var StandardMaterial = { }, }, __hmrId: 'StandardMaterial', -}; +}); -var PhysicalMaterial = { +var PhysicalMaterial = defineComponent({ extends: StandardMaterial, props: { flatShading: Boolean, }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshPhysicalMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { // TODO }, }, __hmrId: 'PhysicalMaterial', -}; +}); + +const defaultVertexShader = ` +varying vec2 vUv; +void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); +}`; + +const defaultFragmentShader = ` +varying vec2 vUv; +void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); +}`; -var ShaderMaterial = { +var ShaderMaterial = defineComponent({ inject: ['three', 'mesh'], props: { - uniforms: { type: Object, default: function () { return {}; } }, + uniforms: { type: Object, default: () => { return {}; } }, vertexShader: { type: String, default: defaultVertexShader }, fragmentShader: { type: String, default: defaultFragmentShader }, }, - created: function created() { - var this$1 = this; - + provide() { + return { + material: this, + }; + }, + created() { this.createMaterial(); - ['vertexShader', 'fragmentShader'].forEach(function (p) { - watch(function () { return this$1[p]; }, function () { + ['vertexShader', 'fragmentShader'].forEach(p => { + watch(() => this[p], () => { // recreate material if we change either shader - this$1.material.dispose(); - this$1.createMaterial(); + this.material.dispose(); + this.createMaterial(); }); }); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new ShaderMaterial$1(propsValues(this.$props)); this.mesh.setMaterial(this.material); }, }, - render: function render() { - return []; + render() { + return this.$slots.default ? this.$slots.default() : []; }, __hmrId: 'ShaderMaterial', -}; +}); /** * ------------------------------------------------------------------------------------------ @@ -1376,10 +1594,10 @@ function replaceAll(string, find, replace) { return string.split(find).join(replace); } -var meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {')); -var meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {')); +const meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {')); +const meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {')); -var SubsurfaceScatteringShader = { +const SubsurfaceScatteringShader = { uniforms: UniformsUtils.merge([ ShaderLib.phong.uniforms, @@ -1390,21 +1608,54 @@ var SubsurfaceScatteringShader = { thicknessAttenuation: { value: 0.1 }, thicknessPower: { value: 2.0 }, thicknessScale: { value: 10.0 }, - } ]), - - vertexShader: ("\n #define USE_UV\n " + (ShaderChunk.meshphong_vert) + "\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( + }, + ]), + + vertexShader: ` + #define USE_UV + ${ShaderChunk.meshphong_vert} + `, + + fragmentShader: ` + #define USE_UV + #define SUBSURFACE + + ${meshphongFragHead} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + ` + meshphongFragBody.replace( '#include ', replaceAll( ShaderChunk.lights_fragment_begin, 'RE_Direct( directLight, geometry, material, reflectedLight );', - "\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 " + ` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + ` ) ), }; -var SubSurfaceMaterial = { +var SubSurfaceMaterial = defineComponent({ inject: ['three', 'mesh'], props: { color: { type: String, default: '#ffffff' }, @@ -1418,25 +1669,22 @@ var SubSurfaceMaterial = { opacity: { type: Number, default: 1 }, vertexColors: { type: Boolean, default: false }, }, - created: function created() { + created() { this.createMaterial(); this.mesh.setMaterial(this.material); }, - unmounted: function unmounted() { + unmounted() { this.material.dispose(); }, methods: { - createMaterial: function createMaterial() { - var params = SubsurfaceScatteringShader; - var uniforms = UniformsUtils.clone(params.uniforms); - - Object.entries(this.$props).forEach(function (ref) { - var key = ref[0]; - var value = ref[1]; + createMaterial() { + const params = SubsurfaceScatteringShader; + const uniforms = UniformsUtils.clone(params.uniforms); - var _key = key, _value = value; + Object.entries(this.$props).forEach(([key, value]) => { + let _key = key, _value = value; if (['color', 'thicknessColor'].includes(key)) { - if (key === 'color') { _key = 'diffuse'; } + if (key === 'color') _key = 'diffuse'; _value = new Color(value); } if (!['transparent', 'vertexColors'].includes(key)) { @@ -1444,38 +1692,43 @@ var SubSurfaceMaterial = { } }); - this.material = new ShaderMaterial$1(Object.assign({}, params, - {uniforms: uniforms, + this.material = new ShaderMaterial$1({ + ...params, + uniforms, lights: true, transparent: this.transparent, - vertexColors: this.vertexColors})); + vertexColors: this.vertexColors, + }); }, }, - render: function render() { + render() { return []; }, __hmrId: 'SubSurfaceMaterial', -}; +}); -var ToonMaterial = { +var ToonMaterial = defineComponent({ extends: Material, - props: Object.assign({}, wireframeProps), + props: { + ...wireframeProps, + }, methods: { - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshToonMaterial(propsValues(this.$props)); }, - addWatchers: function addWatchers() { + addWatchers() { bindProps(this, Object.keys(wireframeProps), this.material); }, }, __hmrId: 'ToonMaterial', -}; +}); -var Texture = { +var Texture = defineComponent({ inject: ['material'], emits: ['loaded'], props: { - id: { type: String, default: 'map' }, + name: { type: String, default: 'map' }, + uniform: { type: String, default: null }, src: String, onLoad: Function, onProgress: Function, @@ -1489,39 +1742,45 @@ var Texture = { rotation: { type: Number, default: 0 }, center: { type: Object, default: { x: 0, y: 0 } }, }, - created: function created() { - var this$1 = this; - + created() { this.refreshTexture(); - watch(function () { return this$1.src; }, this.refreshTexture); + watch(() => this.src, this.refreshTexture); }, - unmounted: function unmounted() { - this.material.setTexture(null, this.id); + unmounted() { + if (this.material && this.material.setTexture) this.material.setTexture(null, this.name); this.texture.dispose(); }, methods: { - createTexture: function createTexture() { - var this$1 = this; - + createTexture() { this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError); - var wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center']; - wathProps.forEach(function (prop) { - bindProp(this$1, prop, this$1.texture); + const wathProps = ['mapping', 'wrapS', 'wrapT', 'magFilter', 'minFilter', 'repeat', 'rotation', 'rotation', 'center']; + wathProps.forEach(prop => { + bindProp(this, prop, this.texture); }); }, - refreshTexture: function refreshTexture() { + refreshTexture() { this.createTexture(); - this.material.setTexture(this.texture, this.id); + // handle standard material + if (this.material && this.material.setTexture) { this.material.setTexture(this.texture, this.name); } + // handle shader material + else if (this.material && this.material.material.type === "ShaderMaterial") { + // require a `uniform` prop so we know what to call the uniform + if (!this.uniform) { + console.warn('"uniform" prop required to use texture in a shader.'); + return + } + this.material.uniforms[this.uniform] = { value: this.texture }; + } }, - onLoaded: function onLoaded() { - if (this.onLoad) { this.onLoad(); } + onLoaded() { + if (this.onLoad) this.onLoad(); this.$emit('loaded'); }, }, - render: function render() { return []; }, -}; + render() { return []; }, +}); -var CubeTexture = { +var CubeTexture = defineComponent({ inject: ['material'], emits: ['loaded'], props: { @@ -1533,481 +1792,181 @@ var CubeTexture = { onLoad: Function, onProgress: Function, onError: Function, - id: { type: String, default: 'envMap' }, + name: { type: String, default: 'envMap' }, refraction: Boolean, // todo: remove ? refractionRatio: { type: Number, default: 0.98 }, }, - created: function created() { - var this$1 = this; - + created() { this.refreshTexture(); - watch(function () { return this$1.path; }, this.refreshTexture); - watch(function () { return this$1.urls; }, this.refreshTexture); + watch(() => this.path, this.refreshTexture); + watch(() => this.urls, this.refreshTexture); }, - unmounted: function unmounted() { - this.material.setTexture(null, this.id); + unmounted() { + this.material.setTexture(null, this.name); this.texture.dispose(); }, methods: { - createTexture: function createTexture() { + createTexture() { this.texture = new CubeTextureLoader() .setPath(this.path) .load(this.urls, this.onLoaded, this.onProgress, this.onError); }, - refreshTexture: function refreshTexture() { + refreshTexture() { this.createTexture(); - this.material.setTexture(this.texture, this.id); + this.material.setTexture(this.texture, this.name); if (this.refraction) { this.texture.mapping = CubeRefractionMapping; this.material.setProp('refractionRatio', this.refractionRatio); } }, - onLoaded: function onLoaded() { - if (this.onLoad) { this.onLoad(); } + onLoaded() { + if (this.onLoad) this.onLoad(); this.$emit('loaded'); }, }, - render: function render() { + render() { return []; }, +}); + +const pointerProps = { + onPointerEnter: Function, + onPointerOver: Function, + onPointerMove: Function, + onPointerLeave: Function, + onPointerDown: Function, + onPointerUp: Function, + onClick: Function, }; -var Mesh = { - extends: Object3D, +const Mesh = defineComponent({ name: 'Mesh', + extends: Object3D, props: { castShadow: Boolean, receiveShadow: Boolean, - onHover: Function, - onClick: Function, + ...pointerProps, }, // can't use setup because it will not be used in sub components // setup() {}, - provide: function provide() { + provide() { return { mesh: this, }; }, - mounted: function mounted() { - if (!this.mesh && !this.loading) { this.initMesh(); } + mounted() { + if (!this.mesh && !this.loading) this.initMesh(); }, methods: { - initMesh: function initMesh() { - var this$1 = this; - + initMesh() { this.mesh = new Mesh$1(this.geometry, this.material); - - ['castShadow', 'receiveShadow'].forEach(function (p) { - this$1.mesh[p] = this$1[p]; - watch(function () { return this$1[p]; }, function () { this$1.mesh[p] = this$1[p]; }); - }); - - if (this.onHover) { - this.mesh.onHover = function (over) { this$1.onHover({ component: this$1, over: over }); }; - this.three.addIntersectObject(this.mesh); - } - - if (this.onClick) { - this.mesh.onClick = function (e) { this$1.onClick({ component: this$1, event: e }); }; + this.mesh.component = this; + + bindProp(this, 'castShadow', this.mesh); + bindProp(this, 'receiveShadow', this.mesh); + + if (this.onPointerEnter || + this.onPointerOver || + this.onPointerMove || + this.onPointerLeave || + this.onPointerDown || + this.onPointerUp || + this.onClick) { this.three.addIntersectObject(this.mesh); } this.initObject3D(this.mesh); }, - setGeometry: function setGeometry(geometry) { + addGeometryWatchers(props) { + Object.keys(props).forEach(prop => { + watch(() => this[prop], () => { + this.refreshGeometry(); + }); + }); + }, + setGeometry(geometry) { this.geometry = geometry; - if (this.mesh) { this.mesh.geometry = geometry; } + if (this.mesh) this.mesh.geometry = geometry; }, - setMaterial: function setMaterial(material) { + setMaterial(material) { this.material = material; - if (this.mesh) { this.mesh.material = material; } + if (this.mesh) this.mesh.material = material; }, - refreshGeometry: function refreshGeometry() { - var oldGeo = this.geometry; + refreshGeometry() { + const oldGeo = this.geometry; this.createGeometry(); this.mesh.geometry = this.geometry; oldGeo.dispose(); }, }, - unmounted: function unmounted() { + unmounted() { if (this.mesh) { this.three.removeIntersectObject(this.mesh); - } - // for predefined mesh (geometry and material are not unmounted) - if (this.geometry) { this.geometry.dispose(); } - if (this.material) { this.material.dispose(); } - }, - __hmrId: 'Mesh', -}; - -var Box = { - extends: Mesh, - props: { - size: Number, - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - depth: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - depthSegments: { type: Number, default: 1 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - if (this.size) { - this.geometry = new BoxBufferGeometry(this.size, this.size, this.size); - } else { - this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth); - } - }, - }, - __hmrId: 'Box', -}; - -var Circle = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - segments: { type: Number, default: 8 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Circle', -}; - -var Cone = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Cone', -}; - -var Cylinder = { - extends: Mesh, - props: { - radiusTop: { type: Number, default: 1 }, - radiusBottom: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - heightSegments: { type: Number, default: 1 }, - openEnded: { type: Boolean, default: false }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Cylinder', -}; - -var Dodecahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Dodecahedron', -}; - -var Icosahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Icosahedron', -}; - -var Lathe = { - extends: Mesh, - props: { - points: Array, - segments: { type: Number, default: 12 }, - phiStart: { type: Number, default: 0 }, - phiLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['points', 'segments', 'phiStart', 'phiLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength); - }, - }, - __hmrId: 'Lathe', -}; - -var Octahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, + } + // for predefined mesh (geometry is not unmounted) + if (this.geometry) this.geometry.dispose(); }, - created: function created() { - var this$1 = this; - - this.createGeometry(); + __hmrId: 'Mesh', +}); - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new OctahedronBufferGeometry(this.radius, this.detail); +function meshComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Mesh, + props, + created() { + this.createGeometry(); + this.addGeometryWatchers(props); }, - }, - __hmrId: 'Octahedron', -}; + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + }, + __hmrId: name, + }); +} -var Plane = { - extends: Mesh, - props: { - width: { type: Number, default: 1 }, - height: { type: Number, default: 1 }, - widthSegments: { type: Number, default: 1 }, - heightSegments: { type: Number, default: 1 }, - }, - created: function created() { - var this$1 = this; +var Box = meshComponent('Box', props$h, createGeometry$f); - this.createGeometry(); +var Circle = meshComponent('Circle', props$g, createGeometry$e); - var watchProps = ['width', 'height', 'widthSegments', 'heightSegments']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments); - }, - }, - __hmrId: 'Plane', -}; +var Cone = meshComponent('Cone', props$f, createGeometry$d); -var Polyhedron = { - extends: Mesh, - props: { - vertices: Array, - indices: Array, - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; +var Cylinder = meshComponent('Cylinder', props$e, createGeometry$c); - this.createGeometry(); +var Dodecahedron = meshComponent('Dodecahedron', props$d, createGeometry$b); - var watchProps = ['vertices', 'indices', 'radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail); - }, - }, - __hmrId: 'Polyhedron', -}; +var Icosahedron = meshComponent('Icosahedron', props$c, createGeometry$a); -var Ring = { - extends: Mesh, - props: { - innerRadius: { type: Number, default: 0.5 }, - outerRadius: { type: Number, default: 1 }, - thetaSegments: { type: Number, default: 8 }, - phiSegments: { type: Number, default: 1 }, - thetaStart: { type: Number, default: 0 }, - thetaLength: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; +var Lathe = meshComponent('Lathe', props$b, createGeometry$9); - this.createGeometry(); +var Octahedron = meshComponent('Octahedron', props$a, createGeometry$8); - var watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength); - }, - }, - __hmrId: 'Ring', +const props$1 = { + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, }; -var Sphere = { - extends: Mesh, - props: { - radius: Number, - widthSegments: { type: Number, default: 12 }, - heightSegments: { type: Number, default: 12 }, - }, - watch: { - radius: function radius() { this.refreshGeometry(); }, - widthSegments: function widthSegments() { this.refreshGeometry(); }, - heightSegments: function heightSegments() { this.refreshGeometry(); }, - }, - created: function created() { - this.createGeometry(); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments); - }, - }, - __hmrId: 'Sphere', -}; +function createGeometry(comp) { + return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments); +} +geometryComponent('PlaneGeometry', props$1, createGeometry); -var Tetrahedron = { - extends: Mesh, - props: { - radius: { type: Number, default: 1 }, - detail: { type: Number, default: 0 }, - }, - created: function created() { - var this$1 = this; +var Plane = meshComponent('Plane', props$1, createGeometry); - this.createGeometry(); +var Polyhedron = meshComponent('Polyhedron', props$9, createGeometry$7); - var watchProps = ['radius', 'detail']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail); - }, - }, - __hmrId: 'Tetrahedron', -}; +var Ring = meshComponent('Ring', props$8, createGeometry$6); + +var Sphere = meshComponent('Sphere', props$7, createGeometry$5); + +var Tetrahedron = meshComponent('Tetrahedron', props$6, createGeometry$4); -var TextProps = { +const props = { text: String, fontSrc: String, size: { type: Number, default: 80 }, @@ -2022,39 +1981,38 @@ var TextProps = { align: { type: [Boolean, String], default: false }, }; -var Text = { +var Text = defineComponent({ extends: Mesh, - props: Object.assign({}, TextProps), - data: function data() { + props, + data() { return { loading: true, }; }, - created: function created() { - var this$1 = this; - + created() { // add watchers - var watchProps = [ + const watchProps = [ 'text', 'size', 'height', 'curveSegments', 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments', - 'align' ]; - watchProps.forEach(function (p) { - watch(function () { return this$1[p]; }, function () { - if (this$1.font) { this$1.refreshGeometry(); } + 'align', + ]; + watchProps.forEach(p => { + watch(() => this[p], () => { + if (this.font) this.refreshGeometry(); }); }); - var loader = new FontLoader(); - loader.load(this.fontSrc, function (font) { - this$1.loading = false; - this$1.font = font; - this$1.createGeometry(); - this$1.initMesh(); + const loader = new FontLoader(); + loader.load(this.fontSrc, (font) => { + this.loading = false; + this.font = font; + this.createGeometry(); + this.initMesh(); }); }, methods: { - createGeometry: function createGeometry() { - this.geometry = new TextBufferGeometry(this.text, { + createGeometry() { + this.geometry = new TextGeometry(this.text, { font: this.font, size: this.size, height: this.height, @@ -2072,161 +2030,32 @@ var Text = { } }, }, -}; - -var Torus = { - extends: Mesh, - props: { - radius: { type: Number, default: 0.5 }, - tube: { type: Number, default: 0.4 }, - radialSegments: { type: Number, default: 8 }, - tubularSegments: { type: Number, default: 6 }, - arc: { type: Number, default: Math.PI * 2 }, - }, - created: function created() { - var this$1 = this; - - this.createGeometry(); - - var watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc); - }, - }, - __hmrId: 'Torus', -}; - -var TorusKnot = { - extends: Mesh, - props: { - radius: { type: Number, default: 0.5 }, - tube: { type: Number, default: 0.4 }, - tubularSegments: { type: Number, default: 64 }, - radialSegments: { type: Number, default: 8 }, - p: { type: Number, default: 2 }, - q: { type: Number, default: 3 }, - }, - created: function created() { - var this$1 = this; +}); - this.createGeometry(); +var Torus = meshComponent('Torus', props$5, createGeometry$3); - var watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function () { - this$1.refreshGeometry(); - }); - }); - }, - methods: { - createGeometry: function createGeometry() { - this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q); - }, - }, - __hmrId: 'TorusKnot', -}; +var TorusKnot = meshComponent('TorusKnot', props$4, createGeometry$2); -var Tube = { +var Tube = defineComponent({ extends: Mesh, - props: { - path: Curve, - points: Array, - tubularSegments: { type: Number, default: 64 }, - radius: { type: Number, default: 1 }, - radialSegments: { type: Number, default: 8 }, - closed: { type: Boolean, default: false }, - }, - created: function created() { - var this$1 = this; - + props: props$3, + created() { this.createGeometry(); - var watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed']; - watchProps.forEach(function (prop) { - watch(function () { return this$1[prop]; }, function (v) { - this$1.refreshGeometry(); - }); - }); - watch(function () { return this$1.points; }, function () { - updateTubeGeometryPoints(this$1.geometry, this$1.points); - }); + this.addGeometryWatchers(props$3); }, methods: { - createGeometry: function createGeometry() { - var curve; - if (this.points) { - curve = new CatmullRomCurve3(this.points); - } else if (this.path) { - curve = this.path; - } else { - console.error('Missing path curve or points.'); - } - this.geometry = new TubeGeometry$1(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed); + createGeometry() { + this.geometry = createGeometry$1(this); }, // update curve points (without using prop, faster) - updateCurve: function updateCurve(points) { + updatePoints(points) { updateTubeGeometryPoints(this.geometry, points); }, }, __hmrId: 'Tube', -}; - -function updateTubeGeometryPoints(tube, points) { - var curve = new CatmullRomCurve3(points); - var ref = tube.parameters; - var radialSegments = ref.radialSegments; - var radius = ref.radius; - var tubularSegments = ref.tubularSegments; - var closed = ref.closed; - var frames = curve.computeFrenetFrames(tubularSegments, closed); - tube.tangents = frames.tangents; - tube.normals = frames.normals; - tube.binormals = frames.binormals; - tube.parameters.path = curve; - - var pArray = tube.attributes.position.array; - var nArray = tube.attributes.normal.array; - var normal = new Vector3(); - var P; - - for (var i = 0; i < tubularSegments; i++) { - updateSegment(i); - } - updateSegment(tubularSegments); - - tube.attributes.position.needsUpdate = true; - tube.attributes.normal.needsUpdate = true; - - function updateSegment(i) { - P = curve.getPointAt(i / tubularSegments, P); - var N = frames.normals[i]; - var B = frames.binormals[i]; - for (var j = 0; j <= radialSegments; j++) { - var v = j / radialSegments * Math.PI * 2; - var sin = Math.sin(v); - var cos = -Math.cos(v); - normal.x = (cos * N.x + sin * B.x); - normal.y = (cos * N.y + sin * B.y); - normal.z = (cos * N.z + sin * B.z); - normal.normalize(); - var index = (i * (radialSegments + 1) + j) * 3; - nArray[index] = normal.x; - nArray[index + 1] = normal.y; - nArray[index + 2] = normal.z; - pArray[index] = P.x + radius * normal.x; - pArray[index + 1] = P.y + radius * normal.y; - pArray[index + 2] = P.z + radius * normal.z; - } - } -} +}); -var Gem = { +var Gem = defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2234,22 +2063,23 @@ var Gem = { cubeCameraFar: { type: Number, default: 2000 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initGem(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.meshBack) { this.$parent.remove(this.meshBack); } - if (this.materialBack) { this.materialBack.dispose(); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); + if (this.meshBack) this.removeFromParent(this.meshBack); + if (this.materialBack) this.materialBack.dispose(); }, methods: { - initGem: function initGem() { - var cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + initGem() { + const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); bindProp(this, 'position', this.cubeCamera); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.side = FrontSide; this.material.envMap = cubeRT.texture; @@ -2273,9 +2103,9 @@ var Gem = { bindProp(this, 'position', this.meshBack); bindProp(this, 'rotation', this.meshBack); bindProp(this, 'scale', this.meshBack); - this.$parent.add(this.meshBack); + this.addToParent(this.meshBack); }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.meshBack.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); @@ -2284,9 +2114,9 @@ var Gem = { }, }, __hmrId: 'Gem', -}; +}); -var Image = { +var Image = defineComponent({ emits: ['loaded'], extends: Mesh, props: { @@ -2295,48 +2125,46 @@ var Image = { height: Number, keepSize: Boolean, }, - created: function created() { - var this$1 = this; - + created() { this.createGeometry(); this.createMaterial(); this.initMesh(); - watch(function () { return this$1.src; }, this.refreshTexture); + watch(() => this.src, this.refreshTexture); - ['width', 'height'].forEach(function (p) { - watch(function () { return this$1[p]; }, this$1.resize); + ['width', 'height'].forEach(p => { + watch(() => this[p], this.resize); }); - if (this.keepSize) { this.three.onAfterResize(this.resize); } + if (this.keepSize) this.three.onAfterResize(this.resize); }, methods: { - createGeometry: function createGeometry() { - this.geometry = new PlaneBufferGeometry(1, 1, 1, 1); + createGeometry() { + this.geometry = new PlaneGeometry(1, 1, 1, 1); }, - createMaterial: function createMaterial() { + createMaterial() { this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() }); }, - loadTexture: function loadTexture() { + loadTexture() { return new TextureLoader().load(this.src, this.onLoaded); }, - refreshTexture: function refreshTexture() { - if (this.texture) { this.texture.dispose(); } + refreshTexture() { + if (this.texture) this.texture.dispose(); this.material.map = this.loadTexture(); this.material.needsUpdate = true; }, - onLoaded: function onLoaded(texture) { + onLoaded(texture) { this.texture = texture; this.resize(); this.$emit('loaded'); }, - resize: function resize() { - if (!this.texture) { return; } - var screen = this.three.size; - var iW = this.texture.image.width; - var iH = this.texture.image.height; - var iRatio = iW / iH; - var w, h; + resize() { + if (!this.texture) return; + const screen = this.three.size; + const iW = this.texture.image.width; + const iH = this.texture.image.height; + const iRatio = iW / iH; + let w, h; if (this.width && this.height) { w = this.width * screen.wWidth / screen.width; h = this.height * screen.wHeight / screen.height; @@ -2352,54 +2180,68 @@ var Image = { }, }, __hmrId: 'Image', -}; +}); -var InstancedMesh = { +var InstancedMesh = defineComponent({ extends: Object3D, props: { castShadow: Boolean, receiveShadow: Boolean, count: Number, + ...pointerProps, }, - provide: function provide() { + provide() { return { mesh: this, }; }, - beforeMount: function beforeMount() { + beforeMount() { if (!this.$slots.default) { console.error('Missing Geometry'); } }, - created: function created() { + mounted() { this.initMesh(); }, methods: { - initMesh: function initMesh() { - var this$1 = this; - + initMesh() { this.mesh = new InstancedMesh$1(this.geometry, this.material, this.count); - - ['castShadow', 'receiveShadow'].forEach(function (p) { - this$1.mesh[p] = this$1[p]; - watch(function () { return this$1[p]; }, function () { this$1.mesh[p] = this$1[p]; }); - }); + this.mesh.component = this; + + bindProp(this, 'castShadow', this.mesh); + bindProp(this, 'receiveShadow', this.mesh); + + if (this.onPointerEnter || + this.onPointerOver || + this.onPointerMove || + this.onPointerLeave || + this.onPointerDown || + this.onPointerUp || + this.onClick) { + this.three.addIntersectObject(this.mesh); + } this.initObject3D(this.mesh); }, - setGeometry: function setGeometry(geometry) { + setGeometry(geometry) { this.geometry = geometry; - if (this.mesh) { this.mesh.geometry = geometry; } + if (this.mesh) this.mesh.geometry = geometry; }, - setMaterial: function setMaterial(material) { + setMaterial(material) { this.material = material; - if (this.mesh) { this.mesh.material = material; } + this.material.instancingColor = true; + if (this.mesh) this.mesh.material = material; }, }, + unmounted() { + if (this.mesh) { + this.three.removeIntersectObject(this.mesh); + } + }, __hmrId: 'InstancedMesh', -}; +}); -var MirrorMesh = { +var MirrorMesh = defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2407,34 +2249,34 @@ var MirrorMesh = { cubeCameraFar: { type: Number, default: 2000 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initMirrorMesh(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.cubeCamera) { this.$parent.remove(this.cubeCamera); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); }, methods: { - initMirrorMesh: function initMirrorMesh() { - var cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + initMirrorMesh() { + const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.envMap = cubeRT.texture; this.material.needsUpdate = true; }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); this.mesh.visible = true; }, }, __hmrId: 'MirrorMesh', -}; +}); -var RefractionMesh = { +var RefractionMesh = defineComponent({ extends: Mesh, props: { cubeRTSize: { type: Number, default: 256 }, @@ -2443,76 +2285,76 @@ var RefractionMesh = { refractionRatio: { type: Number, default: 0.98 }, autoUpdate: Boolean, }, - mounted: function mounted() { + mounted() { this.initMirrorMesh(); - if (this.autoUpdate) { this.three.onBeforeRender(this.updateCubeRT); } - else { this.rendererComponent.onMounted(this.updateCubeRT); } + if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT); + else this.rendererComponent.onMounted(this.updateCubeRT); }, - unmounted: function unmounted() { + unmounted() { this.three.offBeforeRender(this.updateCubeRT); - if (this.cubeCamera) { this.$parent.remove(this.cubeCamera); } + if (this.cubeCamera) this.removeFromParent(this.cubeCamera); }, methods: { - initMirrorMesh: function initMirrorMesh() { - var cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + initMirrorMesh() { + const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT); bindProp(this, 'position', this.cubeCamera); - this.$parent.add(this.cubeCamera); + this.addToParent(this.cubeCamera); this.material.envMap = cubeRT.texture; this.material.refractionRatio = this.refractionRatio; this.material.needsUpdate = true; }, - updateCubeRT: function updateCubeRT() { + updateCubeRT() { this.mesh.visible = false; this.cubeCamera.update(this.three.renderer, this.scene); this.mesh.visible = true; }, }, __hmrId: 'RefractionMesh', -}; +}); -var Sprite = { +var Sprite = defineComponent({ extends: Object3D, emits: ['loaded'], props: { src: String, }, - data: function data() { + data() { return { loading: true, }; }, - created: function created() { + created() { this.texture = new TextureLoader().load(this.src, this.onLoaded); this.material = new SpriteMaterial({ map: this.texture }); this.sprite = new Sprite$1(this.material); this.geometry = this.sprite.geometry; this.initObject3D(this.sprite); }, - unmounted: function unmounted() { + unmounted() { this.texture.dispose(); this.material.dispose(); }, methods: { - onLoaded: function onLoaded() { + onLoaded() { this.loading = false; this.updateUV(); this.$emit('loaded'); }, - updateUV: function updateUV() { + updateUV() { this.iWidth = this.texture.image.width; this.iHeight = this.texture.image.height; this.iRatio = this.iWidth / this.iHeight; - var x = 0.5, y = 0.5; + let x = 0.5, y = 0.5; if (this.iRatio > 1) { y = 0.5 / this.iRatio; } else { x = 0.5 / this.iRatio; } - var positions = this.geometry.attributes.position.array; + const positions = this.geometry.attributes.position.array; positions[0] = -x; positions[1] = -y; positions[5] = x; positions[6] = -y; positions[10] = x; positions[11] = y; @@ -2521,116 +2363,136 @@ var Sprite = { }, }, __hmrId: 'Sprite', -}; +}); -var GLTF = { +var Model = defineComponent({ extends: Object3D, - emits: ['loaded'], + emits: ['load', 'progress', 'error'], + data() { + return { + progress: 0, + }; + }, + methods: { + onLoad(model) { + this.$emit('load', model); + this.initObject3D(model); + }, + onProgress(progress) { + this.progress = progress.loaded / progress.total; + this.$emit('progress', progress); + }, + onError(error) { + this.$emit('error', error); + }, + }, +}); + +var GLTF = defineComponent({ + extends: Model, props: { src: String, }, - created: function created() { - var this$1 = this; - - var loader = new GLTFLoader(); - loader.load(this.src, function (gltf) { - this$1.$emit('loaded', gltf); - this$1.initObject3D(gltf.scene); - }); + created() { + const loader = new GLTFLoader(); + loader.load(this.src, (gltf) => { + this.onLoad(gltf.scene); + }, this.onProgress, this.onError); }, -}; +}); -var FBX = { - extends: Object3D, - emits: ['loaded'], +var FBX = defineComponent({ + extends: Model, props: { src: String, }, - created: function created() { - var this$1 = this; - - var loader = new FBXLoader(); - loader.load(this.src, function (fbx) { - this$1.$emit('loaded', fbx); - this$1.initObject3D(fbx); - }); + created() { + const loader = new FBXLoader(); + loader.load(this.src, (fbx) => { + this.onLoad(fbx); + }, this.onProgress, this.onError); }, -}; +}); -var EffectComposer = { - setup: function setup() { +var EffectComposer = defineComponent({ + setup() { return { passes: [], }; }, inject: ['three'], - provide: function provide() { + provide() { return { passes: this.passes, }; }, - mounted: function mounted() { - var this$1 = this; - - this.three.onAfterInit(function () { - this$1.composer = new EffectComposer$1(this$1.three.renderer); - this$1.three.renderer.autoClear = false; - this$1.passes.forEach(function (pass) { - this$1.composer.addPass(pass); + mounted() { + this.three.onAfterInit(() => { + this.composer = new EffectComposer$1(this.three.renderer); + this.three.renderer.autoClear = false; + this.passes.forEach(pass => { + this.composer.addPass(pass); }); - this$1.three.composer = this$1.composer; + this.three.composer = this.composer; - this$1.resize(); - this$1.three.onAfterResize(this$1.resize); + this.resize(); + this.three.onAfterResize(this.resize); }); }, - unmounted: function unmounted() { + unmounted() { this.three.offAfterResize(this.resize); }, methods: { - resize: function resize() { + resize() { this.composer.setSize(this.three.size.width, this.three.size.height); }, }, - render: function render() { + render() { return this.$slots.default(); }, __hmrId: 'EffectComposer', -}; +}); -var EffectPass = { +var EffectPass = defineComponent({ inject: ['three', 'passes'], - beforeMount: function beforeMount() { + emits: ['ready'], + beforeMount() { if (!this.passes) { console.error('Missing parent EffectComposer'); } }, - unmounted: function unmounted() { - if (this.pass.dispose) { this.pass.dispose(); } + unmounted() { + if (this.pass.dispose) this.pass.dispose(); + }, + methods: { + completePass(pass) { + this.passes.push(pass); + this.pass = pass; + this.$emit('ready', pass); + }, }, - render: function render() { + render() { return []; }, __hmrId: 'EffectPass', -}; +}); -var RenderPass = { +var RenderPass = defineComponent({ extends: EffectPass, - mounted: function mounted() { + mounted() { if (!this.three.scene) { console.error('Missing Scene'); } if (!this.three.camera) { console.error('Missing Camera'); } - var pass = new RenderPass$1(this.three.scene, this.three.camera); - this.passes.push(pass); - this.pass = pass; + const pass = new RenderPass$1(this.three.scene, this.three.camera); + this.completePass(pass); }, __hmrId: 'RenderPass', -}; +}); -var BokehPass = { +var BokehPass = defineComponent({ extends: EffectPass, props: { focus: { @@ -2647,90 +2509,74 @@ var BokehPass = { }, }, watch: { - focus: function focus() { this.pass.uniforms.focus.value = this.focus; }, - aperture: function aperture() { this.pass.uniforms.aperture.value = this.aperture; }, - maxblur: function maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; }, + focus() { this.pass.uniforms.focus.value = this.focus; }, + aperture() { this.pass.uniforms.aperture.value = this.aperture; }, + maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; }, }, - mounted: function mounted() { + mounted() { if (!this.three.scene) { console.error('Missing Scene'); } if (!this.three.camera) { console.error('Missing Camera'); } - var params = { + const params = { focus: this.focus, aperture: this.aperture, maxblur: this.maxblur, width: this.three.size.width, height: this.three.size.height, }; - var pass = new BokehPass$1(this.three.scene, this.three.camera, params); - this.passes.push(pass); - this.pass = pass; + const pass = new BokehPass$1(this.three.scene, this.three.camera, params); + this.completePass(pass); }, __hmrId: 'BokehPass', -}; +}); -var FilmPass = { +var FilmPass = defineComponent({ extends: EffectPass, props: { - noiseIntensity: { - type: Number, - default: 0.5, - }, - scanlinesIntensity: { - type: Number, - default: 0.05, - }, - scanlinesCount: { - type: Number, - default: 4096, - }, - grayscale: { - type: Number, - default: 0, - }, + noiseIntensity: { type: Number, default: 0.5 }, + scanlinesIntensity: { type: Number, default: 0.05 }, + scanlinesCount: { type: Number, default: 4096 }, + grayscale: { type: Number, default: 0 }, }, watch: { - noiseIntensity: function noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; }, - scanlinesIntensity: function scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; }, - scanlinesCount: function scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; }, - grayscale: function grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; }, + noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; }, + scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; }, + scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; }, + grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; }, }, - mounted: function mounted() { - var pass = new FilmPass$1(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); - this.passes.push(pass); - this.pass = pass; + mounted() { + const pass = new FilmPass$1(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); + this.completePass(pass); }, __hmrId: 'FilmPass', -}; +}); -var FXAAPass = { +var FXAAPass = defineComponent({ extends: EffectPass, - mounted: function mounted() { - var pass = new ShaderPass(FXAAShader); - this.passes.push(pass); - this.pass = pass; + mounted() { + const pass = new ShaderPass(FXAAShader); + this.completePass(pass); // resize will be called in three init this.three.onAfterResize(this.resize); }, - unmounted: function unmounted() { + unmounted() { this.three.offAfterResize(this.resize); }, methods: { - resize: function resize() { - var ref = this.pass.material.uniforms; - var resolution = ref.resolution; + resize() { + const { resolution } = this.pass.material.uniforms; resolution.value.x = 1 / this.three.size.width; resolution.value.y = 1 / this.three.size.height; }, }, __hmrId: 'FXAAPass', -}; +}); -var HalftonePass = { +var HalftonePass = defineComponent({ extends: EffectPass, props: { shape: { type: Number, default: 1 }, @@ -2740,39 +2586,73 @@ var HalftonePass = { rotateB: { type: Number, default: Math.PI / 12 * 3 }, scatter: { type: Number, default: 0 }, }, - mounted: function mounted() { - var this$1 = this; + mounted() { + const pass = new HalftonePass$1(this.three.size.width, this.three.size.height, {}); - var pass = new HalftonePass$1(this.three.size.width, this.three.size.height, {}); - - ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(function (p) { - pass.uniforms[p].value = this$1[p]; - watch(function () { return this$1[p]; }, function () { - pass.uniforms[p].value = this$1[p]; + ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => { + pass.uniforms[p].value = this[p]; + watch(() => this[p], () => { + pass.uniforms[p].value = this[p]; }); }); - this.passes.push(pass); - this.pass = pass; + this.completePass(pass); }, __hmrId: 'HalftonePass', -}; +}); -var SMAAPass = { +var SMAAPass = defineComponent({ extends: EffectPass, - mounted: function mounted() { + mounted() { // three size is not set yet, but this pass will be resized by effect composer - var pass = new SMAAPass$1(this.three.size.width, this.three.size.height); - this.passes.push(pass); - this.pass = pass; + const pass = new SMAAPass$1(this.three.size.width, this.three.size.height); + this.completePass(pass); }, __hmrId: 'SMAAPass', -}; +}); + +var SSAOPass = defineComponent({ + extends: EffectPass, + props: { + scene: null, + camera: null, + options: { + type: Object, + default: () => ({}), + }, + }, + mounted() { + const pass = new SSAOPass$1( + this.scene || this.three.scene, + this.camera || this.three.camera, + this.three.size.width, + this.three.size.height + ); + + for (const key of Object.keys(this.options)) { + pass[key] = this.options[key]; + } + + this.completePass(pass); + }, + __hmrId: 'SSAOPass', +}); var DefaultShader = { uniforms: {}, - vertexShader: "\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ", - fragmentShader: "\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n ", + vertexShader: ` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `, + fragmentShader: ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + `, }; // From https://github.com/evanw/glfx.js @@ -2788,10 +2668,53 @@ var TiltShift = { texSize: { value: new Vector2() }, }, vertexShader: DefaultShader.vertexShader, - 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 ", + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `, }; -var TiltShiftPass = { +var TiltShiftPass = defineComponent({ extends: EffectPass, props: { blurRadius: { type: Number, default: 10 }, @@ -2799,17 +2722,15 @@ var TiltShiftPass = { start: { type: Object, default: { x: 0, y: 100 } }, end: { type: Object, default: { x: 10, y: 100 } }, }, - mounted: function mounted() { - var this$1 = this; - + mounted() { this.pass = new ShaderPass(TiltShift); this.passes.push(this.pass); this.pass1 = new ShaderPass(TiltShift); this.passes.push(this.pass1); - var uniforms = this.uniforms = this.pass.uniforms; - var uniforms1 = this.uniforms1 = this.pass1.uniforms; + const uniforms = this.uniforms = this.pass.uniforms; + const uniforms1 = this.uniforms1 = this.pass1.uniforms; uniforms1.blurRadius = uniforms.blurRadius; uniforms1.gradientRadius = uniforms.gradientRadius; uniforms1.start = uniforms.start; @@ -2820,27 +2741,31 @@ var TiltShiftPass = { bindProp(this, 'gradientRadius', uniforms.gradientRadius, 'value'); this.updateFocusLine(); - ['start', 'end'].forEach(function (p) { - watch(function () { return this$1[p]; }, this$1.updateFocusLine, { deep: true }); + ['start', 'end'].forEach(p => { + watch(() => this[p], this.updateFocusLine, { deep: true }); }); - this.pass.setSize = function (width, height) { + this.pass.setSize = (width, height) => { uniforms.texSize.value.set(width, height); }; + + // emit ready event with two passes - do so manually in this file instead + // of calling `completePass` like in other effect types + this.$emit('ready', [this.pass, this.pass1]); }, methods: { - updateFocusLine: function updateFocusLine() { + updateFocusLine() { this.uniforms.start.value.copy(this.start); this.uniforms.end.value.copy(this.end); - var dv = new Vector2().copy(this.end).sub(this.start).normalize(); + const dv = new Vector2().copy(this.end).sub(this.start).normalize(); this.uniforms.delta.value.copy(dv); this.uniforms1.delta.value.set(-dv.y, dv.x); }, }, __hmrId: 'TiltShiftPass', -}; +}); -var UnrealBloomPass = { +var UnrealBloomPass = defineComponent({ extends: EffectPass, props: { strength: { type: Number, default: 1.5 }, @@ -2848,18 +2773,17 @@ var UnrealBloomPass = { threshold: { type: Number, default: 0 }, }, watch: { - strength: function strength() { this.pass.strength = this.strength; }, - radius: function radius() { this.pass.radius = this.radius; }, - threshold: function threshold() { this.pass.threshold = this.threshold; }, + strength() { this.pass.strength = this.strength; }, + radius() { this.pass.radius = this.radius; }, + threshold() { this.pass.threshold = this.threshold; }, }, - mounted: function mounted() { - var size = new Vector2(this.three.size.width, this.three.size.height); - var pass = new UnrealBloomPass$1(size, this.strength, this.radius, this.threshold); - this.passes.push(pass); - this.pass = pass; + mounted() { + const size = new Vector2(this.three.size.width, this.three.size.height); + const pass = new UnrealBloomPass$1(size, this.strength, this.radius, this.threshold); + this.completePass(pass); }, __hmrId: 'UnrealBloomPass', -}; +}); // From https://github.com/evanw/glfx.js @@ -2870,25 +2794,62 @@ var ZoomBlur = { strength: { value: 0 }, }, vertexShader: DefaultShader.vertexShader, - 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 ", + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `, }; -var ZoomBlurPass = { +var ZoomBlurPass = defineComponent({ extends: EffectPass, props: { center: { type: Object, default: { x: 0.5, y: 0.5 } }, strength: { type: Number, default: 0.5 }, }, - mounted: function mounted() { - this.pass = new ShaderPass(ZoomBlur); - this.passes.push(this.pass); + mounted() { + const pass = new ShaderPass(ZoomBlur); - var uniforms = this.uniforms = this.pass.uniforms; + const uniforms = this.uniforms = pass.uniforms; bindProp(this, 'center', uniforms.center, 'value'); bindProp(this, 'strength', uniforms.strength, 'value'); + + this.completePass(pass); }, __hmrId: 'ZoomBlurPass', -}; +}); var TROIS = /*#__PURE__*/Object.freeze({ __proto__: null, @@ -2898,6 +2859,8 @@ var TROIS = /*#__PURE__*/Object.freeze({ Camera: PerspectiveCamera, Group: Group, Scene: Scene, + Object3D: Object3D, + Raycaster: Raycaster, BoxGeometry: BoxGeometry, CircleGeometry: CircleGeometry, ConeGeometry: ConeGeometry, @@ -2963,6 +2926,7 @@ var TROIS = /*#__PURE__*/Object.freeze({ FXAAPass: FXAAPass, HalftonePass: HalftonePass, SMAAPass: SMAAPass, + SSAOPass: SSAOPass, TiltShiftPass: TiltShiftPass, UnrealBloomPass: UnrealBloomPass, ZoomBlurPass: ZoomBlurPass, @@ -2974,17 +2938,16 @@ var TROIS = /*#__PURE__*/Object.freeze({ lerpv2: lerpv2, lerpv3: lerpv3, limit: limit, - getMatcapUrl: getMatcapUrl, - defaultVertexShader: defaultVertexShader, - defaultFragmentShader: defaultFragmentShader + getMatcapUrl: getMatcapUrl }); -var TroisJSVuePlugin = { - install: function (app) { - var comps = [ +const TroisJSVuePlugin = { + install: (app) => { + const comps = [ 'Camera', 'OrthographicCamera', 'PerspectiveCamera', + 'Raycaster', 'Renderer', 'Scene', 'Group', @@ -3047,13 +3010,15 @@ var TroisJSVuePlugin = { 'RenderPass', 'SAOPass', 'SMAAPass', + 'SSAOPass', 'TiltShiftPass', 'UnrealBloomPass', 'ZoomBlurPass', - 'GLTFViewer' ]; + 'GLTFViewer', + ]; - comps.forEach(function (comp) { + comps.forEach(comp => { app.component(comp, TROIS[comp]); }); }, @@ -3063,5 +3028,5 @@ function createApp(params) { return createApp$1(params).use(TroisJSVuePlugin); } -export { AmbientLight, BasicMaterial, BokehPass, Box, BoxGeometry, PerspectiveCamera as Camera, Circle, CircleGeometry, Cone, ConeGeometry, CubeTexture, Cylinder, CylinderGeometry, DirectionalLight, Dodecahedron, DodecahedronGeometry, EffectComposer, FBX as FBXModel, FXAAPass, FilmPass, GLTF as GLTFModel, Gem, Group, HalftonePass, HemisphereLight, Icosahedron, IcosahedronGeometry, Image, InstancedMesh, LambertMaterial, Lathe, LatheGeometry, MatcapMaterial, Mesh, MirrorMesh, Octahedron, OctahedronGeometry, OrthographicCamera, PerspectiveCamera, PhongMaterial, PhysicalMaterial, Plane, PointLight, Polyhedron, PolyhedronGeometry, RectAreaLight, RefractionMesh, RenderPass, Renderer, Ring, RingGeometry, SMAAPass, Scene, ShaderMaterial, Sphere, SphereGeometry, SpotLight, Sprite, StandardMaterial, SubSurfaceMaterial, Tetrahedron, TetrahedronGeometry, Text, Texture, TiltShiftPass, ToonMaterial, Torus, TorusGeometry, TorusKnot, TorusKnotGeometry, TroisJSVuePlugin, Tube, TubeGeometry, UnrealBloomPass, ZoomBlurPass, bindProp, bindProps, createApp, defaultFragmentShader, defaultVertexShader, getMatcapUrl, lerp, lerpv2, lerpv3, limit, propsValues, setFromProp }; +export { AmbientLight, BasicMaterial, BokehPass, Box, BoxGeometry, PerspectiveCamera as Camera, Circle, CircleGeometry, Cone, ConeGeometry, CubeTexture, Cylinder, CylinderGeometry, DirectionalLight, Dodecahedron, DodecahedronGeometry, EffectComposer, FBX as FBXModel, FXAAPass, FilmPass, GLTF as GLTFModel, Gem, Group, HalftonePass, HemisphereLight, Icosahedron, IcosahedronGeometry, Image, InstancedMesh, LambertMaterial, Lathe, LatheGeometry, MatcapMaterial, Mesh, MirrorMesh, Object3D, Octahedron, OctahedronGeometry, OrthographicCamera, PerspectiveCamera, PhongMaterial, PhysicalMaterial, Plane, PointLight, Polyhedron, PolyhedronGeometry, Raycaster, RectAreaLight, RefractionMesh, RenderPass, Renderer, Ring, RingGeometry, SMAAPass, SSAOPass, Scene, ShaderMaterial, Sphere, SphereGeometry, SpotLight, Sprite, StandardMaterial, SubSurfaceMaterial, Tetrahedron, TetrahedronGeometry, Text, Texture, TiltShiftPass, ToonMaterial, Torus, TorusGeometry, TorusKnot, TorusKnotGeometry, TroisJSVuePlugin, Tube, TubeGeometry, UnrealBloomPass, ZoomBlurPass, bindProp, bindProps, createApp, getMatcapUrl, lerp, lerpv2, lerpv3, limit, propsValues, setFromProp }; //# sourceMappingURL=trois.module.js.map diff --git a/build/trois.module.js.map b/build/trois.module.js.map index 5aa74e7..09220b5 100644 --- a/build/trois.module.js.map +++ b/build/trois.module.js.map @@ -1 +1 @@ -{"version":3,"file":"trois.module.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/core/OrthographicCamera.js","../src/core/PerspectiveCamera.js","../src/core/Object3D.js","../src/core/Group.js","../src/core/Scene.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/CircleGeometry.js","../src/geometries/ConeGeometry.js","../src/geometries/CylinderGeometry.js","../src/geometries/DodecahedronGeometry.js","../src/geometries/IcosahedronGeometry.js","../src/geometries/LatheGeometry.js","../src/geometries/OctahedronGeometry.js","../src/geometries/PolyhedronGeometry.js","../src/geometries/RingGeometry.js","../src/geometries/SphereGeometry.js","../src/geometries/TetrahedronGeometry.js","../src/geometries/TorusGeometry.js","../src/geometries/TorusKnotGeometry.js","../src/geometries/TubeGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.js","../src/lights/DirectionalLight.js","../src/lights/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/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.js","../src/meshes/TextProps.js","../src/meshes/Text.js","../src/meshes/Torus.js","../src/meshes/TorusKnot.js","../src/meshes/Tube.js","../src/meshes/Gem.js","../src/meshes/Image.js","../src/meshes/InstancedMesh.js","../src/meshes/MirrorMesh.js","../src/meshes/RefractionMesh.js","../src/meshes/Sprite.js","../src/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/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 {\n Plane,\n Raycaster,\n Vector2,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\n/**\n * Three.js helper\n */\nexport default function useThree() {\n // default conf\n const conf = {\n canvas: null,\n antialias: true,\n alpha: false,\n autoClear: true,\n orbit_ctrl: false,\n mouse_move: false,\n mouse_raycast: false,\n mouse_over: false,\n click: false,\n resize: true,\n width: 0,\n height: 0,\n };\n\n // size\n const size = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n };\n\n // handlers\n const afterInitCallbacks = [];\n let afterResizeCallbacks = [];\n let beforeRenderCallbacks = [];\n\n // mouse tracking\n const mouse = new Vector2();\n const mouseV3 = new Vector3();\n const mousePlane = new Plane(new Vector3(0, 0, 1), 0);\n const raycaster = new Raycaster();\n\n // raycast objects\n const intersectObjects = [];\n\n // returned object\n const obj = {\n conf,\n renderer: null,\n camera: null,\n cameraCtrl: null,\n materials: {},\n scene: null,\n size,\n mouse, mouseV3,\n init,\n dispose,\n render,\n renderC,\n setSize,\n onAfterInit,\n onAfterResize, offAfterResize,\n onBeforeRender, offBeforeRender,\n addIntersectObject, removeIntersectObject,\n };\n\n /**\n * init three\n */\n function init(params) {\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n conf[key] = value;\n });\n }\n\n if (!obj.scene) {\n console.error('Missing Scene');\n return;\n }\n\n if (!obj.camera) {\n console.error('Missing Camera');\n return;\n }\n\n obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha });\n obj.renderer.autoClear = conf.autoClear;\n\n if (conf.orbit_ctrl) {\n obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement);\n if (conf.orbit_ctrl instanceof Object) {\n Object.entries(conf.orbit_ctrl).forEach(([key, value]) => {\n obj.orbitCtrl[key] = value;\n });\n }\n }\n\n if (conf.resize) {\n onResize();\n window.addEventListener('resize', onResize);\n } else {\n setSize(conf.width | 300, conf.height | 150);\n }\n\n conf.mouse_move = conf.mouse_move || conf.mouse_over;\n if (conf.mouse_move) {\n if (conf.mouse_move === 'body') {\n obj.mouse_move_element = document.body;\n } else {\n obj.mouse_move_element = obj.renderer.domElement;\n }\n obj.mouse_move_element.addEventListener('mousemove', onMousemove);\n obj.mouse_move_element.addEventListener('mouseleave', onMouseleave);\n }\n\n if (conf.click) {\n obj.renderer.domElement.addEventListener('click', onClick);\n }\n\n afterInitCallbacks.forEach(c => c());\n\n return true;\n };\n\n /**\n * add after init callback\n */\n function onAfterInit(callback) {\n afterInitCallbacks.push(callback);\n }\n\n /**\n * add after resize callback\n */\n function onAfterResize(callback) {\n afterResizeCallbacks.push(callback);\n }\n\n /**\n * remove after resize callback\n */\n function offAfterResize(callback) {\n afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback);\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(callback) {\n beforeRenderCallbacks.push(callback);\n }\n\n /**\n * remove before render callback\n */\n function offBeforeRender(callback) {\n beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback);\n }\n\n /**\n * default render\n */\n function render() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.renderer.render(obj.scene, obj.camera);\n }\n\n /**\n * composer render\n */\n function renderC() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.composer.render();\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o);\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o) {\n const i = intersectObjects.indexOf(o);\n if (i !== -1) {\n intersectObjects.splice(i, 1);\n }\n }\n\n /**\n * remove listeners\n */\n function dispose() {\n beforeRenderCallbacks = [];\n window.removeEventListener('resize', onResize);\n if (obj.mouse_move_element) {\n obj.mouse_move_element.removeEventListener('mousemove', onMousemove);\n obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave);\n }\n obj.renderer.domElement.removeEventListener('click', onClick);\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\n this.renderer.dispose();\n }\n\n /**\n */\n function updateMouse(e) {\n const rect = e.target.getBoundingClientRect();\n mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1;\n mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1;\n }\n\n /**\n * click listener\n */\n function onClick(e) {\n updateMouse(e);\n raycaster.setFromCamera(mouse, obj.camera);\n const objects = raycaster.intersectObjects(intersectObjects);\n for (let i = 0; i < objects.length; i++) {\n const o = objects[i].object;\n if (o.onClick) o.onClick(e);\n }\n }\n\n /**\n * mousemove listener\n */\n function onMousemove(e) {\n updateMouse(e);\n onMousechange(e);\n }\n\n /**\n * mouseleave listener\n */\n function onMouseleave(e) {\n // mouse.x = 0;\n // mouse.y = 0;\n onMousechange(e);\n }\n\n /**\n * mouse change\n */\n function onMousechange(e) {\n if (conf.mouse_over || conf.mouse_raycast) {\n raycaster.setFromCamera(mouse, obj.camera);\n\n if (conf.mouse_raycast) {\n // get mouse 3d position\n obj.camera.getWorldDirection(mousePlane.normal);\n mousePlane.normal.normalize();\n raycaster.ray.intersectPlane(mousePlane, mouseV3);\n }\n\n if (conf.mouse_over) {\n const onObjects = raycaster.intersectObjects(intersectObjects);\n const offObjects = [...intersectObjects];\n for (let i = 0; i < onObjects.length; i++) {\n const o = onObjects[i].object;\n if (!o.hover && o.onHover) {\n o.hover = true;\n o.onHover(true);\n }\n offObjects.splice(offObjects.indexOf(o), 1);\n }\n for (let i = 0; i < offObjects.length; i++) {\n const o = offObjects[i];\n if (o.hover && o.onHover) {\n o.hover = false;\n o.onHover(false);\n }\n }\n }\n }\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (conf.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight);\n } else {\n const elt = obj.renderer.domElement.parentNode;\n setSize(elt.clientWidth, elt.clientHeight);\n }\n afterResizeCallbacks.forEach(c => c());\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width, height) {\n size.width = width;\n size.height = height;\n size.ratio = width / height;\n\n obj.renderer.setSize(width, height, false);\n obj.camera.aspect = size.ratio;\n obj.camera.updateProjectionMatrix();\n\n if (obj.composer) {\n obj.composer.setSize(width, height);\n }\n\n if (obj.camera.type === 'OrthographicCamera') {\n size.wWidth = obj.camera.right - obj.camera.left;\n size.wHeight = obj.camera.top - obj.camera.bottom;\n } else {\n const wsize = getCameraSize();\n size.wWidth = wsize[0]; size.wHeight = wsize[1];\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const vFOV = (obj.camera.fov * Math.PI) / 180;\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z);\n const w = h * obj.camera.aspect;\n return [w, h];\n }\n\n return obj;\n}\n","import { h } from 'vue';\nimport useThree from './useThree';\n\nexport default {\n name: 'Renderer',\n props: {\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n mouseMove: { type: [Boolean, String], default: false },\n mouseRaycast: { type: Boolean, default: false },\n mouseOver: { type: Boolean, default: false },\n click: { type: Boolean, default: false },\n orbitCtrl: { type: [Boolean, Object], default: false },\n resize: { type: [Boolean, String], default: false },\n shadow: Boolean,\n width: String,\n height: String,\n },\n setup() {\n return {\n three: useThree(),\n raf: true,\n onMountedCallbacks: [],\n };\n },\n provide() {\n return {\n three: this.three,\n // renderer: this.three.renderer,\n rendererComponent: this,\n };\n },\n mounted() {\n const params = {\n canvas: this.$el,\n antialias: this.antialias,\n alpha: this.alpha,\n autoClear: this.autoClear,\n orbit_ctrl: this.orbitCtrl,\n mouse_move: this.mouseMove,\n mouse_raycast: this.mouseRaycast,\n mouse_over: this.mouseOver,\n click: this.click,\n resize: this.resize,\n width: this.width,\n height: this.height,\n };\n\n if (this.three.init(params)) {\n this.renderer = this.three.renderer;\n this.renderer.shadowMap.enabled = this.shadow;\n if (this.three.composer) this.animateC();\n else this.animate();\n };\n\n this.onMountedCallbacks.forEach(c => c());\n },\n beforeUnmount() {\n this.raf = false;\n this.three.dispose();\n },\n methods: {\n onMounted(callback) {\n this.onMountedCallbacks.push(callback);\n },\n onBeforeRender(callback) {\n this.three.onBeforeRender(callback);\n },\n onAfterResize(callback) {\n this.three.onAfterResize(callback);\n },\n animate() {\n if (this.raf) requestAnimationFrame(this.animate);\n this.three.render();\n },\n animateC() {\n if (this.raf) requestAnimationFrame(this.animateC);\n this.three.renderC();\n },\n },\n render() {\n return h('canvas', {}, this.$slots.default());\n },\n __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\n// shader defaults\nexport const defaultVertexShader = `\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\nexport const defaultFragmentShader = `\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}`;\n","import { OrthographicCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'OrthographicCamera',\n};\n","import { PerspectiveCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'PerspectiveCamera',\n};\n","import { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n name: 'Object3D',\n inject: ['three', 'scene', 'rendererComponent'],\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 },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this._parent) this._parent.remove(this.o3d);\n },\n methods: {\n initObject3D(o3d) {\n this.o3d = 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 let parent = this.$parent;\n while (parent) {\n if (parent.add) {\n parent.add(this.o3d);\n this._parent = parent;\n break;\n }\n parent = parent.$parent;\n }\n if (!this._parent) console.error('Missing parent (Scene, Group...)');\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 { Group } from 'three';\nimport Object3D from './Object3D.js';\n\nexport default {\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 { Scene, Color } from 'three';\nimport { watch } from 'vue';\n\nexport default {\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 { watch } from 'vue';\n\nexport default {\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","import { BoxGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n methods: {\n createGeometry() {\n let w = this.width, h = this.height, d = this.depth;\n if (this.size) {\n w = this.size; h = this.size; d = this.size;\n }\n this.geometry = new BoxGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments);\n },\n },\n};\n","import { CircleGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { ConeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { CylinderGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { DodecahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { IcosahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { LatheGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n};\n","import { OctahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { PolyhedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n};\n","import { RingGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new RingGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { SphereGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n};\n","import { TetrahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { TorusGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n};\n","import { TorusKnotGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n 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 methods: {\n createGeometry() {\n this.geometry = new TorusKnotGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n};\n","import { Curve, TubeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radiusSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed);\n },\n },\n};\n","import { watch } from 'vue';\nimport Object3D from '../core/Object3D.js';\nimport { bindProp, setFromProp } from '../tools.js';\n\nexport default {\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.$parent.remove(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.$parent.add(this.light.target);\n },\n },\n __hmrId: 'Light',\n};\n","import { AmbientLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n created() {\n this.light = new AmbientLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'AmbientLight',\n};\n","import { DirectionalLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n target: Object,\n },\n created() {\n this.light = new DirectionalLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'DirectionalLight',\n};\n","import { HemisphereLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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 { PointLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n distance: {\n type: Number,\n default: 0,\n },\n decay: {\n type: Number,\n default: 1,\n },\n },\n created() {\n this.light = new PointLight(this.color, this.intensity, this.distance, this.decay);\n this.initLight();\n },\n __hmrId: 'PointLight',\n};\n","import { RectAreaLight } from 'three';\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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.$parent.add(this.lightHelper);\n }\n\n this.initLight();\n },\n unmounted() {\n if (this.lightHelper) this.$parent.remove(this.lightHelper);\n },\n __hmrId: 'RectAreaLight',\n};\n","import { SpotLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n angle: { 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 { watch } from 'vue';\nimport { FrontSide } from 'three';\n\nexport default {\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 { MeshBasicMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshLambertMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshMatcapMaterial, TextureLoader } from 'three';\n// import { watch } from 'vue';\nimport { propsValues, getMatcapUrl } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n props: {\n src: String,\n name: String,\n 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 { MeshPhongMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n reflectivity: { type: Number, default: 1 },\n shininess: { type: Number, default: 30 },\n specular: { type: [String, Number], default: 0x111111 },\n 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 { MeshStandardMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProp, bindProps, propsValues } from '../tools.js';\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 {\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 { MeshPhysicalMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport StandardMaterial from './StandardMaterial';\n\nexport default {\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 { ShaderMaterial } from 'three';\nimport { watch } from 'vue';\nimport { propsValues, defaultFragmentShader, defaultVertexShader } from '../tools.js';\n\nexport default {\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 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 [];\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 ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\n\nexport default {\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 { MeshToonMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, TextureLoader, UVMapping } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n id: { type: String, default: 'map' },\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 this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\n 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 this.material.setTexture(this.texture, this.id);\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() { return []; },\n};\n","import { CubeTextureLoader, CubeRefractionMapping } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n path: String,\n urls: {\n type: Array,\n default: ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n id: { type: String, default: 'envMap' },\n refraction: Boolean,\n // todo: remove ?\n refractionRatio: { type: Number, default: 0.98 },\n },\n created() {\n this.refreshTexture();\n watch(() => this.path, this.refreshTexture);\n watch(() => this.urls, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError);\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n if (this.refraction) {\n this.texture.mapping = CubeRefractionMapping;\n this.material.setProp('refractionRatio', this.refractionRatio);\n }\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() {\n return [];\n },\n};\n","import { watch } from 'vue';\nimport { Mesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n name: 'Mesh',\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n onHover: Function,\n onClick: Function,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n 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 Mesh(this.geometry, this.material);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n if (this.onHover) {\n this.mesh.onHover = (over) => { this.onHover({ component: this, over }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n if (this.onClick) {\n this.mesh.onClick = (e) => { this.onClick({ component: this, event: e }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n this.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 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 and material are not unmounted)\n if (this.geometry) this.geometry.dispose();\n if (this.material) this.material.dispose();\n },\n __hmrId: 'Mesh',\n};\n","import { BoxBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n if (this.size) {\n this.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\n } else {\n this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\n }\n },\n },\n __hmrId: 'Box',\n};\n","import { CircleBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Circle',\n};\n","import { ConeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cone',\n};\n","import { CylinderBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cylinder',\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Dodecahedron',\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Icosahedron',\n};\n","import { LatheBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['points', 'segments', 'phiStart', 'phiLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n __hmrId: 'Lathe',\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Octahedron',\n};\n","import { PlaneBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['width', 'height', 'widthSegments', 'heightSegments'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Plane',\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['vertices', 'indices', 'radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n __hmrId: 'Polyhedron',\n};\n","import { RingBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Ring',\n};\n","import { SphereBufferGeometry } from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: Number,\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n watch: {\n radius() { this.refreshGeometry(); },\n widthSegments() { this.refreshGeometry(); },\n heightSegments() { this.refreshGeometry(); },\n },\n created() {\n this.createGeometry();\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Sphere',\n};\n","import { TetrahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Tetrahedron',\n};\n","export default {\n text: String,\n fontSrc: String,\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String], default: false },\n};\n","import { FontLoader, TextBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport TextProps from './TextProps.js';\n\nexport default {\n extends: Mesh,\n props: {\n ...TextProps,\n },\n 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 TextBufferGeometry(this.text, {\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n });\n\n if (this.align === 'center') {\n this.geometry.center();\n }\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n __hmrId: 'Torus',\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n __hmrId: 'TorusKnot',\n};\n","import { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n path: Curve,\n points: Array,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n created() {\n this.createGeometry();\n const watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed'];\n watchProps.forEach(prop => {\n watch(() => this[prop], (v) => {\n this.refreshGeometry();\n });\n });\n watch(() => this.points, () => {\n updateTubeGeometryPoints(this.geometry, this.points);\n });\n },\n methods: {\n createGeometry() {\n let curve;\n if (this.points) {\n curve = new CatmullRomCurve3(this.points);\n } else if (this.path) {\n curve = this.path;\n } else {\n console.error('Missing path curve or points.');\n }\n this.geometry = new TubeGeometry(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed);\n },\n // update curve points (without using prop, faster)\n updateCurve(points) {\n updateTubeGeometryPoints(this.geometry, points);\n },\n },\n __hmrId: 'Tube',\n};\n\nfunction 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 {\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.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initGem();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.meshBack) this.$parent.remove(this.meshBack);\n if (this.materialBack) this.materialBack.dispose();\n },\n methods: {\n initGem() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.side = FrontSide;\n this.material.envMap = cubeRT.texture;\n this.material.envMapIntensity = 10;\n this.material.metalness = 0;\n this.material.roughness = 0;\n this.material.opacity = 0.75;\n this.material.transparent = true;\n this.material.premultipliedAlpha = true;\n this.material.needsUpdate = true;\n\n this.materialBack = this.material.clone();\n this.materialBack.side = BackSide;\n this.materialBack.envMapIntensity = 5;\n this.materialBack.metalness = 1;\n this.materialBack.roughness = 0;\n this.materialBack.opacity = 0.5;\n\n this.meshBack = new TMesh(this.geometry, this.materialBack);\n\n bindProp(this, 'position', this.meshBack);\n bindProp(this, 'rotation', this.meshBack);\n bindProp(this, 'scale', this.meshBack);\n this.$parent.add(this.meshBack);\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.meshBack.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n this.meshBack.visible = true;\n },\n },\n __hmrId: 'Gem',\n};\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry, TextureLoader } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: String,\n width: Number,\n height: Number,\n keepSize: Boolean,\n },\n created() {\n this.createGeometry();\n this.createMaterial();\n this.initMesh();\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], this.resize);\n });\n\n if (this.keepSize) this.three.onAfterResize(this.resize);\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(1, 1, 1, 1);\n },\n createMaterial() {\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\n },\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded);\n },\n refreshTexture() {\n if (this.texture) this.texture.dispose();\n this.material.map = this.loadTexture();\n this.material.needsUpdate = true;\n },\n onLoaded(texture) {\n this.texture = texture;\n this.resize();\n this.$emit('loaded');\n },\n resize() {\n if (!this.texture) return;\n const screen = this.three.size;\n const iW = this.texture.image.width;\n const iH = this.texture.image.height;\n const iRatio = iW / iH;\n let w, h;\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width;\n h = this.height * screen.wHeight / screen.height;\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width;\n h = w / iRatio;\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height;\n w = h * iRatio;\n }\n this.mesh.scale.x = w;\n this.mesh.scale.y = h;\n },\n },\n __hmrId: 'Image',\n};\n","import { watch } from 'vue';\nimport { InstancedMesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n count: Number,\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 created() {\n this.initMesh();\n },\n methods: {\n initMesh() {\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\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 if (this.mesh) this.mesh.material = material;\n },\n },\n __hmrId: 'InstancedMesh',\n};\n","import {\n CubeCamera,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'MirrorMesh',\n};\n","import {\n CubeCamera,\n CubeRefractionMapping,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n refractionRatio: { type: Number, default: 0.98 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.refractionRatio = this.refractionRatio;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'RefractionMesh',\n};\n","import { Sprite, SpriteMaterial, TextureLoader } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\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 { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', gltf);\r\n this.initObject3D(gltf.scene);\r\n });\r\n },\r\n};\r\n","import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', fbx);\r\n this.initObject3D(fbx);\r\n });\r\n },\r\n};\r\n","import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\n\nexport default {\n setup() {\n return {\n passes: [],\n };\n },\n inject: ['three'],\n provide() {\n return {\n passes: this.passes,\n };\n },\n mounted() {\n this.three.onAfterInit(() => {\n this.composer = new EffectComposer(this.three.renderer);\n this.three.renderer.autoClear = false;\n this.passes.forEach(pass => {\n this.composer.addPass(pass);\n });\n this.three.composer = this.composer;\n\n this.resize();\n this.three.onAfterResize(this.resize);\n });\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n this.composer.setSize(this.three.size.width, this.three.size.height);\n },\n },\n render() {\n return this.$slots.default();\n },\n __hmrId: 'EffectComposer',\n};\n","export default {\n inject: ['three', 'passes'],\n beforeMount() {\n if (!this.passes) {\n console.error('Missing parent EffectComposer');\n }\n },\n unmounted() {\n if (this.pass.dispose) this.pass.dispose();\n },\n render() {\n return [];\n },\n __hmrId: 'EffectPass',\n};\n","import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const pass = new RenderPass(this.three.scene, this.three.camera);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'RenderPass',\n};\n","import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n focus: {\n type: Number,\n default: 1,\n },\n aperture: {\n type: Number,\n default: 0.025,\n },\n maxblur: {\n type: Number,\n default: 0.01,\n },\n },\n watch: {\n focus() { this.pass.uniforms.focus.value = this.focus; },\n aperture() { this.pass.uniforms.aperture.value = this.aperture; },\n maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; },\n },\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.three.size.width,\n height: this.three.size.height,\n };\n const pass = new BokehPass(this.three.scene, this.three.camera, params);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'BokehPass',\n};\n","import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n noiseIntensity: {\n type: Number,\n default: 0.5,\n },\n scanlinesIntensity: {\n type: Number,\n default: 0.05,\n },\n scanlinesCount: {\n type: Number,\n default: 4096,\n },\n grayscale: {\n type: Number,\n default: 0,\n },\n },\n watch: {\n noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; },\n scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; },\n scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; },\n grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; },\n },\n mounted() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'FilmPass',\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n const pass = new ShaderPass(FXAAShader);\n this.passes.push(pass);\n this.pass = pass;\n\n // resize will be called in three init\n this.three.onAfterResize(this.resize);\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n const { resolution } = this.pass.material.uniforms;\n resolution.value.x = 1 / this.three.size.width;\n resolution.value.y = 1 / this.three.size.height;\n },\n },\n __hmrId: 'FXAAPass',\n};\n","import { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n },\n mounted() {\n const pass = new HalftonePass(this.three.size.width, this.three.size.height, {});\n\n ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => {\n pass.uniforms[p].value = this[p];\n watch(() => this[p], () => {\n pass.uniforms[p].value = this[p];\n });\n });\n\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'HalftonePass',\n};\n","import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n // three size is not set yet, but this pass will be resized by effect composer\n const pass = new SMAAPass(this.three.size.width, this.three.size.height);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'SMAAPass',\n};\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { Vector2 } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\nimport TiltShift from '../shaders/TiltShift.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object, default: { x: 0, y: 100 } },\n end: { type: Object, default: { x: 10, y: 100 } },\n },\n mounted() {\n this.pass = new ShaderPass(TiltShift);\n this.passes.push(this.pass);\n\n this.pass1 = new ShaderPass(TiltShift);\n this.passes.push(this.pass1);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n const uniforms1 = this.uniforms1 = this.pass1.uniforms;\n uniforms1.blurRadius = uniforms.blurRadius;\n uniforms1.gradientRadius = uniforms.gradientRadius;\n uniforms1.start = uniforms.start;\n uniforms1.end = uniforms.end;\n uniforms1.texSize = uniforms.texSize;\n\n 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 methods: {\n updateFocusLine() {\n this.uniforms.start.value.copy(this.start);\n this.uniforms.end.value.copy(this.end);\n const dv = new Vector2().copy(this.end).sub(this.start).normalize();\n this.uniforms.delta.value.copy(dv);\n this.uniforms1.delta.value.set(-dv.y, dv.x);\n },\n },\n __hmrId: 'TiltShiftPass',\n};\n","import { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n },\n watch: {\n strength() { this.pass.strength = this.strength; },\n radius() { this.pass.radius = this.radius; },\n threshold() { this.pass.threshold = this.threshold; },\n },\n mounted() {\n const size = new Vector2(this.three.size.width, this.three.size.height);\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'UnrealBloomPass',\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport ZoomBlur from '../shaders/ZoomBlur.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n center: { type: Object, default: { x: 0.5, y: 0.5 } },\n strength: { type: Number, default: 0.5 },\n },\n mounted() {\n this.pass = new ShaderPass(ZoomBlur);\n this.passes.push(this.pass);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n bindProp(this, 'center', uniforms.center, 'value');\n bindProp(this, 'strength', uniforms.strength, 'value');\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 '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 '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":["const","let","Plane","i","o","OrthographicCamera","this","PerspectiveCamera","Group","Scene","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","TubeGeometry","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","ShaderMaterial","TShaderMaterial","Mesh","TMesh","InstancedMesh","Sprite","EffectComposer","RenderPass","BokehPass","FilmPass","HalftonePass","SMAAPass","UnrealBloomPass","_createApp"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"trois.module.js","sources":["../src/core/useRaycaster.js","../src/core/usePointer.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 { 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 { 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 { 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 ',\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":["Raycaster","Plane","InstancedMesh","OrthographicCamera","PerspectiveCamera","Group","Scene","props","createGeometry","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","TubeGeometry","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","ShaderMaterial","TShaderMaterial","TMesh","Sprite","EffectComposer","RenderPass","BokehPass","FilmPass","HalftonePass","SMAAPass","SSAOPass","UnrealBloomPass","_createApp"],"mappings":"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"} \ No newline at end of file diff --git a/build/trois.module.min.js b/build/trois.module.min.js index edf5a33..868dd3a 100644 --- a/build/trois.module.min.js +++ b/build/trois.module.min.js @@ -1,2 +1,2 @@ -import{h as e,toRef as t,watch as r,createApp as i}from"vue";import{Vector2 as s,Vector3 as n,Plane as a,Raycaster as o,WebGLRenderer as h,OrthographicCamera as u,PerspectiveCamera as d,Group as m,Scene as c,Color as l,BoxGeometry as f,CircleGeometry as p,ConeGeometry as g,CylinderGeometry as y,DodecahedronGeometry as b,IcosahedronGeometry as v,LatheGeometry as S,OctahedronGeometry as x,PolyhedronGeometry as w,RingGeometry as N,SphereGeometry as _,TetrahedronGeometry as M,TorusGeometry as C,TorusKnotGeometry as G,Curve as z,TubeGeometry as L,AmbientLight as I,DirectionalLight as j,HemisphereLight as P,PointLight as R,RectAreaLight as k,SpotLight as B,FrontSide as E,MeshBasicMaterial as T,MeshLambertMaterial as O,TextureLoader as A,MeshMatcapMaterial as F,MeshPhongMaterial as U,MeshStandardMaterial as D,MeshPhysicalMaterial as $,ShaderMaterial as H,ShaderChunk as W,UniformsUtils as X,ShaderLib as V,MeshToonMaterial as q,UVMapping as Z,ClampToEdgeWrapping as K,LinearFilter as Y,LinearMipmapLinearFilter as J,CubeTextureLoader as Q,CubeRefractionMapping as ee,Mesh as te,BoxBufferGeometry as re,CircleBufferGeometry as ie,ConeBufferGeometry as se,CylinderBufferGeometry as ne,DodecahedronBufferGeometry as ae,IcosahedronBufferGeometry as oe,LatheBufferGeometry as he,OctahedronBufferGeometry as ue,PlaneBufferGeometry as de,PolyhedronBufferGeometry as me,RingBufferGeometry as ce,SphereBufferGeometry as le,TetrahedronBufferGeometry as fe,FontLoader as pe,TextBufferGeometry as ge,TorusBufferGeometry as ye,TorusKnotBufferGeometry as be,CatmullRomCurve3 as ve,WebGLCubeRenderTarget as Se,RGBFormat as xe,CubeCamera as we,BackSide as Ne,DoubleSide as _e,InstancedMesh as Me,SpriteMaterial as Ce,Sprite as Ge}from"three";import{OrbitControls as ze}from"three/examples/jsm/controls/OrbitControls.js";import{RectAreaLightUniformsLib as Le}from"three/examples/jsm/lights/RectAreaLightUniformsLib.js";import{RectAreaLightHelper as Ie}from"three/examples/jsm/helpers/RectAreaLightHelper.js";import{GLTFLoader as je}from"three/examples/jsm/loaders/GLTFLoader.js";import{FBXLoader as Pe}from"three/examples/jsm/loaders/FBXLoader.js";import{EffectComposer as Re}from"three/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as ke}from"three/examples/jsm/postprocessing/RenderPass.js";import{BokehPass as Be}from"three/examples/jsm/postprocessing/BokehPass.js";import{FilmPass as Ee}from"three/examples/jsm/postprocessing/FilmPass.js";import{ShaderPass as Te}from"three/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as Oe}from"three/examples/jsm/shaders/FXAAShader.js";import{HalftonePass as Ae}from"three/examples/jsm/postprocessing/HalftonePass.js";import{SMAAPass as Fe}from"three/examples/jsm/postprocessing/SMAAPass.js";import{UnrealBloomPass as Ue}from"three/examples/jsm/postprocessing/UnrealBloomPass.js";function De(){var e={canvas:null,antialias:!0,alpha:!1,autoClear:!0,orbit_ctrl:!1,mouse_move:!1,mouse_raycast:!1,mouse_over:!1,click:!1,resize:!0,width:0,height:0},t={width:1,height:1,wWidth:1,wHeight:1,ratio:1},r=[],i=[],u=[],d=new s,m=new n,c=new a(new n(0,0,1),0),l=new o,f=[],p={conf:e,renderer:null,camera:null,cameraCtrl:null,materials:{},scene:null,size:t,mouse:d,mouseV3:m,init:function(t){t&&Object.entries(t).forEach((function(t){var r=t[0],i=t[1];e[r]=i}));if(!p.scene)return void console.error("Missing Scene");if(!p.camera)return void console.error("Missing Camera");p.renderer=new h({canvas:e.canvas,antialias:e.antialias,alpha:e.alpha}),p.renderer.autoClear=e.autoClear,e.orbit_ctrl&&(p.orbitCtrl=new ze(p.camera,p.renderer.domElement),e.orbit_ctrl instanceof Object&&Object.entries(e.orbit_ctrl).forEach((function(e){var t=e[0],r=e[1];p.orbitCtrl[t]=r})));e.resize?(x(),window.addEventListener("resize",x)):w(300|e.width,150|e.height);e.mouse_move=e.mouse_move||e.mouse_over,e.mouse_move&&("body"===e.mouse_move?p.mouse_move_element=document.body:p.mouse_move_element=p.renderer.domElement,p.mouse_move_element.addEventListener("mousemove",b),p.mouse_move_element.addEventListener("mouseleave",v));e.click&&p.renderer.domElement.addEventListener("click",y);return r.forEach((function(e){return e()})),!0},dispose:function(){u=[],window.removeEventListener("resize",x),p.mouse_move_element&&(p.mouse_move_element.removeEventListener("mousemove",b),p.mouse_move_element.removeEventListener("mouseleave",v));p.renderer.domElement.removeEventListener("click",y),p.orbitCtrl&&p.orbitCtrl.dispose();this.renderer.dispose()},render:function(){p.orbitCtrl&&p.orbitCtrl.update();u.forEach((function(e){return e()})),p.renderer.render(p.scene,p.camera)},renderC:function(){p.orbitCtrl&&p.orbitCtrl.update();u.forEach((function(e){return e()})),p.composer.render()},setSize:w,onAfterInit:function(e){r.push(e)},onAfterResize:function(e){i.push(e)},offAfterResize:function(e){i=i.filter((function(t){return t!==e}))},onBeforeRender:function(e){u.push(e)},offBeforeRender:function(e){u=u.filter((function(t){return t!==e}))},addIntersectObject:function(e){-1===f.indexOf(e)&&f.push(e)},removeIntersectObject:function(e){var t=f.indexOf(e);-1!==t&&f.splice(t,1)}};function g(e){var r=e.target.getBoundingClientRect();d.x=(e.clientX-r.left)/t.width*2-1,d.y=-(e.clientY-r.top)/t.height*2+1}function y(e){g(e),l.setFromCamera(d,p.camera);for(var t=l.intersectObjects(f),r=0;r1?1:r)}function Ze(e,t,r){e.x=qe(e.x,t.x,r),e.y=qe(e.y,t.y,r)}function Ke(e,t,r){e.x=qe(e.x,t.x,r),e.y=qe(e.y,t.y,r),e.z=qe(e.z,t.z,r)}function Ye(e,t,r){return er?r:e}function Je(e,t){return void 0===t&&(t=1024),"https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/"+t+"/"+(""+e+function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)+".png")}var Qe="\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}",et="\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}",tt={name:"OrthographicCamera",inject:["three"],props:{left:{type:Number,default:-1},right:{type:Number,default:1},top:{type:Number,default:1},bottom:{type:Number,default:-1},near:{type:Number,default:.1},far:{type:Number,default:2e3},zoom:{type:Number,default:1},position:{type:Object,default:{x:0,y:0,z:0}}},created:function(){var e=this;this.camera=new u(this.left,this.right,this.top,this.bottom,this.near,this.far),Xe(this,"position",this.camera),["left","right","top","bottom","near","far","zoom"].forEach((function(t){r((function(){return e[t]}),(function(){e.camera[t]=e[t],e.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},render:function(){return[]},__hmrId:"OrthographicCamera"},rt={name:"PerspectiveCamera",inject:["three"],props:{aspect:{type:Number,default:1},far:{type:Number,default:2e3},fov:{type:Number,default:50},near:{type:Number,default:.1},position:{type:Object,default:{x:0,y:0,z:0}},lookAt:{type:Object,default:null}},created:function(){var e=this;this.camera=new d(this.fov,this.aspect,this.near,this.far),Xe(this,"position",this.camera),this.lookAt&&this.camera.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),r((function(){return e.lookAt}),(function(t){e.camera.lookAt(t.x,t.y,t.z)}),{deep:!0}),["aspect","far","fov","near"].forEach((function(t){r((function(){return e[t]}),(function(){e.camera[t]=e[t],e.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},render:function(){return[]},__hmrId:"PerspectiveCamera"},it={name:"Object3D",inject:["three","scene","rendererComponent"],props:{position:{type:Object,default:{x:0,y:0,z:0}},rotation:{type:Object,default:{x:0,y:0,z:0}},scale:{type:Object,default:{x:1,y:1,z:1}},lookAt:{type:Object,default:null}},unmounted:function(){this._parent&&this._parent.remove(this.o3d)},methods:{initObject3D:function(e){var t=this;this.o3d=e,Xe(this,"position",this.o3d),Xe(this,"rotation",this.o3d),Xe(this,"scale",this.o3d),this.lookAt&&this.o3d.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),r((function(){return t.lookAt}),(function(e){t.o3d.lookAt(e.x,e.y,e.z)}),{deep:!0});for(var i=this.$parent;i;){if(i.add){i.add(this.o3d),this._parent=i;break}i=i.$parent}this._parent||console.error("Missing parent (Scene, Group...)")},add:function(e){this.o3d.add(e)},remove:function(e){this.o3d.remove(e)}},render:function(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Object3D"},st={name:"Group",extends:it,created:function(){this.group=new m,this.initObject3D(this.group)},__hmrId:"Group"},nt={name:"Scene",inject:["three"],props:{id:String,background:[String,Number]},setup:function(e){var t=new c;return e.background&&(t.background=new l(e.background)),r((function(){return e.background}),(function(e){t.background.set(e)})),{scene:t}},provide:function(){return{scene:this.scene}},mounted:function(){this.three.scene||(this.three.scene=this.scene)},methods:{add:function(e){this.scene.add(e)},remove:function(e){this.scene.remove(e)}},render:function(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Scene"},at={inject:["mesh"],props:{rotateX:Number,rotateY:Number,rotateZ:Number},created:function(){var e=this;this.mesh||console.error("Missing parent Mesh"),this.watchProps=[],Object.entries(this.$props).forEach((function(t){return e.watchProps.push(t[0])})),this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),this.addWatchers()},unmounted:function(){this.geometry.dispose()},methods:{addWatchers:function(){var e=this;this.watchProps.forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},rotateGeometry:function(){this.rotateX&&this.geometry.rotateX(this.rotateX),this.rotateY&&this.geometry.rotateY(this.rotateY),this.rotateZ&&this.geometry.rotateZ(this.rotateZ)},refreshGeometry:function(){var e=this.geometry;this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),e.dispose()}},render:function(){return[]}},ot={extends:at,props:{size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}},methods:{createGeometry:function(){var e=this.width,t=this.height,r=this.depth;this.size&&(e=this.size,t=this.size,r=this.size),this.geometry=new f(e,t,r,this.widthSegments,this.heightSegments,this.depthSegments)}}},ht={extends:at,props:{radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new p(this.radius,this.segments,this.thetaStart,this.thetaLength)}}},ut={extends:at,props:{radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new g(this.radius,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}}},dt={extends:at,props:{radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new y(this.radiusTop,this.radiusBottom,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}}},mt={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new b(this.radius,this.detail)}}},ct={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new v(this.radius,this.detail)}}},lt={extends:at,props:{points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new S(this.points,this.segments,this.phiStart,this.phiLength)}}},ft={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new x(this.radius,this.detail)}}},pt={extends:at,props:{vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new w(this.vertices,this.indices,this.radius,this.detail)}}},gt={extends:at,props:{innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new N(this.innerRadius,this.outerRadius,this.thetaSegments,this.phiSegments,this.thetaStart,this.thetaLength)}}},yt={extends:at,props:{radius:{type:Number,default:1},widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12}},methods:{createGeometry:function(){this.geometry=new _(this.radius,this.widthSegments,this.heightSegments)}}},bt={extends:at,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},methods:{createGeometry:function(){this.geometry=new M(this.radius,this.detail)}}},vt={extends:at,props:{radius:{type:Number,default:1},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:2*Math.PI}},methods:{createGeometry:function(){this.geometry=new C(this.radius,this.tube,this.radialSegments,this.tubularSegments,this.arc)}}},St={extends:at,props:{radius:{type:Number,default:1},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}},methods:{createGeometry:function(){this.geometry=new G(this.radius,this.tube,this.tubularSegments,this.radialSegments,this.p,this.q)}}},xt={extends:at,props:{path:z,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radiusSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}},methods:{createGeometry:function(){this.geometry=new L(this.path,this.tubularSegments,this.radius,this.radiusSegments,this.closed)}}},wt={extends:it,name:"Light",props:{color:{type:String,default:"#ffffff"},intensity:{type:Number,default:1},castShadow:{type:Boolean,default:!1},shadowMapSize:{type:Object,default:{x:512,y:512}},shadowCamera:{type:Object,default:{}}},unmounted:function(){this.light.target&&this.$parent.remove(this.light.target)},methods:{initLight:function(){var e=this;this.light.target&&Xe(this,"target",this.light.target,"position"),this.light.shadow&&(this.light.castShadow=this.castShadow,He(this.light.shadow.mapSize,this.shadowMapSize),He(this.light.shadow.camera,this.shadowCamera)),["color","intensity","castShadow"].forEach((function(t){r((function(){return e[t]}),(function(){"color"===t?e.light.color.set(e.color):e.light[t]=e[t]}))})),this.initObject3D(this.light),this.light.target&&this.$parent.add(this.light.target)}},__hmrId:"Light"},Nt={extends:wt,created:function(){this.light=new I(this.color,this.intensity),this.initLight()},__hmrId:"AmbientLight"},_t={extends:wt,props:{target:Object},created:function(){this.light=new j(this.color,this.intensity),this.initLight()},__hmrId:"DirectionalLight"},Mt={extends:wt,props:{groundColor:{type:String,default:"#444444"}},created:function(){var e=this;this.light=new P(this.color,this.groundColor,this.intensity),r((function(){return e.groundColor}),(function(t){e.light.groundColor.set(t)})),this.initLight()},__hmrId:"HemisphereLight"},Ct={extends:wt,props:{distance:{type:Number,default:0},decay:{type:Number,default:1}},created:function(){this.light=new R(this.color,this.intensity,this.distance,this.decay),this.initLight()},__hmrId:"PointLight"},Gt={extends:wt,props:{width:{type:Number,default:10},height:{type:Number,default:10},helper:Boolean},created:function(){var e=this;Le.init(),this.light=new k(this.color,this.intensity,this.width,this.height),["width","height"].forEach((function(t){r((function(){return e[t]}),(function(){e.light[t]=e[t]}))})),this.helper&&(this.lightHelper=new Ie(this.light),this.$parent.add(this.lightHelper)),this.initLight()},unmounted:function(){this.lightHelper&&this.$parent.remove(this.lightHelper)},__hmrId:"RectAreaLight"},zt={extends:wt,props:{angle:{type:Number,default:Math.PI/3},decay:{type:Number,default:1},distance:{type:Number,default:0},penumbra:{type:Number,default:0},target:Object},created:function(){var e=this;this.light=new B(this.color,this.intensity,this.distance,this.angle,this.penumbra,this.decay),["angle","decay","distance","penumbra"].forEach((function(t){r((function(){return e[t]}),(function(){e.light[t]=e[t]}))})),this.initLight()},__hmrId:"SpotLight"},Lt={inject:["three","mesh"],props:{color:{type:[String,Number],default:"#ffffff"},depthTest:{type:Boolean,default:!0},depthWrite:{type:Boolean,default:!0},fog:{type:Boolean,default:!0},opacity:{type:Number,default:1},side:{type:Number,default:E},transparent:Boolean,vertexColors:Boolean},provide:function(){return{material:this}},created:function(){this.createMaterial(),this.mesh.setMaterial(this.material),this._addWatchers(),this.addWatchers&&this.addWatchers()},unmounted:function(){this.material.dispose()},methods:{setProp:function(e,t,r){void 0===r&&(r=!1),this.material[e]=t,this.material.needsUpdate=r},setTexture:function(e,t){void 0===t&&(t="map"),this.setProp(t,e,!0)},_addWatchers:function(){var e=this;["color","depthTest","depthWrite","fog","opacity","side","transparent"].forEach((function(t){r((function(){return e[t]}),(function(){"color"===t?e.material.color.set(e.color):e.material[t]=e[t]}))}))}},render:function(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Material"},It={wireframe:{type:Boolean,default:!1},wireframeLinewidth:{type:Number,default:1}},jt={extends:Lt,props:Object.assign({},It),methods:{createMaterial:function(){this.material=new T(Ve(this.$props))},addWatchers:function(){We(this,Object.keys(It),this.material)}},__hmrId:"BasicMaterial"},Pt={extends:Lt,props:Object.assign({},It),methods:{createMaterial:function(){this.material=new O(Ve(this.$props))},addWatchers:function(){We(this,Object.keys(It),this.material)}},__hmrId:"LambertMaterial"},Rt={extends:Lt,props:{src:String,name:String,flatShading:Boolean},methods:{createMaterial:function(){var e=this.name?Je(this.name):this.src,t=Ve(this.$props,["src","name"]);t.matcap=(new A).load(e),this.material=new F(t)},addWatchers:function(){}},__hmrId:"MatcapMaterial"},kt={extends:Lt,props:Object.assign({},{emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},reflectivity:{type:Number,default:1},shininess:{type:Number,default:30},specular:{type:[String,Number],default:1118481},flatShading:Boolean},It),methods:{createMaterial:function(){this.material=new U(Ve(this.$props))},addWatchers:function(){var e=this;["emissive","emissiveIntensity","reflectivity","shininess","specular"].forEach((function(t){r((function(){return e[t]}),(function(r){"emissive"===t||"specular"===t?e.material[t].set(r):e.material[t]=r}))})),We(this,Object.keys(It),this.material)}},__hmrId:"PhongMaterial"},Bt={aoMapIntensity:{type:Number,default:1},bumpScale:{type:Number,default:1},displacementBias:{type:Number,default:0},displacementScale:{type:Number,default:1},emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},envMapIntensity:{type:Number,default:1},lightMapIntensity:{type:Number,default:1},metalness:{type:Number,default:0},normalScale:{type:Object,default:{x:1,y:1}},roughness:{type:Number,default:1},refractionRatio:{type:Number,default:.98},flatShading:Boolean},Et={extends:Lt,props:Object.assign({},Bt,It),methods:{createMaterial:function(){this.material=new D(Ve(this.$props,["normalScale"]))},addWatchers:function(){var e=this;Object.keys(Bt).forEach((function(t){"normalScale"!==t&&r((function(){return e[t]}),(function(r){"emissive"===t?e.material[t].set(r):e.material[t]=r}))})),Xe(this,"normalScale",this.material),We(this,Object.keys(It),this.material)}},__hmrId:"StandardMaterial"},Tt={extends:Et,props:{flatShading:Boolean},methods:{createMaterial:function(){this.material=new $(Ve(this.$props))},addWatchers:function(){}},__hmrId:"PhysicalMaterial"},Ot={inject:["three","mesh"],props:{uniforms:{type:Object,default:function(){return{}}},vertexShader:{type:String,default:Qe},fragmentShader:{type:String,default:et}},created:function(){var e=this;this.createMaterial(),["vertexShader","fragmentShader"].forEach((function(t){r((function(){return e[t]}),(function(){e.material.dispose(),e.createMaterial()}))}))},unmounted:function(){this.material.dispose()},methods:{createMaterial:function(){this.material=new H(Ve(this.$props)),this.mesh.setMaterial(this.material)}},render:function(){return[]},__hmrId:"ShaderMaterial"};var At,Ft,Ut,Dt=W.meshphong_frag.slice(0,W.meshphong_frag.indexOf("void main() {")),$t=W.meshphong_frag.slice(W.meshphong_frag.indexOf("void main() {")),Ht={uniforms:X.merge([V.phong.uniforms,{thicknessColor:{value:new l(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:"\n #define USE_UV\n "+W.meshphong_vert+"\n ",fragmentShader:"\n #define USE_UV\n #define SUBSURFACE\n\n "+Dt+"\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 "+$t.replace("#include ",(At=W.lights_fragment_begin,Ft="RE_Direct( directLight, geometry, material, reflectedLight );",Ut="\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 ",At.split(Ft).join(Ut)))},Wt={inject:["three","mesh"],props:{color:{type:String,default:"#ffffff"},thicknessColor:{type:String,default:"#ffffff"},thicknessDistortion:{type:Number,default:.4},thicknessAmbient:{type:Number,default:.01},thicknessAttenuation:{type:Number,default:.7},thicknessPower:{type:Number,default:2},thicknessScale:{type:Number,default:4},transparent:{type:Boolean,default:!1},opacity:{type:Number,default:1},vertexColors:{type:Boolean,default:!1}},created:function(){this.createMaterial(),this.mesh.setMaterial(this.material)},unmounted:function(){this.material.dispose()},methods:{createMaterial:function(){var e=Ht,t=X.clone(e.uniforms);Object.entries(this.$props).forEach((function(e){var r=e[0],i=e[1],s=r,n=i;["color","thicknessColor"].includes(r)&&("color"===r&&(s="diffuse"),n=new l(i)),["transparent","vertexColors"].includes(r)||(t[s].value=n)})),this.material=new H(Object.assign({},e,{uniforms:t,lights:!0,transparent:this.transparent,vertexColors:this.vertexColors}))}},render:function(){return[]},__hmrId:"SubSurfaceMaterial"},Xt={extends:Lt,props:Object.assign({},It),methods:{createMaterial:function(){this.material=new q(Ve(this.$props))},addWatchers:function(){We(this,Object.keys(It),this.material)}},__hmrId:"ToonMaterial"},Vt={inject:["material"],emits:["loaded"],props:{id:{type:String,default:"map"},src:String,onLoad:Function,onProgress:Function,onError:Function,mapping:{type:Number,default:Z},wrapS:{type:Number,default:K},wrapT:{type:Number,default:K},magFilter:{type:Number,default:Y},minFilter:{type:Number,default:J},repeat:{type:Object,default:{x:1,y:1}},rotation:{type:Number,default:0},center:{type:Object,default:{x:0,y:0}}},created:function(){var e=this;this.refreshTexture(),r((function(){return e.src}),this.refreshTexture)},unmounted:function(){this.material.setTexture(null,this.id),this.texture.dispose()},methods:{createTexture:function(){var e=this;this.texture=(new A).load(this.src,this.onLoaded,this.onProgress,this.onError);["mapping","wrapS","wrapT","magFilter","minFilter","repeat","rotation","rotation","center"].forEach((function(t){Xe(e,t,e.texture)}))},refreshTexture:function(){this.createTexture(),this.material.setTexture(this.texture,this.id)},onLoaded:function(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:function(){return[]}},qt={inject:["material"],emits:["loaded"],props:{path:String,urls:{type:Array,default:["px.jpg","nx.jpg","py.jpg","ny.jpg","pz.jpg","nz.jpg"]},onLoad:Function,onProgress:Function,onError:Function,id:{type:String,default:"envMap"},refraction:Boolean,refractionRatio:{type:Number,default:.98}},created:function(){var e=this;this.refreshTexture(),r((function(){return e.path}),this.refreshTexture),r((function(){return e.urls}),this.refreshTexture)},unmounted:function(){this.material.setTexture(null,this.id),this.texture.dispose()},methods:{createTexture:function(){this.texture=(new Q).setPath(this.path).load(this.urls,this.onLoaded,this.onProgress,this.onError)},refreshTexture:function(){this.createTexture(),this.material.setTexture(this.texture,this.id),this.refraction&&(this.texture.mapping=ee,this.material.setProp("refractionRatio",this.refractionRatio))},onLoaded:function(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:function(){return[]}},Zt={extends:it,name:"Mesh",props:{castShadow:Boolean,receiveShadow:Boolean,onHover:Function,onClick:Function},provide:function(){return{mesh:this}},mounted:function(){this.mesh||this.loading||this.initMesh()},methods:{initMesh:function(){var e=this;this.mesh=new te(this.geometry,this.material),["castShadow","receiveShadow"].forEach((function(t){e.mesh[t]=e[t],r((function(){return e[t]}),(function(){e.mesh[t]=e[t]}))})),this.onHover&&(this.mesh.onHover=function(t){e.onHover({component:e,over:t})},this.three.addIntersectObject(this.mesh)),this.onClick&&(this.mesh.onClick=function(t){e.onClick({component:e,event:t})},this.three.addIntersectObject(this.mesh)),this.initObject3D(this.mesh)},setGeometry:function(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial:function(e){this.material=e,this.mesh&&(this.mesh.material=e)},refreshGeometry:function(){var e=this.geometry;this.createGeometry(),this.mesh.geometry=this.geometry,e.dispose()}},unmounted:function(){this.mesh&&this.three.removeIntersectObject(this.mesh),this.geometry&&this.geometry.dispose(),this.material&&this.material.dispose()},__hmrId:"Mesh"},Kt={extends:Zt,props:{size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}},created:function(){var e=this;this.createGeometry(),["size","width","height","depth","widthSegments","heightSegments","depthSegments"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.size?this.geometry=new re(this.size,this.size,this.size):this.geometry=new re(this.width,this.height,this.depth)}},__hmrId:"Box"},Yt={extends:Zt,props:{radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radius","segments","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ie(this.radius,this.segments,this.thetaStart,this.thetaLength)}},__hmrId:"Circle"},Jt={extends:Zt,props:{radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radius","height","radialSegments","heightSegments","openEnded","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new se(this.radius,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}},__hmrId:"Cone"},Qt={extends:Zt,props:{radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radiusTop","radiusBottom","height","radialSegments","heightSegments","openEnded","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ne(this.radiusTop,this.radiusBottom,this.height,this.radialSegments,this.heightSegments,this.openEnded,this.thetaStart,this.thetaLength)}},__hmrId:"Cylinder"},er={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ae(this.radius,this.detail)}},__hmrId:"Dodecahedron"},tr={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new oe(this.radius,this.detail)}},__hmrId:"Icosahedron"},rr={extends:Zt,props:{points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["points","segments","phiStart","phiLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new he(this.points,this.segments,this.phiStart,this.phiLength)}},__hmrId:"Lathe"},ir={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ue(this.radius,this.detail)}},__hmrId:"Octahedron"},sr={extends:Zt,props:{width:{type:Number,default:1},height:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1}},created:function(){var e=this;this.createGeometry();["width","height","widthSegments","heightSegments"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new de(this.width,this.height,this.widthSegments,this.heightSegments)}},__hmrId:"Plane"},nr={extends:Zt,props:{vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["vertices","indices","radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new me(this.vertices,this.indices,this.radius,this.detail)}},__hmrId:"Polyhedron"},ar={extends:Zt,props:{innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["innerRadius","outerRadius","thetaSegments","phiSegments","thetaStart","thetaLength"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ce(this.innerRadius,this.outerRadius,this.thetaSegments,this.phiSegments,this.thetaStart,this.thetaLength)}},__hmrId:"Ring"},or={extends:Zt,props:{radius:Number,widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12}},watch:{radius:function(){this.refreshGeometry()},widthSegments:function(){this.refreshGeometry()},heightSegments:function(){this.refreshGeometry()}},created:function(){this.createGeometry()},methods:{createGeometry:function(){this.geometry=new le(this.radius,this.widthSegments,this.heightSegments)}},__hmrId:"Sphere"},hr={extends:Zt,props:{radius:{type:Number,default:1},detail:{type:Number,default:0}},created:function(){var e=this;this.createGeometry();["radius","detail"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new fe(this.radius,this.detail)}},__hmrId:"Tetrahedron"},ur={text:String,fontSrc:String,size:{type:Number,default:80},height:{type:Number,default:5},depth:{type:Number,default:1},curveSegments:{type:Number,default:12},bevelEnabled:{type:Boolean,default:!1},bevelThickness:{type:Number,default:10},bevelSize:{type:Number,default:8},bevelOffset:{type:Number,default:0},bevelSegments:{type:Number,default:5},align:{type:[Boolean,String],default:!1}},dr={extends:Zt,props:Object.assign({},ur),data:function(){return{loading:!0}},created:function(){var e=this;["text","size","height","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align"].forEach((function(t){r((function(){return e[t]}),(function(){e.font&&e.refreshGeometry()}))})),(new pe).load(this.fontSrc,(function(t){e.loading=!1,e.font=t,e.createGeometry(),e.initMesh()}))},methods:{createGeometry:function(){this.geometry=new ge(this.text,{font:this.font,size:this.size,height:this.height,depth:this.depth,curveSegments:this.curveSegments,bevelEnabled:this.bevelEnabled,bevelThickness:this.bevelThickness,bevelSize:this.bevelSize,bevelOffset:this.bevelOffset,bevelSegments:this.bevelSegments}),"center"===this.align&&this.geometry.center()}}},mr={extends:Zt,props:{radius:{type:Number,default:.5},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:2*Math.PI}},created:function(){var e=this;this.createGeometry();["radius","tube","radialSegments","tubularSegments","arc"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new ye(this.radius,this.tube,this.radialSegments,this.tubularSegments,this.arc)}},__hmrId:"Torus"},cr={extends:Zt,props:{radius:{type:Number,default:.5},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}},created:function(){var e=this;this.createGeometry();["radius","tube","radialSegments","tubularSegments","p","q"].forEach((function(t){r((function(){return e[t]}),(function(){e.refreshGeometry()}))}))},methods:{createGeometry:function(){this.geometry=new be(this.radius,this.tube,this.tubularSegments,this.radialSegments,this.p,this.q)}},__hmrId:"TorusKnot"},lr={extends:Zt,props:{path:z,points:Array,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radialSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}},created:function(){var e=this;this.createGeometry();["tubularSegments","radius","radialSegments","closed"].forEach((function(t){r((function(){return e[t]}),(function(t){e.refreshGeometry()}))})),r((function(){return e.points}),(function(){fr(e.geometry,e.points)}))},methods:{createGeometry:function(){var e;this.points?e=new ve(this.points):this.path?e=this.path:console.error("Missing path curve or points."),this.geometry=new L(e,this.tubularSegments,this.radius,this.radialSegments,this.closed)},updateCurve:function(e){fr(this.geometry,e)}},__hmrId:"Tube"};function fr(e,t){var r=new ve(t),i=e.parameters,s=i.radialSegments,a=i.radius,o=i.tubularSegments,h=i.closed,u=r.computeFrenetFrames(o,h);e.tangents=u.tangents,e.normals=u.normals,e.binormals=u.binormals,e.parameters.path=r;for(var d,m=e.attributes.position.array,c=e.attributes.normal.array,l=new n,f=0;f1?t=.5/this.iRatio:e=.5/this.iRatio;var r=this.geometry.attributes.position.array;r[0]=-e,r[1]=-t,r[5]=e,r[6]=-t,r[10]=e,r[11]=t,r[15]=-e,r[16]=t,this.geometry.attributes.position.needsUpdate=!0}},__hmrId:"Sprite"},xr={extends:it,emits:["loaded"],props:{src:String},created:function(){var e=this;(new je).load(this.src,(function(t){e.$emit("loaded",t),e.initObject3D(t.scene)}))}},wr={extends:it,emits:["loaded"],props:{src:String},created:function(){var e=this;(new Pe).load(this.src,(function(t){e.$emit("loaded",t),e.initObject3D(t)}))}},Nr={setup:function(){return{passes:[]}},inject:["three"],provide:function(){return{passes:this.passes}},mounted:function(){var e=this;this.three.onAfterInit((function(){e.composer=new Re(e.three.renderer),e.three.renderer.autoClear=!1,e.passes.forEach((function(t){e.composer.addPass(t)})),e.three.composer=e.composer,e.resize(),e.three.onAfterResize(e.resize)}))},unmounted:function(){this.three.offAfterResize(this.resize)},methods:{resize:function(){this.composer.setSize(this.three.size.width,this.three.size.height)}},render:function(){return this.$slots.default()},__hmrId:"EffectComposer"},_r={inject:["three","passes"],beforeMount:function(){this.passes||console.error("Missing parent EffectComposer")},unmounted:function(){this.pass.dispose&&this.pass.dispose()},render:function(){return[]},__hmrId:"EffectPass"},Mr={extends:_r,mounted:function(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");var e=new ke(this.three.scene,this.three.camera);this.passes.push(e),this.pass=e},__hmrId:"RenderPass"},Cr={extends:_r,props:{focus:{type:Number,default:1},aperture:{type:Number,default:.025},maxblur:{type:Number,default:.01}},watch:{focus:function(){this.pass.uniforms.focus.value=this.focus},aperture:function(){this.pass.uniforms.aperture.value=this.aperture},maxblur:function(){this.pass.uniforms.maxblur.value=this.maxblur}},mounted:function(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");var e={focus:this.focus,aperture:this.aperture,maxblur:this.maxblur,width:this.three.size.width,height:this.three.size.height},t=new Be(this.three.scene,this.three.camera,e);this.passes.push(t),this.pass=t},__hmrId:"BokehPass"},Gr={extends:_r,props:{noiseIntensity:{type:Number,default:.5},scanlinesIntensity:{type:Number,default:.05},scanlinesCount:{type:Number,default:4096},grayscale:{type:Number,default:0}},watch:{noiseIntensity:function(){this.pass.uniforms.nIntensity.value=this.noiseIntensity},scanlinesIntensity:function(){this.pass.uniforms.sIntensity.value=this.scanlinesIntensity},scanlinesCount:function(){this.pass.uniforms.sCount.value=this.scanlinesCount},grayscale:function(){this.pass.uniforms.grayscale.value=this.grayscale}},mounted:function(){var e=new Ee(this.noiseIntensity,this.scanlinesIntensity,this.scanlinesCount,this.grayscale);this.passes.push(e),this.pass=e},__hmrId:"FilmPass"},zr={extends:_r,mounted:function(){var e=new Te(Oe);this.passes.push(e),this.pass=e,this.three.onAfterResize(this.resize)},unmounted:function(){this.three.offAfterResize(this.resize)},methods:{resize:function(){var e=this.pass.material.uniforms.resolution;e.value.x=1/this.three.size.width,e.value.y=1/this.three.size.height}},__hmrId:"FXAAPass"},Lr={extends:_r,props:{shape:{type:Number,default:1},radius:{type:Number,default:4},rotateR:{type:Number,default:Math.PI/12*1},rotateG:{type:Number,default:Math.PI/12*2},rotateB:{type:Number,default:Math.PI/12*3},scatter:{type:Number,default:0}},mounted:function(){var e=this,t=new Ae(this.three.size.width,this.three.size.height,{});["shape","radius","rotateR","rotateG","rotateB","scatter"].forEach((function(i){t.uniforms[i].value=e[i],r((function(){return e[i]}),(function(){t.uniforms[i].value=e[i]}))})),this.passes.push(t),this.pass=t},__hmrId:"HalftonePass"},Ir={extends:_r,mounted:function(){var e=new Fe(this.three.size.width,this.three.size.height);this.passes.push(e),this.pass=e},__hmrId:"SMAAPass"},jr="\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",Pr={uniforms:{tDiffuse:{value:null},blurRadius:{value:0},gradientRadius:{value:0},start:{value:new s},end:{value:new s},delta:{value:new s},texSize:{value:new s}},vertexShader:jr,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 "},Rr={extends:_r,props:{blurRadius:{type:Number,default:10},gradientRadius:{type:Number,default:100},start:{type:Object,default:{x:0,y:100}},end:{type:Object,default:{x:10,y:100}}},mounted:function(){var e=this;this.pass=new Te(Pr),this.passes.push(this.pass),this.pass1=new Te(Pr),this.passes.push(this.pass1);var t=this.uniforms=this.pass.uniforms,i=this.uniforms1=this.pass1.uniforms;i.blurRadius=t.blurRadius,i.gradientRadius=t.gradientRadius,i.start=t.start,i.end=t.end,i.texSize=t.texSize,Xe(this,"blurRadius",t.blurRadius,"value"),Xe(this,"gradientRadius",t.gradientRadius,"value"),this.updateFocusLine(),["start","end"].forEach((function(t){r((function(){return e[t]}),e.updateFocusLine,{deep:!0})})),this.pass.setSize=function(e,r){t.texSize.value.set(e,r)}},methods:{updateFocusLine:function(){this.uniforms.start.value.copy(this.start),this.uniforms.end.value.copy(this.end);var e=(new s).copy(this.end).sub(this.start).normalize();this.uniforms.delta.value.copy(e),this.uniforms1.delta.value.set(-e.y,e.x)}},__hmrId:"TiltShiftPass"},kr={extends:_r,props:{strength:{type:Number,default:1.5},radius:{type:Number,default:0},threshold:{type:Number,default:0}},watch:{strength:function(){this.pass.strength=this.strength},radius:function(){this.pass.radius=this.radius},threshold:function(){this.pass.threshold=this.threshold}},mounted:function(){var e=new s(this.three.size.width,this.three.size.height),t=new Ue(e,this.strength,this.radius,this.threshold);this.passes.push(t),this.pass=t},__hmrId:"UnrealBloomPass"},Br={uniforms:{tDiffuse:{value:null},center:{value:new s(.5,.5)},strength:{value:0}},vertexShader:jr,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 "},Er={extends:_r,props:{center:{type:Object,default:{x:.5,y:.5}},strength:{type:Number,default:.5}},mounted:function(){this.pass=new Te(Br),this.passes.push(this.pass);var e=this.uniforms=this.pass.uniforms;Xe(this,"center",e.center,"value"),Xe(this,"strength",e.strength,"value")},__hmrId:"ZoomBlurPass"},Tr=Object.freeze({__proto__:null,Renderer:$e,OrthographicCamera:tt,PerspectiveCamera:rt,Camera:rt,Group:st,Scene:nt,BoxGeometry:ot,CircleGeometry:ht,ConeGeometry:ut,CylinderGeometry:dt,DodecahedronGeometry:mt,IcosahedronGeometry:ct,LatheGeometry:lt,OctahedronGeometry:ft,PolyhedronGeometry:pt,RingGeometry:gt,SphereGeometry:yt,TetrahedronGeometry:bt,TorusGeometry:vt,TorusKnotGeometry:St,TubeGeometry:xt,AmbientLight:Nt,DirectionalLight:_t,HemisphereLight:Mt,PointLight:Ct,RectAreaLight:Gt,SpotLight:zt,BasicMaterial:jt,LambertMaterial:Pt,MatcapMaterial:Rt,PhongMaterial:kt,PhysicalMaterial:Tt,ShaderMaterial:Ot,StandardMaterial:Et,SubSurfaceMaterial:Wt,ToonMaterial:Xt,Texture:Vt,CubeTexture:qt,Mesh:Zt,Box:Kt,Circle:Yt,Cone:Jt,Cylinder:Qt,Dodecahedron:er,Icosahedron:tr,Lathe:rr,Octahedron:ir,Plane:sr,Polyhedron:nr,Ring:ar,Sphere:or,Tetrahedron:hr,Text:dr,Torus:mr,TorusKnot:cr,Tube:lr,Gem:pr,Image:gr,InstancedMesh:yr,MirrorMesh:br,RefractionMesh:vr,Sprite:Sr,GLTFModel:xr,FBXModel:wr,EffectComposer:Nr,RenderPass:Mr,BokehPass:Cr,FilmPass:Gr,FXAAPass:zr,HalftonePass:Lr,SMAAPass:Ir,TiltShiftPass:Rr,UnrealBloomPass:kr,ZoomBlurPass:Er,setFromProp:He,bindProps:We,bindProp:Xe,propsValues:Ve,lerp:qe,lerpv2:Ze,lerpv3:Ke,limit:Ye,getMatcapUrl:Je,defaultVertexShader:Qe,defaultFragmentShader:et}),Or={install:function(e){["Camera","OrthographicCamera","PerspectiveCamera","Renderer","Scene","Group","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","BasicMaterial","LambertMaterial","MatcapMaterial","PhongMaterial","PhysicalMaterial","ShaderMaterial","StandardMaterial","SubSurfaceMaterial","ToonMaterial","Texture","CubeTexture","Mesh","Box","BoxGeometry","Circle","CircleGeometry","Cone","ConeGeometry","Cylinder","CylinderGeometry","Dodecahedron","DodecahedronGeometry","Icosahedron","IcosahedronGeometry","Lathe","LatheGeometry","Octahedron","OctahedronGeometry","Plane","Polyhedron","PolyhedronGeometry","Ring","RingGeometry","Sphere","SphereGeometry","Tetrahedron","TetrahedronGeometry","Text","Torus","TorusGeometry","TorusKnot","TorusKnotGeometry","Tube","TubeGeometry","Gem","Image","InstancedMesh","MirrorMesh","RefractionMesh","Sprite","FBXModel","GLTFModel","BokehPass","EffectComposer","FilmPass","FXAAPass","HalftonePass","RenderPass","SAOPass","SMAAPass","TiltShiftPass","UnrealBloomPass","ZoomBlurPass","GLTFViewer"].forEach((function(t){e.component(t,Tr[t])}))}};function Ar(e){return i(e).use(Or)}export{Nt as AmbientLight,jt as BasicMaterial,Cr as BokehPass,Kt as Box,ot as BoxGeometry,rt as Camera,Yt as Circle,ht as CircleGeometry,Jt as Cone,ut as ConeGeometry,qt as CubeTexture,Qt as Cylinder,dt as CylinderGeometry,_t as DirectionalLight,er as Dodecahedron,mt as DodecahedronGeometry,Nr as EffectComposer,wr as FBXModel,zr as FXAAPass,Gr as FilmPass,xr as GLTFModel,pr as Gem,st as Group,Lr as HalftonePass,Mt as HemisphereLight,tr as Icosahedron,ct as IcosahedronGeometry,gr as Image,yr as InstancedMesh,Pt as LambertMaterial,rr as Lathe,lt as LatheGeometry,Rt as MatcapMaterial,Zt as Mesh,br as MirrorMesh,ir as Octahedron,ft as OctahedronGeometry,tt as OrthographicCamera,rt as PerspectiveCamera,kt as PhongMaterial,Tt as PhysicalMaterial,sr as Plane,Ct as PointLight,nr as Polyhedron,pt as PolyhedronGeometry,Gt as RectAreaLight,vr as RefractionMesh,Mr as RenderPass,$e as Renderer,ar as Ring,gt as RingGeometry,Ir as SMAAPass,nt as Scene,Ot as ShaderMaterial,or as Sphere,yt as SphereGeometry,zt as SpotLight,Sr as Sprite,Et as StandardMaterial,Wt as SubSurfaceMaterial,hr as Tetrahedron,bt as TetrahedronGeometry,dr as Text,Vt as Texture,Rr as TiltShiftPass,Xt as ToonMaterial,mr as Torus,vt as TorusGeometry,cr as TorusKnot,St as TorusKnotGeometry,Or as TroisJSVuePlugin,lr as Tube,xt as TubeGeometry,kr as UnrealBloomPass,Er as ZoomBlurPass,Xe as bindProp,We as bindProps,Ar as createApp,et as defaultFragmentShader,Qe as defaultVertexShader,Je as getMatcapUrl,qe as lerp,Ze as lerpv2,Ke as lerpv3,Ye as limit,Ve as propsValues,He as setFromProp}; +import{defineComponent as e,h as t,toRef as r,watch as s,createApp as i}from"vue";import{VRButton as a}from"three/examples/jsm/webxr/VRButton.js";import{Vector3 as n,Raycaster as o,Plane as h,Vector2 as d,InstancedMesh as m,WebGLRenderer as l,OrthographicCamera as u,PerspectiveCamera as c,Group as p,Scene as f,Color as g,BoxGeometry as y,CircleGeometry as b,ConeGeometry as v,CylinderGeometry as x,DodecahedronGeometry as S,IcosahedronGeometry as w,LatheGeometry as P,OctahedronGeometry as C,PolyhedronGeometry as N,RingGeometry as M,SphereGeometry as _,TetrahedronGeometry as L,TorusGeometry as j,TorusKnotGeometry as R,TubeGeometry as z,Curve as I,CatmullRomCurve3 as G,AmbientLight as k,DirectionalLight as B,HemisphereLight as O,PointLight as T,RectAreaLight as E,SpotLight as A,FrontSide as F,MeshBasicMaterial as U,MeshLambertMaterial as D,TextureLoader as $,MeshMatcapMaterial as W,MeshPhongMaterial as H,MeshStandardMaterial as X,MeshPhysicalMaterial as V,ShaderMaterial as K,ShaderChunk as Z,UniformsUtils as Y,ShaderLib as q,MeshToonMaterial as J,UVMapping as Q,ClampToEdgeWrapping as ee,LinearFilter as te,LinearMipmapLinearFilter as re,CubeTextureLoader as se,CubeRefractionMapping as ie,Mesh as ae,PlaneGeometry as ne,FontLoader as oe,TextGeometry as he,WebGLCubeRenderTarget as de,RGBFormat as me,CubeCamera as le,BackSide as ue,DoubleSide as ce,SpriteMaterial as pe,Sprite as fe}from"three";import{OrbitControls as ge}from"three/examples/jsm/controls/OrbitControls.js";import{RectAreaLightUniformsLib as ye}from"three/examples/jsm/lights/RectAreaLightUniformsLib.js";import{RectAreaLightHelper as be}from"three/examples/jsm/helpers/RectAreaLightHelper.js";import{GLTFLoader as ve}from"three/examples/jsm/loaders/GLTFLoader.js";import{FBXLoader as xe}from"three/examples/jsm/loaders/FBXLoader.js";import{EffectComposer as Se}from"three/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as we}from"three/examples/jsm/postprocessing/RenderPass.js";import{BokehPass as Pe}from"three/examples/jsm/postprocessing/BokehPass.js";import{FilmPass as Ce}from"three/examples/jsm/postprocessing/FilmPass.js";import{ShaderPass as Ne}from"three/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as Me}from"three/examples/jsm/shaders/FXAAShader.js";import{HalftonePass as _e}from"three/examples/jsm/postprocessing/HalftonePass.js";import{SMAAPass as Le}from"three/examples/jsm/postprocessing/SMAAPass.js";import{SSAOPass as je}from"three/examples/jsm/postprocessing/SSAOPass.js";import{UnrealBloomPass as Re}from"three/examples/jsm/postprocessing/UnrealBloomPass.js";function ze(e){const{camera:t,domElement:r,intersectObjects:s,touch:i=!0,resetOnEnd:a=!1,resetPosition:l=new d(0,0),resetPositionV3:u=new n(0,0,0),onEnter:c=(()=>{}),onMove:p=(()=>{}),onLeave:f=(()=>{}),onIntersectEnter:g=(()=>{}),onIntersectOver:y=(()=>{}),onIntersectMove:b=(()=>{}),onIntersectLeave:v=(()=>{}),onIntersectClick:x=(()=>{})}=e,S=l.clone(),w=new d(0,0),P=function(e){const{camera:t,resetPosition:r=new n(0,0,0)}=e,s=new o,i=r.clone(),a=new h(new n(0,0,1),0);return{position:i,updatePosition:e=>{s.setFromCamera(e,t),t.getWorldDirection(a.normal),s.ray.intersectPlane(a,i)},intersect:(e,r)=>(s.setFromCamera(e,t),s.intersectObjects(r))}}({camera:t}),C=P.position,N={position:S,positionN:w,positionV3:C,intersectObjects:s,listeners:!1,addListeners:function(){r.addEventListener("mouseenter",L),r.addEventListener("mousemove",j),r.addEventListener("mouseleave",z),r.addEventListener("click",R),i&&(r.addEventListener("touchstart",L),r.addEventListener("touchmove",j),r.addEventListener("touchend",z));N.listeners=!0},removeListeners:function(){r.removeEventListener("mouseenter",L),r.removeEventListener("mousemove",j),r.removeEventListener("mouseleave",z),r.removeEventListener("click",R),r.removeEventListener("touchstart",L),r.removeEventListener("touchmove",j),r.removeEventListener("touchend",z),N.listeners=!1},intersect:_};return N;function M(e){let t,s;e.touches&&e.touches.length>0?(t=e.touches[0].clientX,s=e.touches[0].clientY):(t=e.clientX,s=e.clientY);const i=r.getBoundingClientRect();S.x=t-i.left,S.y=s-i.top,w.x=S.x/i.width*2-1,w.y=-S.y/i.height*2+1,P.updatePosition(w)}function _(){if(s.length){const e=P.intersect(w,s),t=[...s],r=[];e.forEach((e=>{const{object:s}=e,{component:i}=s;if(s instanceof m){if(-1!==r.indexOf(s))return;r.push(s)}if(!s.over){s.over=!0;const t={type:"pointerover",over:!0,component:i,intersect:e},r={...t,type:"pointerenter"};y(t),g(r),i.onPointerOver?.(t),i.onPointerEnter?.(r)}const a={type:"pointermove",component:i,intersect:e};b(a),i.onPointerMove?.(a),t.splice(t.indexOf(s),1)})),t.forEach((e=>{const{component:t}=e;if(e.over){e.over=!1;const r={type:"pointerover",over:!1,component:t},s={...r,type:"pointerleave"};y(r),v(s),t.onPointerOver?.(r),t.onPointerLeave?.(s)}}))}}function L(e){M(e),c({type:"pointerenter",position:S,positionN:w,positionV3:C})}function j(e){M(e),p({type:"pointermove",position:S,positionN:w,positionV3:C}),_()}function R(e){if(M(e),s.length){const e=P.intersect(w,s),t=[];e.forEach((e=>{const{object:r}=e,{component:s}=r;if(r instanceof m){if(-1!==t.indexOf(r))return;t.push(r)}const i={type:"click",component:s,intersect:e};x(i),s.onClick?.(i)}))}}function z(){a&&(S.copy(l),C.copy(u)),f({type:"pointerleave"})}}function Ie(){const e={canvas:null,antialias:!0,alpha:!1,autoClear:!0,orbit_ctrl:!1,pointer:!1,resize:!1,width:300,height:150},t={width:1,height:1,wWidth:1,wHeight:1,ratio:1},r=[];let s=[],i=[];const a=[],n={conf:e,renderer:null,camera:null,cameraCtrl:null,scene:null,pointer:null,size:t,init:function(t){t&&Object.entries(t).forEach((([t,r])=>{e[t]=r}));if(!n.scene)return void console.error("Missing Scene");if(!n.camera)return void console.error("Missing Camera");n.renderer=new l({canvas:e.canvas,antialias:e.antialias,alpha:e.alpha}),n.renderer.autoClear=e.autoClear,e.resize?(d(),window.addEventListener("resize",d)):m(e.width,e.height);o(),e.orbit_ctrl&&(n.orbitCtrl=new ge(n.camera,n.renderer.domElement),e.orbit_ctrl instanceof Object&&Object.entries(e.orbit_ctrl).forEach((([e,t])=>{n.orbitCtrl[e]=t})));return r.forEach((e=>e())),!0},dispose:function(){i=[],window.removeEventListener("resize",d),n.pointer&&n.pointer.removeListeners();n.orbitCtrl&&n.orbitCtrl.dispose();n.renderer.dispose()},render:function(){n.orbitCtrl&&n.orbitCtrl.update();i.forEach((e=>e())),n.renderer.render(n.scene,n.camera)},renderC:function(){n.orbitCtrl&&n.orbitCtrl.update();i.forEach((e=>e())),n.composer.render()},setSize:m,onAfterInit:function(e){r.push(e)},onAfterResize:function(e){s.push(e)},offAfterResize:function(e){s=s.filter((t=>t!==e))},onBeforeRender:h,offBeforeRender:function(e){i=i.filter((t=>t!==e))},addIntersectObject:function(e){-1===a.indexOf(e)&&a.push(e);n.pointer&&!n.pointer.listeners&&n.pointer.addListeners()},removeIntersectObject:function(t){const r=a.indexOf(t);-1!==r&&a.splice(r,1);n.pointer&&!e.pointer&&0===a.length&&n.pointer.removeListeners()}};function o(){let t={camera:n.camera,domElement:n.renderer.domElement,intersectObjects:a};e.pointer&&e.pointer instanceof Object&&(t={...t,...e.pointer}),n.pointer=ze(t),(e.pointer||a.length)&&(n.pointer.addListeners(),"frame"===e.pointer.intersectMode&&h((()=>{n.pointer.intersect()})))}function h(e){i.push(e)}function d(){if("window"===e.resize)m(window.innerWidth,window.innerHeight);else{const e=n.renderer.domElement.parentNode;m(e.clientWidth,e.clientHeight)}s.forEach((e=>e()))}function m(e,r){if(t.width=e,t.height=r,t.ratio=e/r,n.renderer.setSize(e,r,!1),n.camera.aspect=t.ratio,n.camera.updateProjectionMatrix(),n.composer&&n.composer.setSize(e,r),"OrthographicCamera"===n.camera.type)t.wWidth=n.camera.right-n.camera.left,t.wHeight=n.camera.top-n.camera.bottom;else{const e=function(){const e=n.camera.fov*Math.PI/180,t=2*Math.tan(e/2)*Math.abs(n.camera.position.z);return[t*n.camera.aspect,t]}();t.wWidth=e[0],t.wHeight=e[1]}}return n}var Ge=e({name:"Renderer",props:{antialias:Boolean,alpha:Boolean,autoClear:{type:Boolean,default:!0},orbitCtrl:{type:[Boolean,Object],default:!1},pointer:{type:[Boolean,Object],default:!1},resize:{type:[Boolean,String],default:!1},shadow:Boolean,width:String,height:String,xr:Boolean},setup:()=>({three:Ie(),raf:!0,onMountedCallbacks:[]}),provide(){return{three:this.three,rendererComponent:this}},mounted(){const e={canvas:this.$el,antialias:this.antialias,alpha:this.alpha,autoClear:this.autoClear,orbit_ctrl:this.orbitCtrl,pointer:this.pointer,resize:this.resize,width:this.width,height:this.height};this.three.init(e)&&(this.renderer=this.three.renderer,this.renderer.shadowMap.enabled=this.shadow,this.xr?(this.vrButton=a.createButton(this.renderer),this.renderer.domElement.parentNode.appendChild(this.vrButton),this.renderer.xr.enabled=!0,this.three.composer?this.renderer.setAnimationLoop(this.animateXRC):this.renderer.setAnimationLoop(this.animateXR)):this.three.composer?this.animateC():this.animate()),this.onMountedCallbacks.forEach((e=>e()))},beforeUnmount(){this.raf=!1,this.three.dispose()},methods:{onMounted(e){this.onMountedCallbacks.push(e)},onBeforeRender(e){this.three.onBeforeRender(e)},onAfterResize(e){this.three.onAfterResize(e)},animate(){this.raf&&requestAnimationFrame(this.animate),this.three.render()},animateC(){this.raf&&requestAnimationFrame(this.animateC),this.three.renderC()},animateXR(){this.three.render()},animateXRC(){this.three.renderC()}},render(){return t("canvas",{},this.$slots.default())},__hmrId:"Renderer"});function ke(e,t){t instanceof Object&&Object.entries(t).forEach((([t,r])=>{e[t]=r}))}function Be(e,t,r){t.forEach((t=>{Oe(e,t,r)}))}function Oe(e,t,i,a){a||(a=t);const n=r(e,t);n.value instanceof Object?(ke(i[a],n.value),s(n,(e=>{ke(i[a],e)}),{deep:!0})):(n.value&&(i[a]=e[t]),s(n,(e=>{i[a]=e})))}function Te(e,t){const r={};return Object.entries(e).forEach((([e,s])=>{(!t||t&&!t.includes(e))&&(r[e]=s)})),r}function Ee(e,t,r){return e+(t-e)*(r=(r=r<0?0:r)>1?1:r)}function Ae(e,t,r){e.x=Ee(e.x,t.x,r),e.y=Ee(e.y,t.y,r)}function Fe(e,t,r){e.x=Ee(e.x,t.x,r),e.y=Ee(e.y,t.y,r),e.z=Ee(e.z,t.z,r)}function Ue(e,t,r){return er?r:e}function De(e,t=1024){return`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${t}/${`${e}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(t)}.png`}`}var $e=e({inject:["three"],render(){return this.$slots.default?this.$slots.default():[]}}),We=e({extends:$e,name:"OrthographicCamera",inject:["three"],props:{left:{type:Number,default:-1},right:{type:Number,default:1},top:{type:Number,default:1},bottom:{type:Number,default:-1},near:{type:Number,default:.1},far:{type:Number,default:2e3},zoom:{type:Number,default:1},position:{type:Object,default:{x:0,y:0,z:0}}},created(){this.camera=new u(this.left,this.right,this.top,this.bottom,this.near,this.far),Oe(this,"position",this.camera),["left","right","top","bottom","near","far","zoom"].forEach((e=>{s((()=>this[e]),(()=>{this.camera[e]=this[e],this.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},__hmrId:"OrthographicCamera"}),He=e({extends:$e,name:"PerspectiveCamera",inject:["three"],props:{aspect:{type:Number,default:1},far:{type:Number,default:2e3},fov:{type:Number,default:50},near:{type:Number,default:.1},position:{type:Object,default:{x:0,y:0,z:0}},lookAt:{type:Object,default:null}},created(){this.camera=new c(this.fov,this.aspect,this.near,this.far),Oe(this,"position",this.camera),this.lookAt&&this.camera.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),s((()=>this.lookAt),(e=>{this.camera.lookAt(e.x,e.y,e.z)}),{deep:!0}),["aspect","far","fov","near"].forEach((e=>{s((()=>this[e]),(()=>{this.camera[e]=this[e],this.camera.updateProjectionMatrix()}))})),this.three.camera=this.camera},__hmrId:"PerspectiveCamera"}),Xe=e({name:"Object3D",inject:["three","scene","rendererComponent"],emits:["created","ready"],props:{position:{type:Object,default:{x:0,y:0,z:0}},rotation:{type:Object,default:{x:0,y:0,z:0}},scale:{type:Object,default:{x:1,y:1,z:1}},lookAt:{type:Object,default:null},autoRemove:{type:Boolean,default:!0}},unmounted(){this.autoRemove&&this.removeFromParent()},methods:{initObject3D(e){this.o3d=e,this.$emit("created",this.o3d),Oe(this,"position",this.o3d),Oe(this,"rotation",this.o3d),Oe(this,"scale",this.o3d),this.lookAt&&this.o3d.lookAt(this.lookAt.x,this.lookAt.y,this.lookAt.z),s((()=>this.lookAt),(e=>{this.o3d.lookAt(e.x,e.y,e.z)}),{deep:!0}),this._parent=this.getParent(),this.addToParent()?this.$emit("ready",this):console.error("Missing parent (Scene, Group...)")},getParent(){let e=this.$parent;for(;e;){if(e.add)return e;e=e.$parent}return!1},addToParent(e){const t=e||this.o3d;return!!this._parent&&(this._parent.add(t),!0)},removeFromParent(e){const t=e||this.o3d;return!!this._parent&&(this._parent.remove(t),!0)},add(e){this.o3d.add(e)},remove(e){this.o3d.remove(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Object3D"}),Ve=e({name:"Group",extends:Xe,created(){this.group=new p,this.initObject3D(this.group)},__hmrId:"Group"}),Ke=e({name:"Scene",inject:["three"],props:{id:String,background:[String,Number]},setup(e){const t=new f;return e.background&&(t.background=new g(e.background)),s((()=>e.background),(e=>{t.background.set(e)})),{scene:t}},provide(){return{scene:this.scene}},mounted(){this.three.scene||(this.three.scene=this.scene)},methods:{add(e){this.scene.add(e)},remove(e){this.scene.remove(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Scene"}),Ze=e({name:"Raycaster",inject:["three","rendererComponent"],props:{onPointerEnter:{type:Function,default:()=>{}},onPointerOver:{type:Function,default:()=>{}},onPointerMove:{type:Function,default:()=>{}},onPointerLeave:{type:Function,default:()=>{}},onClick:{type:Function,default:()=>{}},intersectMode:{type:String,default:"move"}},mounted(){this.rendererComponent.onMounted((()=>{this.pointer=ze({camera:this.three.camera,domElement:this.three.renderer.domElement,intersectObjects:this.getIntersectObjects(),onIntersectEnter:this.onPointerEnter,onIntersectOver:this.onPointerOver,onIntersectMove:this.onPointerMove,onIntersectLeave:this.onPointerLeave,onIntersectClick:this.onClick}),this.pointer.addListeners(),"frame"===this.intersectMode&&this.three.onBeforeRender(this.pointer.intersect)}))},unmounted(){this.pointer&&(this.pointer.removeListeners(),this.three.offBeforeRender(this.pointer.intersect))},methods:{getIntersectObjects(){return this.three.scene.children.filter((e=>"Mesh"===e.type))}},render:()=>[],__hmrId:"Raycaster"});const Ye=e({inject:["mesh"],props:{rotateX:Number,rotateY:Number,rotateZ:Number},created(){this.mesh||console.error("Missing parent Mesh"),this.watchProps=[],Object.entries(this.$props).forEach((e=>this.watchProps.push(e[0]))),this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),this.addWatchers()},unmounted(){this.geometry.dispose()},methods:{addWatchers(){this.watchProps.forEach((e=>{s((()=>this[e]),(()=>{this.refreshGeometry()}))}))},rotateGeometry(){this.rotateX&&this.geometry.rotateX(this.rotateX),this.rotateY&&this.geometry.rotateY(this.rotateY),this.rotateZ&&this.geometry.rotateZ(this.rotateZ)},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.rotateGeometry(),this.mesh.setGeometry(this.geometry),e.dispose()}},render:()=>[]});function qe(t,r,s){return e({name:t,extends:Ye,props:r,methods:{createGeometry(){this.geometry=s(this)}}})}const Je={size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}};function Qe(e){return e.size?new y(e.size,e.size,e.size,e.widthSegments,e.heightSegments,e.depthSegments):new y(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}var et=qe("BoxGeometry",Je,Qe);const tt={radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function rt(e){return new b(e.radius,e.segments,e.thetaStart,e.thetaLength)}var st=qe("CircleGeometry",tt,rt);const it={radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function at(e){return new v(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var nt=qe("ConeGeometry",it,at);const ot={radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function ht(e){return new x(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var dt=qe("CylinderGeometry",ot,ht);const mt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function lt(e){return new S(e.radius,e.detail)}var ut=qe("DodecahedronGeometry",mt,lt);const ct={radius:{type:Number,default:1},detail:{type:Number,default:0}};function pt(e){return new w(e.radius,e.detail)}var ft=qe("IcosahedronGeometry",ct,pt);const gt={points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:2*Math.PI}};function yt(e){return new P(e.points,e.segments,e.phiStart,e.phiLength)}var bt=qe("LatheGeometry",gt,yt);const vt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function xt(e){return new C(e.radius,e.detail)}var St=qe("OctahedronGeometry",vt,xt);const wt={vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}};function Pt(e){return new N(e.vertices,e.indices,e.radius,e.detail)}var Ct=qe("PolyhedronGeometry",wt,Pt);const Nt={innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:2*Math.PI}};function Mt(e){return new M(e.innerRadius,e.outerRadius,e.thetaSegments,e.phiSegments,e.thetaStart,e.thetaLength)}var _t=qe("RingGeometry",Nt,Mt);const Lt={radius:{type:Number,default:1},widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12}};function jt(e){return new _(e.radius,e.widthSegments,e.heightSegments)}var Rt=qe("SphereGeometry",Lt,jt);const zt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function It(e){return new L(e.radius,e.detail)}var Gt=qe("TetrahedronGeometry",zt,It);const kt={radius:{type:Number,default:1},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:2*Math.PI}};function Bt(e){return new j(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}var Ot=qe("TorusGeometry",kt,Bt);const Tt={radius:{type:Number,default:1},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}};function Et(e){return new R(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}var At=qe("TorusKnotGeometry",Tt,Et);const Ft={points:Array,path:I,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radialSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}};function Ut(e){let t;return e.points?t=new G(e.points):e.path?t=e.path:console.error("Missing path curve or points."),new z(t,e.tubularSegments,e.radius,e.radiusSegments,e.closed)}var Dt=e({extends:Ye,props:Ft,methods:{createGeometry(){this.geometry=Ut(this)},updatePoints(e){$t(this.geometry,e)}}});function $t(e,t){const r=new G(t),{radialSegments:s,radius:i,tubularSegments:a,closed:o}=e.parameters,h=r.computeFrenetFrames(a,o);e.tangents=h.tangents,e.normals=h.normals,e.binormals=h.binormals,e.parameters.path=r;const d=e.attributes.position.array,m=e.attributes.normal.array,l=new n;let u;for(let e=0;e{s((()=>this[e]),(()=>{"color"===e?this.light.color.set(this.color):this.light[e]=this[e]}))})),this.initObject3D(this.light),this.light.target&&this.addToParent(this.light.target)}},__hmrId:"Light"}),Ht=e({extends:Wt,created(){this.light=new k(this.color,this.intensity),this.initLight()},__hmrId:"AmbientLight"}),Xt=e({extends:Wt,props:{target:Object},created(){this.light=new B(this.color,this.intensity),this.initLight()},__hmrId:"DirectionalLight"}),Vt=e({extends:Wt,props:{groundColor:{type:String,default:"#444444"}},created(){this.light=new O(this.color,this.groundColor,this.intensity),s((()=>this.groundColor),(e=>{this.light.groundColor.set(e)})),this.initLight()},__hmrId:"HemisphereLight"}),Kt=e({extends:Wt,props:{distance:{type:Number,default:0},decay:{type:Number,default:1}},created(){this.light=new T(this.color,this.intensity,this.distance,this.decay),this.initLight()},__hmrId:"PointLight"}),Zt=e({extends:Wt,props:{width:{type:Number,default:10},height:{type:Number,default:10},helper:Boolean},created(){ye.init(),this.light=new E(this.color,this.intensity,this.width,this.height),["width","height"].forEach((e=>{s((()=>this[e]),(()=>{this.light[e]=this[e]}))})),this.helper&&(this.lightHelper=new be(this.light),this.light.add(this.lightHelper)),this.initLight()},unmounted(){this.lightHelper&&this.removeFromParent(this.lightHelper)},__hmrId:"RectAreaLight"}),Yt=e({extends:Wt,props:{angle:{type:Number,default:Math.PI/3},decay:{type:Number,default:1},distance:{type:Number,default:0},penumbra:{type:Number,default:0},target:Object},created(){this.light=new A(this.color,this.intensity,this.distance,this.angle,this.penumbra,this.decay),["angle","decay","distance","penumbra"].forEach((e=>{s((()=>this[e]),(()=>{this.light[e]=this[e]}))})),this.initLight()},__hmrId:"SpotLight"}),qt=e({inject:["three","mesh"],props:{color:{type:[String,Number],default:"#ffffff"},depthTest:{type:Boolean,default:!0},depthWrite:{type:Boolean,default:!0},fog:{type:Boolean,default:!0},opacity:{type:Number,default:1},side:{type:Number,default:F},transparent:Boolean,vertexColors:Boolean},provide(){return{material:this}},created(){this.createMaterial(),this.mesh.setMaterial(this.material),this._addWatchers(),this.addWatchers&&this.addWatchers()},unmounted(){this.material.dispose()},methods:{setProp(e,t,r=!1){this.material[e]=t,this.material.needsUpdate=r},setTexture(e,t="map"){this.setProp(t,e,!0)},_addWatchers(){["color","depthTest","depthWrite","fog","opacity","side","transparent"].forEach((e=>{s((()=>this[e]),(()=>{"color"===e?this.material.color.set(this.color):this.material[e]=this[e]}))}))}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Material"});const Jt={wireframe:{type:Boolean,default:!1},wireframeLinewidth:{type:Number,default:1}};var Qt=e({extends:qt,props:{...Jt},methods:{createMaterial(){this.material=new U(Te(this.$props))},addWatchers(){Be(this,Object.keys(Jt),this.material)}},__hmrId:"BasicMaterial"}),er=e({extends:qt,props:{...Jt},methods:{createMaterial(){this.material=new D(Te(this.$props))},addWatchers(){Be(this,Object.keys(Jt),this.material)}},__hmrId:"LambertMaterial"}),tr=e({extends:qt,props:{src:String,name:String,flatShading:Boolean},methods:{createMaterial(){const e=this.name?De(this.name):this.src,t=Te(this.$props,["src","name"]);t.matcap=(new $).load(e),this.material=new W(t)},addWatchers(){}},__hmrId:"MatcapMaterial"}),rr=e({extends:qt,props:{emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},reflectivity:{type:Number,default:1},shininess:{type:Number,default:30},specular:{type:[String,Number],default:1118481},flatShading:Boolean,...Jt},methods:{createMaterial(){this.material=new H(Te(this.$props))},addWatchers(){["emissive","emissiveIntensity","reflectivity","shininess","specular"].forEach((e=>{s((()=>this[e]),(t=>{"emissive"===e||"specular"===e?this.material[e].set(t):this.material[e]=t}))})),Be(this,Object.keys(Jt),this.material)}},__hmrId:"PhongMaterial"});const sr={aoMapIntensity:{type:Number,default:1},bumpScale:{type:Number,default:1},displacementBias:{type:Number,default:0},displacementScale:{type:Number,default:1},emissive:{type:[Number,String],default:0},emissiveIntensity:{type:Number,default:1},envMapIntensity:{type:Number,default:1},lightMapIntensity:{type:Number,default:1},metalness:{type:Number,default:0},normalScale:{type:Object,default:{x:1,y:1}},roughness:{type:Number,default:1},refractionRatio:{type:Number,default:.98},flatShading:Boolean};var ir=e({extends:qt,props:{...sr,...Jt},methods:{createMaterial(){this.material=new X(Te(this.$props,["normalScale"]))},addWatchers(){Object.keys(sr).forEach((e=>{"normalScale"!==e&&s((()=>this[e]),(t=>{"emissive"===e?this.material[e].set(t):this.material[e]=t}))})),Oe(this,"normalScale",this.material),Be(this,Object.keys(Jt),this.material)}},__hmrId:"StandardMaterial"}),ar=e({extends:ir,props:{flatShading:Boolean},methods:{createMaterial(){this.material=new V(Te(this.$props))},addWatchers(){}},__hmrId:"PhysicalMaterial"});var nr=e({inject:["three","mesh"],props:{uniforms:{type:Object,default:()=>({})},vertexShader:{type:String,default:"\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}"},fragmentShader:{type:String,default:"\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}"}},provide(){return{material:this}},created(){this.createMaterial(),["vertexShader","fragmentShader"].forEach((e=>{s((()=>this[e]),(()=>{this.material.dispose(),this.createMaterial()}))}))},unmounted(){this.material.dispose()},methods:{createMaterial(){this.material=new K(Te(this.$props)),this.mesh.setMaterial(this.material)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"ShaderMaterial"});const or=Z.meshphong_frag.slice(0,Z.meshphong_frag.indexOf("void main() {")),hr=Z.meshphong_frag.slice(Z.meshphong_frag.indexOf("void main() {")),dr={uniforms:Y.merge([q.phong.uniforms,{thicknessColor:{value:new g(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:`\n #define USE_UV\n ${Z.meshphong_vert}\n `,fragmentShader:`\n #define USE_UV\n #define SUBSURFACE\n\n ${or}\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 `+hr.replace("#include ",(mr=Z.lights_fragment_begin,lr="RE_Direct( directLight, geometry, material, reflectedLight );",ur="\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 ",mr.split(lr).join(ur)))};var mr,lr,ur,cr=e({inject:["three","mesh"],props:{color:{type:String,default:"#ffffff"},thicknessColor:{type:String,default:"#ffffff"},thicknessDistortion:{type:Number,default:.4},thicknessAmbient:{type:Number,default:.01},thicknessAttenuation:{type:Number,default:.7},thicknessPower:{type:Number,default:2},thicknessScale:{type:Number,default:4},transparent:{type:Boolean,default:!1},opacity:{type:Number,default:1},vertexColors:{type:Boolean,default:!1}},created(){this.createMaterial(),this.mesh.setMaterial(this.material)},unmounted(){this.material.dispose()},methods:{createMaterial(){const e=dr,t=Y.clone(e.uniforms);Object.entries(this.$props).forEach((([e,r])=>{let s=e,i=r;["color","thicknessColor"].includes(e)&&("color"===e&&(s="diffuse"),i=new g(r)),["transparent","vertexColors"].includes(e)||(t[s].value=i)})),this.material=new K({...e,uniforms:t,lights:!0,transparent:this.transparent,vertexColors:this.vertexColors})}},render:()=>[],__hmrId:"SubSurfaceMaterial"}),pr=e({extends:qt,props:{...Jt},methods:{createMaterial(){this.material=new J(Te(this.$props))},addWatchers(){Be(this,Object.keys(Jt),this.material)}},__hmrId:"ToonMaterial"}),fr=e({inject:["material"],emits:["loaded"],props:{name:{type:String,default:"map"},uniform:{type:String,default:null},src:String,onLoad:Function,onProgress:Function,onError:Function,mapping:{type:Number,default:Q},wrapS:{type:Number,default:ee},wrapT:{type:Number,default:ee},magFilter:{type:Number,default:te},minFilter:{type:Number,default:re},repeat:{type:Object,default:{x:1,y:1}},rotation:{type:Number,default:0},center:{type:Object,default:{x:0,y:0}}},created(){this.refreshTexture(),s((()=>this.src),this.refreshTexture)},unmounted(){this.material&&this.material.setTexture&&this.material.setTexture(null,this.name),this.texture.dispose()},methods:{createTexture(){this.texture=(new $).load(this.src,this.onLoaded,this.onProgress,this.onError);["mapping","wrapS","wrapT","magFilter","minFilter","repeat","rotation","rotation","center"].forEach((e=>{Oe(this,e,this.texture)}))},refreshTexture(){if(this.createTexture(),this.material&&this.material.setTexture)this.material.setTexture(this.texture,this.name);else if(this.material&&"ShaderMaterial"===this.material.material.type){if(!this.uniform)return void console.warn('"uniform" prop required to use texture in a shader.');this.material.uniforms[this.uniform]={value:this.texture}}},onLoaded(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:()=>[]}),gr=e({inject:["material"],emits:["loaded"],props:{path:String,urls:{type:Array,default:["px.jpg","nx.jpg","py.jpg","ny.jpg","pz.jpg","nz.jpg"]},onLoad:Function,onProgress:Function,onError:Function,name:{type:String,default:"envMap"},refraction:Boolean,refractionRatio:{type:Number,default:.98}},created(){this.refreshTexture(),s((()=>this.path),this.refreshTexture),s((()=>this.urls),this.refreshTexture)},unmounted(){this.material.setTexture(null,this.name),this.texture.dispose()},methods:{createTexture(){this.texture=(new se).setPath(this.path).load(this.urls,this.onLoaded,this.onProgress,this.onError)},refreshTexture(){this.createTexture(),this.material.setTexture(this.texture,this.name),this.refraction&&(this.texture.mapping=ie,this.material.setProp("refractionRatio",this.refractionRatio))},onLoaded(){this.onLoad&&this.onLoad(),this.$emit("loaded")}},render:()=>[]});const yr={onPointerEnter:Function,onPointerOver:Function,onPointerMove:Function,onPointerLeave:Function,onPointerDown:Function,onPointerUp:Function,onClick:Function},br=e({name:"Mesh",extends:Xe,props:{castShadow:Boolean,receiveShadow:Boolean,...yr},provide(){return{mesh:this}},mounted(){this.mesh||this.loading||this.initMesh()},methods:{initMesh(){this.mesh=new ae(this.geometry,this.material),this.mesh.component=this,Oe(this,"castShadow",this.mesh),Oe(this,"receiveShadow",this.mesh),(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.three.addIntersectObject(this.mesh),this.initObject3D(this.mesh)},addGeometryWatchers(e){Object.keys(e).forEach((e=>{s((()=>this[e]),(()=>{this.refreshGeometry()}))}))},setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){this.material=e,this.mesh&&(this.mesh.material=e)},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.mesh.geometry=this.geometry,e.dispose()}},unmounted(){this.mesh&&this.three.removeIntersectObject(this.mesh),this.geometry&&this.geometry.dispose()},__hmrId:"Mesh"});function vr(t,r,s){return e({name:t,extends:br,props:r,created(){this.createGeometry(),this.addGeometryWatchers(r)},methods:{createGeometry(){this.geometry=s(this)}},__hmrId:t})}var xr=vr("Box",Je,Qe),Sr=vr("Circle",tt,rt),wr=vr("Cone",it,at),Pr=vr("Cylinder",ot,ht),Cr=vr("Dodecahedron",mt,lt),Nr=vr("Icosahedron",ct,pt),Mr=vr("Lathe",gt,yt),_r=vr("Octahedron",vt,xt);const Lr={width:{type:Number,default:1},height:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1}};function jr(e){return new ne(e.width,e.height,e.widthSegments,e.heightSegments)}qe("PlaneGeometry",Lr,jr);var Rr=vr("Plane",Lr,jr),zr=vr("Polyhedron",wt,Pt),Ir=vr("Ring",Nt,Mt),Gr=vr("Sphere",Lt,jt),kr=vr("Tetrahedron",zt,It);const Br={text:String,fontSrc:String,size:{type:Number,default:80},height:{type:Number,default:5},depth:{type:Number,default:1},curveSegments:{type:Number,default:12},bevelEnabled:{type:Boolean,default:!1},bevelThickness:{type:Number,default:10},bevelSize:{type:Number,default:8},bevelOffset:{type:Number,default:0},bevelSegments:{type:Number,default:5},align:{type:[Boolean,String],default:!1}};var Or=e({extends:br,props:Br,data:()=>({loading:!0}),created(){["text","size","height","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align"].forEach((e=>{s((()=>this[e]),(()=>{this.font&&this.refreshGeometry()}))}));(new oe).load(this.fontSrc,(e=>{this.loading=!1,this.font=e,this.createGeometry(),this.initMesh()}))},methods:{createGeometry(){this.geometry=new he(this.text,{font:this.font,size:this.size,height:this.height,depth:this.depth,curveSegments:this.curveSegments,bevelEnabled:this.bevelEnabled,bevelThickness:this.bevelThickness,bevelSize:this.bevelSize,bevelOffset:this.bevelOffset,bevelSegments:this.bevelSegments}),"center"===this.align&&this.geometry.center()}}}),Tr=vr("Torus",kt,Bt),Er=vr("TorusKnot",Tt,Et),Ar=e({extends:br,props:Ft,created(){this.createGeometry(),this.addGeometryWatchers(Ft)},methods:{createGeometry(){this.geometry=Ut(this)},updatePoints(e){$t(this.geometry,e)}},__hmrId:"Tube"}),Fr=e({extends:br,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},autoUpdate:Boolean},mounted(){this.initGem(),this.autoUpdate?this.three.onBeforeRender(this.updateCubeRT):this.rendererComponent.onMounted(this.updateCubeRT)},unmounted(){this.three.offBeforeRender(this.updateCubeRT),this.cubeCamera&&this.removeFromParent(this.cubeCamera),this.meshBack&&this.removeFromParent(this.meshBack),this.materialBack&&this.materialBack.dispose()},methods:{initGem(){const e=new de(this.cubeRTSize,{format:me,generateMipmaps:!0,minFilter:re});this.cubeCamera=new le(this.cubeCameraNear,this.cubeCameraFar,e),Oe(this,"position",this.cubeCamera),this.addToParent(this.cubeCamera),this.material.side=F,this.material.envMap=e.texture,this.material.envMapIntensity=10,this.material.metalness=0,this.material.roughness=0,this.material.opacity=.75,this.material.transparent=!0,this.material.premultipliedAlpha=!0,this.material.needsUpdate=!0,this.materialBack=this.material.clone(),this.materialBack.side=ue,this.materialBack.envMapIntensity=5,this.materialBack.metalness=1,this.materialBack.roughness=0,this.materialBack.opacity=.5,this.meshBack=new ae(this.geometry,this.materialBack),Oe(this,"position",this.meshBack),Oe(this,"rotation",this.meshBack),Oe(this,"scale",this.meshBack),this.addToParent(this.meshBack)},updateCubeRT(){this.mesh.visible=!1,this.meshBack.visible=!1,this.cubeCamera.update(this.three.renderer,this.scene),this.mesh.visible=!0,this.meshBack.visible=!0}},__hmrId:"Gem"}),Ur=e({emits:["loaded"],extends:br,props:{src:String,width:Number,height:Number,keepSize:Boolean},created(){this.createGeometry(),this.createMaterial(),this.initMesh(),s((()=>this.src),this.refreshTexture),["width","height"].forEach((e=>{s((()=>this[e]),this.resize)})),this.keepSize&&this.three.onAfterResize(this.resize)},methods:{createGeometry(){this.geometry=new ne(1,1,1,1)},createMaterial(){this.material=new U({side:ce,map:this.loadTexture()})},loadTexture(){return(new $).load(this.src,this.onLoaded)},refreshTexture(){this.texture&&this.texture.dispose(),this.material.map=this.loadTexture(),this.material.needsUpdate=!0},onLoaded(e){this.texture=e,this.resize(),this.$emit("loaded")},resize(){if(!this.texture)return;const e=this.three.size,t=this.texture.image.width/this.texture.image.height;let r,s;this.width&&this.height?(r=this.width*e.wWidth/e.width,s=this.height*e.wHeight/e.height):this.width?(r=this.width*e.wWidth/e.width,s=r/t):this.height&&(s=this.height*e.wHeight/e.height,r=s*t),this.mesh.scale.x=r,this.mesh.scale.y=s}},__hmrId:"Image"}),Dr=e({extends:Xe,props:{castShadow:Boolean,receiveShadow:Boolean,count:Number,...yr},provide(){return{mesh:this}},beforeMount(){this.$slots.default||console.error("Missing Geometry")},mounted(){this.initMesh()},methods:{initMesh(){this.mesh=new m(this.geometry,this.material,this.count),this.mesh.component=this,Oe(this,"castShadow",this.mesh),Oe(this,"receiveShadow",this.mesh),(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.three.addIntersectObject(this.mesh),this.initObject3D(this.mesh)},setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){this.material=e,this.material.instancingColor=!0,this.mesh&&(this.mesh.material=e)}},unmounted(){this.mesh&&this.three.removeIntersectObject(this.mesh)},__hmrId:"InstancedMesh"}),$r=e({extends:br,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},autoUpdate:Boolean},mounted(){this.initMirrorMesh(),this.autoUpdate?this.three.onBeforeRender(this.updateCubeRT):this.rendererComponent.onMounted(this.updateCubeRT)},unmounted(){this.three.offBeforeRender(this.updateCubeRT),this.cubeCamera&&this.removeFromParent(this.cubeCamera)},methods:{initMirrorMesh(){const e=new de(this.cubeRTSize,{format:me,generateMipmaps:!0,minFilter:re});this.cubeCamera=new le(this.cubeCameraNear,this.cubeCameraFar,e),this.addToParent(this.cubeCamera),this.material.envMap=e.texture,this.material.needsUpdate=!0},updateCubeRT(){this.mesh.visible=!1,this.cubeCamera.update(this.three.renderer,this.scene),this.mesh.visible=!0}},__hmrId:"MirrorMesh"}),Wr=e({extends:br,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},refractionRatio:{type:Number,default:.98},autoUpdate:Boolean},mounted(){this.initMirrorMesh(),this.autoUpdate?this.three.onBeforeRender(this.updateCubeRT):this.rendererComponent.onMounted(this.updateCubeRT)},unmounted(){this.three.offBeforeRender(this.updateCubeRT),this.cubeCamera&&this.removeFromParent(this.cubeCamera)},methods:{initMirrorMesh(){const e=new de(this.cubeRTSize,{mapping:ie,format:me,generateMipmaps:!0,minFilter:re});this.cubeCamera=new le(this.cubeCameraNear,this.cubeCameraFar,e),Oe(this,"position",this.cubeCamera),this.addToParent(this.cubeCamera),this.material.envMap=e.texture,this.material.refractionRatio=this.refractionRatio,this.material.needsUpdate=!0},updateCubeRT(){this.mesh.visible=!1,this.cubeCamera.update(this.three.renderer,this.scene),this.mesh.visible=!0}},__hmrId:"RefractionMesh"}),Hr=e({extends:Xe,emits:["loaded"],props:{src:String},data:()=>({loading:!0}),created(){this.texture=(new $).load(this.src,this.onLoaded),this.material=new pe({map:this.texture}),this.sprite=new fe(this.material),this.geometry=this.sprite.geometry,this.initObject3D(this.sprite)},unmounted(){this.texture.dispose(),this.material.dispose()},methods:{onLoaded(){this.loading=!1,this.updateUV(),this.$emit("loaded")},updateUV(){this.iWidth=this.texture.image.width,this.iHeight=this.texture.image.height,this.iRatio=this.iWidth/this.iHeight;let e=.5,t=.5;this.iRatio>1?t=.5/this.iRatio:e=.5/this.iRatio;const r=this.geometry.attributes.position.array;r[0]=-e,r[1]=-t,r[5]=e,r[6]=-t,r[10]=e,r[11]=t,r[15]=-e,r[16]=t,this.geometry.attributes.position.needsUpdate=!0}},__hmrId:"Sprite"}),Xr=e({extends:Xe,emits:["load","progress","error"],data:()=>({progress:0}),methods:{onLoad(e){this.$emit("load",e),this.initObject3D(e)},onProgress(e){this.progress=e.loaded/e.total,this.$emit("progress",e)},onError(e){this.$emit("error",e)}}}),Vr=e({extends:Xr,props:{src:String},created(){(new ve).load(this.src,(e=>{this.onLoad(e.scene)}),this.onProgress,this.onError)}}),Kr=e({extends:Xr,props:{src:String},created(){(new xe).load(this.src,(e=>{this.onLoad(e)}),this.onProgress,this.onError)}}),Zr=e({setup:()=>({passes:[]}),inject:["three"],provide(){return{passes:this.passes}},mounted(){this.three.onAfterInit((()=>{this.composer=new Se(this.three.renderer),this.three.renderer.autoClear=!1,this.passes.forEach((e=>{this.composer.addPass(e)})),this.three.composer=this.composer,this.resize(),this.three.onAfterResize(this.resize)}))},unmounted(){this.three.offAfterResize(this.resize)},methods:{resize(){this.composer.setSize(this.three.size.width,this.three.size.height)}},render(){return this.$slots.default()},__hmrId:"EffectComposer"}),Yr=e({inject:["three","passes"],emits:["ready"],beforeMount(){this.passes||console.error("Missing parent EffectComposer")},unmounted(){this.pass.dispose&&this.pass.dispose()},methods:{completePass(e){this.passes.push(e),this.pass=e,this.$emit("ready",e)}},render:()=>[],__hmrId:"EffectPass"}),qr=e({extends:Yr,mounted(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");const e=new we(this.three.scene,this.three.camera);this.completePass(e)},__hmrId:"RenderPass"}),Jr=e({extends:Yr,props:{focus:{type:Number,default:1},aperture:{type:Number,default:.025},maxblur:{type:Number,default:.01}},watch:{focus(){this.pass.uniforms.focus.value=this.focus},aperture(){this.pass.uniforms.aperture.value=this.aperture},maxblur(){this.pass.uniforms.maxblur.value=this.maxblur}},mounted(){this.three.scene||console.error("Missing Scene"),this.three.camera||console.error("Missing Camera");const e={focus:this.focus,aperture:this.aperture,maxblur:this.maxblur,width:this.three.size.width,height:this.three.size.height},t=new Pe(this.three.scene,this.three.camera,e);this.completePass(t)},__hmrId:"BokehPass"}),Qr=e({extends:Yr,props:{noiseIntensity:{type:Number,default:.5},scanlinesIntensity:{type:Number,default:.05},scanlinesCount:{type:Number,default:4096},grayscale:{type:Number,default:0}},watch:{noiseIntensity(){this.pass.uniforms.nIntensity.value=this.noiseIntensity},scanlinesIntensity(){this.pass.uniforms.sIntensity.value=this.scanlinesIntensity},scanlinesCount(){this.pass.uniforms.sCount.value=this.scanlinesCount},grayscale(){this.pass.uniforms.grayscale.value=this.grayscale}},mounted(){const e=new Ce(this.noiseIntensity,this.scanlinesIntensity,this.scanlinesCount,this.grayscale);this.completePass(e)},__hmrId:"FilmPass"}),es=e({extends:Yr,mounted(){const e=new Ne(Me);this.completePass(e),this.three.onAfterResize(this.resize)},unmounted(){this.three.offAfterResize(this.resize)},methods:{resize(){const{resolution:e}=this.pass.material.uniforms;e.value.x=1/this.three.size.width,e.value.y=1/this.three.size.height}},__hmrId:"FXAAPass"}),ts=e({extends:Yr,props:{shape:{type:Number,default:1},radius:{type:Number,default:4},rotateR:{type:Number,default:Math.PI/12*1},rotateG:{type:Number,default:Math.PI/12*2},rotateB:{type:Number,default:Math.PI/12*3},scatter:{type:Number,default:0}},mounted(){const e=new _e(this.three.size.width,this.three.size.height,{});["shape","radius","rotateR","rotateG","rotateB","scatter"].forEach((t=>{e.uniforms[t].value=this[t],s((()=>this[t]),(()=>{e.uniforms[t].value=this[t]}))})),this.completePass(e)},__hmrId:"HalftonePass"}),rs=e({extends:Yr,mounted(){const e=new Le(this.three.size.width,this.three.size.height);this.completePass(e)},__hmrId:"SMAAPass"}),ss=e({extends:Yr,props:{scene:null,camera:null,options:{type:Object,default:()=>({})}},mounted(){const e=new je(this.scene||this.three.scene,this.camera||this.three.camera,this.three.size.width,this.three.size.height);for(const t of Object.keys(this.options))e[t]=this.options[t];this.completePass(e)},__hmrId:"SSAOPass"}),is={uniforms:{},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:"\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n "},as={uniforms:{tDiffuse:{value:null},blurRadius:{value:0},gradientRadius:{value:0},start:{value:new d},end:{value:new d},delta:{value:new d},texSize:{value:new d}},vertexShader:is.vertexShader,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 "},ns=e({extends:Yr,props:{blurRadius:{type:Number,default:10},gradientRadius:{type:Number,default:100},start:{type:Object,default:{x:0,y:100}},end:{type:Object,default:{x:10,y:100}}},mounted(){this.pass=new Ne(as),this.passes.push(this.pass),this.pass1=new Ne(as),this.passes.push(this.pass1);const e=this.uniforms=this.pass.uniforms,t=this.uniforms1=this.pass1.uniforms;t.blurRadius=e.blurRadius,t.gradientRadius=e.gradientRadius,t.start=e.start,t.end=e.end,t.texSize=e.texSize,Oe(this,"blurRadius",e.blurRadius,"value"),Oe(this,"gradientRadius",e.gradientRadius,"value"),this.updateFocusLine(),["start","end"].forEach((e=>{s((()=>this[e]),this.updateFocusLine,{deep:!0})})),this.pass.setSize=(t,r)=>{e.texSize.value.set(t,r)},this.$emit("ready",[this.pass,this.pass1])},methods:{updateFocusLine(){this.uniforms.start.value.copy(this.start),this.uniforms.end.value.copy(this.end);const e=(new d).copy(this.end).sub(this.start).normalize();this.uniforms.delta.value.copy(e),this.uniforms1.delta.value.set(-e.y,e.x)}},__hmrId:"TiltShiftPass"}),os=e({extends:Yr,props:{strength:{type:Number,default:1.5},radius:{type:Number,default:0},threshold:{type:Number,default:0}},watch:{strength(){this.pass.strength=this.strength},radius(){this.pass.radius=this.radius},threshold(){this.pass.threshold=this.threshold}},mounted(){const e=new d(this.three.size.width,this.three.size.height),t=new Re(e,this.strength,this.radius,this.threshold);this.completePass(t)},__hmrId:"UnrealBloomPass"}),hs={uniforms:{tDiffuse:{value:null},center:{value:new d(.5,.5)},strength:{value:0}},vertexShader:is.vertexShader,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 "},ds=e({extends:Yr,props:{center:{type:Object,default:{x:.5,y:.5}},strength:{type:Number,default:.5}},mounted(){const e=new Ne(hs),t=this.uniforms=e.uniforms;Oe(this,"center",t.center,"value"),Oe(this,"strength",t.strength,"value"),this.completePass(e)},__hmrId:"ZoomBlurPass"}),ms=Object.freeze({__proto__:null,Renderer:Ge,OrthographicCamera:We,PerspectiveCamera:He,Camera:He,Group:Ve,Scene:Ke,Object3D:Xe,Raycaster:Ze,BoxGeometry:et,CircleGeometry:st,ConeGeometry:nt,CylinderGeometry:dt,DodecahedronGeometry:ut,IcosahedronGeometry:ft,LatheGeometry:bt,OctahedronGeometry:St,PolyhedronGeometry:Ct,RingGeometry:_t,SphereGeometry:Rt,TetrahedronGeometry:Gt,TorusGeometry:Ot,TorusKnotGeometry:At,TubeGeometry:Dt,AmbientLight:Ht,DirectionalLight:Xt,HemisphereLight:Vt,PointLight:Kt,RectAreaLight:Zt,SpotLight:Yt,BasicMaterial:Qt,LambertMaterial:er,MatcapMaterial:tr,PhongMaterial:rr,PhysicalMaterial:ar,ShaderMaterial:nr,StandardMaterial:ir,SubSurfaceMaterial:cr,ToonMaterial:pr,Texture:fr,CubeTexture:gr,Mesh:br,Box:xr,Circle:Sr,Cone:wr,Cylinder:Pr,Dodecahedron:Cr,Icosahedron:Nr,Lathe:Mr,Octahedron:_r,Plane:Rr,Polyhedron:zr,Ring:Ir,Sphere:Gr,Tetrahedron:kr,Text:Or,Torus:Tr,TorusKnot:Er,Tube:Ar,Gem:Fr,Image:Ur,InstancedMesh:Dr,MirrorMesh:$r,RefractionMesh:Wr,Sprite:Hr,GLTFModel:Vr,FBXModel:Kr,EffectComposer:Zr,RenderPass:qr,BokehPass:Jr,FilmPass:Qr,FXAAPass:es,HalftonePass:ts,SMAAPass:rs,SSAOPass:ss,TiltShiftPass:ns,UnrealBloomPass:os,ZoomBlurPass:ds,setFromProp:ke,bindProps:Be,bindProp:Oe,propsValues:Te,lerp:Ee,lerpv2:Ae,lerpv3:Fe,limit:Ue,getMatcapUrl:De});const ls={install:e=>{["Camera","OrthographicCamera","PerspectiveCamera","Raycaster","Renderer","Scene","Group","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","BasicMaterial","LambertMaterial","MatcapMaterial","PhongMaterial","PhysicalMaterial","ShaderMaterial","StandardMaterial","SubSurfaceMaterial","ToonMaterial","Texture","CubeTexture","Mesh","Box","BoxGeometry","Circle","CircleGeometry","Cone","ConeGeometry","Cylinder","CylinderGeometry","Dodecahedron","DodecahedronGeometry","Icosahedron","IcosahedronGeometry","Lathe","LatheGeometry","Octahedron","OctahedronGeometry","Plane","Polyhedron","PolyhedronGeometry","Ring","RingGeometry","Sphere","SphereGeometry","Tetrahedron","TetrahedronGeometry","Text","Torus","TorusGeometry","TorusKnot","TorusKnotGeometry","Tube","TubeGeometry","Gem","Image","InstancedMesh","MirrorMesh","RefractionMesh","Sprite","FBXModel","GLTFModel","BokehPass","EffectComposer","FilmPass","FXAAPass","HalftonePass","RenderPass","SAOPass","SMAAPass","SSAOPass","TiltShiftPass","UnrealBloomPass","ZoomBlurPass","GLTFViewer"].forEach((t=>{e.component(t,ms[t])}))}};function us(e){return i(e).use(ls)}export{Ht as AmbientLight,Qt as BasicMaterial,Jr as BokehPass,xr as Box,et as BoxGeometry,He as Camera,Sr as Circle,st as CircleGeometry,wr as Cone,nt as ConeGeometry,gr as CubeTexture,Pr as Cylinder,dt as CylinderGeometry,Xt as DirectionalLight,Cr as Dodecahedron,ut as DodecahedronGeometry,Zr as EffectComposer,Kr as FBXModel,es as FXAAPass,Qr as FilmPass,Vr as GLTFModel,Fr as Gem,Ve as Group,ts as HalftonePass,Vt as HemisphereLight,Nr as Icosahedron,ft as IcosahedronGeometry,Ur as Image,Dr as InstancedMesh,er as LambertMaterial,Mr as Lathe,bt as LatheGeometry,tr as MatcapMaterial,br as Mesh,$r as MirrorMesh,Xe as Object3D,_r as Octahedron,St as OctahedronGeometry,We as OrthographicCamera,He as PerspectiveCamera,rr as PhongMaterial,ar as PhysicalMaterial,Rr as Plane,Kt as PointLight,zr as Polyhedron,Ct as PolyhedronGeometry,Ze as Raycaster,Zt as RectAreaLight,Wr as RefractionMesh,qr as RenderPass,Ge as Renderer,Ir as Ring,_t as RingGeometry,rs as SMAAPass,ss as SSAOPass,Ke as Scene,nr as ShaderMaterial,Gr as Sphere,Rt as SphereGeometry,Yt as SpotLight,Hr as Sprite,ir as StandardMaterial,cr as SubSurfaceMaterial,kr as Tetrahedron,Gt as TetrahedronGeometry,Or as Text,fr as Texture,ns as TiltShiftPass,pr as ToonMaterial,Tr as Torus,Ot as TorusGeometry,Er as TorusKnot,At as TorusKnotGeometry,ls as TroisJSVuePlugin,Ar as Tube,Dt as TubeGeometry,os as UnrealBloomPass,ds as ZoomBlurPass,Oe as bindProp,Be as bindProps,us as createApp,De as getMatcapUrl,Ee as lerp,Ae as lerpv2,Fe as lerpv3,Ue as limit,Te as propsValues,ke as setFromProp}; //# sourceMappingURL=trois.module.min.js.map diff --git a/build/trois.module.min.js.map b/build/trois.module.min.js.map index 9c270a6..6051e42 100644 --- a/build/trois.module.min.js.map +++ b/build/trois.module.min.js.map @@ -1 +1 @@ -{"version":3,"file":"trois.module.min.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/core/OrthographicCamera.js","../src/core/PerspectiveCamera.js","../src/core/Object3D.js","../src/core/Group.js","../src/core/Scene.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/CircleGeometry.js","../src/geometries/ConeGeometry.js","../src/geometries/CylinderGeometry.js","../src/geometries/DodecahedronGeometry.js","../src/geometries/IcosahedronGeometry.js","../src/geometries/LatheGeometry.js","../src/geometries/OctahedronGeometry.js","../src/geometries/PolyhedronGeometry.js","../src/geometries/RingGeometry.js","../src/geometries/SphereGeometry.js","../src/geometries/TetrahedronGeometry.js","../src/geometries/TorusGeometry.js","../src/geometries/TorusKnotGeometry.js","../src/geometries/TubeGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.js","../src/lights/DirectionalLight.js","../src/lights/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/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.js","../src/meshes/TextProps.js","../src/meshes/Text.js","../src/meshes/Torus.js","../src/meshes/TorusKnot.js","../src/meshes/Tube.js","../src/meshes/Gem.js","../src/meshes/Image.js","../src/meshes/InstancedMesh.js","../src/meshes/MirrorMesh.js","../src/meshes/RefractionMesh.js","../src/meshes/Sprite.js","../src/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/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 {\n Plane,\n Raycaster,\n Vector2,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\n/**\n * Three.js helper\n */\nexport default function useThree() {\n // default conf\n const conf = {\n canvas: null,\n antialias: true,\n alpha: false,\n autoClear: true,\n orbit_ctrl: false,\n mouse_move: false,\n mouse_raycast: false,\n mouse_over: false,\n click: false,\n resize: true,\n width: 0,\n height: 0,\n };\n\n // size\n const size = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n };\n\n // handlers\n const afterInitCallbacks = [];\n let afterResizeCallbacks = [];\n let beforeRenderCallbacks = [];\n\n // mouse tracking\n const mouse = new Vector2();\n const mouseV3 = new Vector3();\n const mousePlane = new Plane(new Vector3(0, 0, 1), 0);\n const raycaster = new Raycaster();\n\n // raycast objects\n const intersectObjects = [];\n\n // returned object\n const obj = {\n conf,\n renderer: null,\n camera: null,\n cameraCtrl: null,\n materials: {},\n scene: null,\n size,\n mouse, mouseV3,\n init,\n dispose,\n render,\n renderC,\n setSize,\n onAfterInit,\n onAfterResize, offAfterResize,\n onBeforeRender, offBeforeRender,\n addIntersectObject, removeIntersectObject,\n };\n\n /**\n * init three\n */\n function init(params) {\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n conf[key] = value;\n });\n }\n\n if (!obj.scene) {\n console.error('Missing Scene');\n return;\n }\n\n if (!obj.camera) {\n console.error('Missing Camera');\n return;\n }\n\n obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha });\n obj.renderer.autoClear = conf.autoClear;\n\n if (conf.orbit_ctrl) {\n obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement);\n if (conf.orbit_ctrl instanceof Object) {\n Object.entries(conf.orbit_ctrl).forEach(([key, value]) => {\n obj.orbitCtrl[key] = value;\n });\n }\n }\n\n if (conf.resize) {\n onResize();\n window.addEventListener('resize', onResize);\n } else {\n setSize(conf.width | 300, conf.height | 150);\n }\n\n conf.mouse_move = conf.mouse_move || conf.mouse_over;\n if (conf.mouse_move) {\n if (conf.mouse_move === 'body') {\n obj.mouse_move_element = document.body;\n } else {\n obj.mouse_move_element = obj.renderer.domElement;\n }\n obj.mouse_move_element.addEventListener('mousemove', onMousemove);\n obj.mouse_move_element.addEventListener('mouseleave', onMouseleave);\n }\n\n if (conf.click) {\n obj.renderer.domElement.addEventListener('click', onClick);\n }\n\n afterInitCallbacks.forEach(c => c());\n\n return true;\n };\n\n /**\n * add after init callback\n */\n function onAfterInit(callback) {\n afterInitCallbacks.push(callback);\n }\n\n /**\n * add after resize callback\n */\n function onAfterResize(callback) {\n afterResizeCallbacks.push(callback);\n }\n\n /**\n * remove after resize callback\n */\n function offAfterResize(callback) {\n afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback);\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(callback) {\n beforeRenderCallbacks.push(callback);\n }\n\n /**\n * remove before render callback\n */\n function offBeforeRender(callback) {\n beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback);\n }\n\n /**\n * default render\n */\n function render() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.renderer.render(obj.scene, obj.camera);\n }\n\n /**\n * composer render\n */\n function renderC() {\n if (obj.orbitCtrl) obj.orbitCtrl.update();\n beforeRenderCallbacks.forEach(c => c());\n obj.composer.render();\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o);\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o) {\n const i = intersectObjects.indexOf(o);\n if (i !== -1) {\n intersectObjects.splice(i, 1);\n }\n }\n\n /**\n * remove listeners\n */\n function dispose() {\n beforeRenderCallbacks = [];\n window.removeEventListener('resize', onResize);\n if (obj.mouse_move_element) {\n obj.mouse_move_element.removeEventListener('mousemove', onMousemove);\n obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave);\n }\n obj.renderer.domElement.removeEventListener('click', onClick);\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\n this.renderer.dispose();\n }\n\n /**\n */\n function updateMouse(e) {\n const rect = e.target.getBoundingClientRect();\n mouse.x = ((e.clientX - rect.left) / size.width) * 2 - 1;\n mouse.y = -((e.clientY - rect.top) / size.height) * 2 + 1;\n }\n\n /**\n * click listener\n */\n function onClick(e) {\n updateMouse(e);\n raycaster.setFromCamera(mouse, obj.camera);\n const objects = raycaster.intersectObjects(intersectObjects);\n for (let i = 0; i < objects.length; i++) {\n const o = objects[i].object;\n if (o.onClick) o.onClick(e);\n }\n }\n\n /**\n * mousemove listener\n */\n function onMousemove(e) {\n updateMouse(e);\n onMousechange(e);\n }\n\n /**\n * mouseleave listener\n */\n function onMouseleave(e) {\n // mouse.x = 0;\n // mouse.y = 0;\n onMousechange(e);\n }\n\n /**\n * mouse change\n */\n function onMousechange(e) {\n if (conf.mouse_over || conf.mouse_raycast) {\n raycaster.setFromCamera(mouse, obj.camera);\n\n if (conf.mouse_raycast) {\n // get mouse 3d position\n obj.camera.getWorldDirection(mousePlane.normal);\n mousePlane.normal.normalize();\n raycaster.ray.intersectPlane(mousePlane, mouseV3);\n }\n\n if (conf.mouse_over) {\n const onObjects = raycaster.intersectObjects(intersectObjects);\n const offObjects = [...intersectObjects];\n for (let i = 0; i < onObjects.length; i++) {\n const o = onObjects[i].object;\n if (!o.hover && o.onHover) {\n o.hover = true;\n o.onHover(true);\n }\n offObjects.splice(offObjects.indexOf(o), 1);\n }\n for (let i = 0; i < offObjects.length; i++) {\n const o = offObjects[i];\n if (o.hover && o.onHover) {\n o.hover = false;\n o.onHover(false);\n }\n }\n }\n }\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (conf.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight);\n } else {\n const elt = obj.renderer.domElement.parentNode;\n setSize(elt.clientWidth, elt.clientHeight);\n }\n afterResizeCallbacks.forEach(c => c());\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width, height) {\n size.width = width;\n size.height = height;\n size.ratio = width / height;\n\n obj.renderer.setSize(width, height, false);\n obj.camera.aspect = size.ratio;\n obj.camera.updateProjectionMatrix();\n\n if (obj.composer) {\n obj.composer.setSize(width, height);\n }\n\n if (obj.camera.type === 'OrthographicCamera') {\n size.wWidth = obj.camera.right - obj.camera.left;\n size.wHeight = obj.camera.top - obj.camera.bottom;\n } else {\n const wsize = getCameraSize();\n size.wWidth = wsize[0]; size.wHeight = wsize[1];\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const vFOV = (obj.camera.fov * Math.PI) / 180;\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z);\n const w = h * obj.camera.aspect;\n return [w, h];\n }\n\n return obj;\n}\n","import { h } from 'vue';\nimport useThree from './useThree';\n\nexport default {\n name: 'Renderer',\n props: {\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n mouseMove: { type: [Boolean, String], default: false },\n mouseRaycast: { type: Boolean, default: false },\n mouseOver: { type: Boolean, default: false },\n click: { type: Boolean, default: false },\n orbitCtrl: { type: [Boolean, Object], default: false },\n resize: { type: [Boolean, String], default: false },\n shadow: Boolean,\n width: String,\n height: String,\n },\n setup() {\n return {\n three: useThree(),\n raf: true,\n onMountedCallbacks: [],\n };\n },\n provide() {\n return {\n three: this.three,\n // renderer: this.three.renderer,\n rendererComponent: this,\n };\n },\n mounted() {\n const params = {\n canvas: this.$el,\n antialias: this.antialias,\n alpha: this.alpha,\n autoClear: this.autoClear,\n orbit_ctrl: this.orbitCtrl,\n mouse_move: this.mouseMove,\n mouse_raycast: this.mouseRaycast,\n mouse_over: this.mouseOver,\n click: this.click,\n resize: this.resize,\n width: this.width,\n height: this.height,\n };\n\n if (this.three.init(params)) {\n this.renderer = this.three.renderer;\n this.renderer.shadowMap.enabled = this.shadow;\n if (this.three.composer) this.animateC();\n else this.animate();\n };\n\n this.onMountedCallbacks.forEach(c => c());\n },\n beforeUnmount() {\n this.raf = false;\n this.three.dispose();\n },\n methods: {\n onMounted(callback) {\n this.onMountedCallbacks.push(callback);\n },\n onBeforeRender(callback) {\n this.three.onBeforeRender(callback);\n },\n onAfterResize(callback) {\n this.three.onAfterResize(callback);\n },\n animate() {\n if (this.raf) requestAnimationFrame(this.animate);\n this.three.render();\n },\n animateC() {\n if (this.raf) requestAnimationFrame(this.animateC);\n this.three.renderC();\n },\n },\n render() {\n return h('canvas', {}, this.$slots.default());\n },\n __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\n// shader defaults\nexport const defaultVertexShader = `\nvarying vec2 vUv;\nvoid main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\nexport const defaultFragmentShader = `\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n}`;\n","import { OrthographicCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'OrthographicCamera',\n};\n","import { PerspectiveCamera } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\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 render() { return []; },\n __hmrId: 'PerspectiveCamera',\n};\n","import { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n name: 'Object3D',\n inject: ['three', 'scene', 'rendererComponent'],\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 },\n // can't use setup because it will not be used in sub components\n // setup() {},\n unmounted() {\n if (this._parent) this._parent.remove(this.o3d);\n },\n methods: {\n initObject3D(o3d) {\n this.o3d = 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 let parent = this.$parent;\n while (parent) {\n if (parent.add) {\n parent.add(this.o3d);\n this._parent = parent;\n break;\n }\n parent = parent.$parent;\n }\n if (!this._parent) console.error('Missing parent (Scene, Group...)');\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 { Group } from 'three';\nimport Object3D from './Object3D.js';\n\nexport default {\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 { Scene, Color } from 'three';\nimport { watch } from 'vue';\n\nexport default {\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 { watch } from 'vue';\n\nexport default {\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","import { BoxGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n methods: {\n createGeometry() {\n let w = this.width, h = this.height, d = this.depth;\n if (this.size) {\n w = this.size; h = this.size; d = this.size;\n }\n this.geometry = new BoxGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments);\n },\n },\n};\n","import { CircleGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { ConeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { CylinderGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { DodecahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { IcosahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { LatheGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n};\n","import { OctahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { PolyhedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n};\n","import { RingGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new RingGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { SphereGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n};\n","import { TetrahedronGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronGeometry(this.radius, this.detail);\n },\n },\n};\n","import { TorusGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n};\n","import { TorusKnotGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n 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 methods: {\n createGeometry() {\n this.geometry = new TorusKnotGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n};\n","import { Curve, TubeGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radiusSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed);\n },\n },\n};\n","import { watch } from 'vue';\nimport Object3D from '../core/Object3D.js';\nimport { bindProp, setFromProp } from '../tools.js';\n\nexport default {\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.$parent.remove(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.$parent.add(this.light.target);\n },\n },\n __hmrId: 'Light',\n};\n","import { AmbientLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n created() {\n this.light = new AmbientLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'AmbientLight',\n};\n","import { DirectionalLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n target: Object,\n },\n created() {\n this.light = new DirectionalLight(this.color, this.intensity);\n this.initLight();\n },\n __hmrId: 'DirectionalLight',\n};\n","import { HemisphereLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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 { PointLight } from 'three';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n distance: {\n type: Number,\n default: 0,\n },\n decay: {\n type: Number,\n default: 1,\n },\n },\n created() {\n this.light = new PointLight(this.color, this.intensity, this.distance, this.decay);\n this.initLight();\n },\n __hmrId: 'PointLight',\n};\n","import { RectAreaLight } from 'three';\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\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.$parent.add(this.lightHelper);\n }\n\n this.initLight();\n },\n unmounted() {\n if (this.lightHelper) this.$parent.remove(this.lightHelper);\n },\n __hmrId: 'RectAreaLight',\n};\n","import { SpotLight } from 'three';\nimport { watch } from 'vue';\nimport Light from './Light.js';\n\nexport default {\n extends: Light,\n props: {\n angle: { 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 { watch } from 'vue';\nimport { FrontSide } from 'three';\n\nexport default {\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 { MeshBasicMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshLambertMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { MeshMatcapMaterial, TextureLoader } from 'three';\n// import { watch } from 'vue';\nimport { propsValues, getMatcapUrl } from '../tools.js';\nimport Material from './Material';\n\nexport default {\n extends: Material,\n props: {\n src: String,\n name: String,\n 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 { MeshPhongMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\n extends: Material,\n props: {\n emissive: { type: [Number, String], default: 0 },\n emissiveIntensity: { type: Number, default: 1 },\n reflectivity: { type: Number, default: 1 },\n shininess: { type: Number, default: 30 },\n specular: { type: [String, Number], default: 0x111111 },\n 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 { MeshStandardMaterial } from 'three';\nimport { watch } from 'vue';\nimport { bindProp, bindProps, propsValues } from '../tools.js';\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 {\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 { MeshPhysicalMaterial } from 'three';\nimport { propsValues } from '../tools.js';\nimport StandardMaterial from './StandardMaterial';\n\nexport default {\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 { ShaderMaterial } from 'three';\nimport { watch } from 'vue';\nimport { propsValues, defaultFragmentShader, defaultVertexShader } from '../tools.js';\n\nexport default {\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 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 [];\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 ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\n\nexport default {\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 { MeshToonMaterial } from 'three';\nimport { bindProps, propsValues } from '../tools.js';\nimport Material, { wireframeProps } from './Material';\n\nexport default {\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 { ClampToEdgeWrapping, LinearFilter, LinearMipmapLinearFilter, TextureLoader, UVMapping } from 'three';\nimport { watch } from 'vue';\nimport { bindProp } from '../tools.js';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n id: { type: String, default: 'map' },\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 this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\n 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 this.material.setTexture(this.texture, this.id);\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() { return []; },\n};\n","import { CubeTextureLoader, CubeRefractionMapping } from 'three';\nimport { watch } from 'vue';\n\nexport default {\n inject: ['material'],\n emits: ['loaded'],\n props: {\n path: String,\n urls: {\n type: Array,\n default: ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n onLoad: Function,\n onProgress: Function,\n onError: Function,\n id: { type: String, default: 'envMap' },\n refraction: Boolean,\n // todo: remove ?\n refractionRatio: { type: Number, default: 0.98 },\n },\n created() {\n this.refreshTexture();\n watch(() => this.path, this.refreshTexture);\n watch(() => this.urls, this.refreshTexture);\n },\n unmounted() {\n this.material.setTexture(null, this.id);\n this.texture.dispose();\n },\n methods: {\n createTexture() {\n this.texture = new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError);\n },\n refreshTexture() {\n this.createTexture();\n this.material.setTexture(this.texture, this.id);\n if (this.refraction) {\n this.texture.mapping = CubeRefractionMapping;\n this.material.setProp('refractionRatio', this.refractionRatio);\n }\n },\n onLoaded() {\n if (this.onLoad) this.onLoad();\n this.$emit('loaded');\n },\n },\n render() {\n return [];\n },\n};\n","import { watch } from 'vue';\nimport { Mesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n name: 'Mesh',\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n onHover: Function,\n onClick: Function,\n },\n // can't use setup because it will not be used in sub components\n // setup() {},\n 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 Mesh(this.geometry, this.material);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n if (this.onHover) {\n this.mesh.onHover = (over) => { this.onHover({ component: this, over }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n if (this.onClick) {\n this.mesh.onClick = (e) => { this.onClick({ component: this, event: e }); };\n this.three.addIntersectObject(this.mesh);\n }\n\n this.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 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 and material are not unmounted)\n if (this.geometry) this.geometry.dispose();\n if (this.material) this.material.dispose();\n },\n __hmrId: 'Mesh',\n};\n","import { BoxBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n if (this.size) {\n this.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\n } else {\n this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\n }\n },\n },\n __hmrId: 'Box',\n};\n","import { CircleBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'segments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Circle',\n};\n","import { ConeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cone',\n};\n","import { CylinderBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radiusTop', 'radiusBottom', 'height', 'radialSegments', 'heightSegments', 'openEnded', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Cylinder',\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Dodecahedron',\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Icosahedron',\n};\n","import { LatheBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['points', 'segments', 'phiStart', 'phiLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n __hmrId: 'Lathe',\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Octahedron',\n};\n","import { PlaneBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['width', 'height', 'widthSegments', 'heightSegments'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Plane',\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['vertices', 'indices', 'radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n __hmrId: 'Polyhedron',\n};\n","import { RingBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['innerRadius', 'outerRadius', 'thetaSegments', 'phiSegments', 'thetaStart', 'thetaLength'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n __hmrId: 'Ring',\n};\n","import { SphereBufferGeometry } from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: Number,\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n },\n watch: {\n radius() { this.refreshGeometry(); },\n widthSegments() { this.refreshGeometry(); },\n heightSegments() { this.refreshGeometry(); },\n },\n created() {\n this.createGeometry();\n },\n methods: {\n createGeometry() {\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\n },\n },\n __hmrId: 'Sphere',\n};\n","import { TetrahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Tetrahedron',\n};\n","export default {\n text: String,\n fontSrc: String,\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String], default: false },\n};\n","import { FontLoader, TextBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport TextProps from './TextProps.js';\n\nexport default {\n extends: Mesh,\n props: {\n ...TextProps,\n },\n 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 TextBufferGeometry(this.text, {\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n });\n\n if (this.align === 'center') {\n this.geometry.center();\n }\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n __hmrId: 'Torus',\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.tubularSegments, this.radialSegments, this.p, this.q);\n },\n },\n __hmrId: 'TorusKnot',\n};\n","import { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n path: Curve,\n points: Array,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n created() {\n this.createGeometry();\n const watchProps = ['tubularSegments', 'radius', 'radialSegments', 'closed'];\n watchProps.forEach(prop => {\n watch(() => this[prop], (v) => {\n this.refreshGeometry();\n });\n });\n watch(() => this.points, () => {\n updateTubeGeometryPoints(this.geometry, this.points);\n });\n },\n methods: {\n createGeometry() {\n let curve;\n if (this.points) {\n curve = new CatmullRomCurve3(this.points);\n } else if (this.path) {\n curve = this.path;\n } else {\n console.error('Missing path curve or points.');\n }\n this.geometry = new TubeGeometry(curve, this.tubularSegments, this.radius, this.radialSegments, this.closed);\n },\n // update curve points (without using prop, faster)\n updateCurve(points) {\n updateTubeGeometryPoints(this.geometry, points);\n },\n },\n __hmrId: 'Tube',\n};\n\nfunction 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 {\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.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initGem();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.meshBack) this.$parent.remove(this.meshBack);\n if (this.materialBack) this.materialBack.dispose();\n },\n methods: {\n initGem() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.side = FrontSide;\n this.material.envMap = cubeRT.texture;\n this.material.envMapIntensity = 10;\n this.material.metalness = 0;\n this.material.roughness = 0;\n this.material.opacity = 0.75;\n this.material.transparent = true;\n this.material.premultipliedAlpha = true;\n this.material.needsUpdate = true;\n\n this.materialBack = this.material.clone();\n this.materialBack.side = BackSide;\n this.materialBack.envMapIntensity = 5;\n this.materialBack.metalness = 1;\n this.materialBack.roughness = 0;\n this.materialBack.opacity = 0.5;\n\n this.meshBack = new TMesh(this.geometry, this.materialBack);\n\n bindProp(this, 'position', this.meshBack);\n bindProp(this, 'rotation', this.meshBack);\n bindProp(this, 'scale', this.meshBack);\n this.$parent.add(this.meshBack);\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.meshBack.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n this.meshBack.visible = true;\n },\n },\n __hmrId: 'Gem',\n};\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry, TextureLoader } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: String,\n width: Number,\n height: Number,\n keepSize: Boolean,\n },\n created() {\n this.createGeometry();\n this.createMaterial();\n this.initMesh();\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n watch(() => this[p], this.resize);\n });\n\n if (this.keepSize) this.three.onAfterResize(this.resize);\n },\n methods: {\n createGeometry() {\n this.geometry = new PlaneBufferGeometry(1, 1, 1, 1);\n },\n createMaterial() {\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\n },\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded);\n },\n refreshTexture() {\n if (this.texture) this.texture.dispose();\n this.material.map = this.loadTexture();\n this.material.needsUpdate = true;\n },\n onLoaded(texture) {\n this.texture = texture;\n this.resize();\n this.$emit('loaded');\n },\n resize() {\n if (!this.texture) return;\n const screen = this.three.size;\n const iW = this.texture.image.width;\n const iH = this.texture.image.height;\n const iRatio = iW / iH;\n let w, h;\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width;\n h = this.height * screen.wHeight / screen.height;\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width;\n h = w / iRatio;\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height;\n w = h * iRatio;\n }\n this.mesh.scale.x = w;\n this.mesh.scale.y = h;\n },\n },\n __hmrId: 'Image',\n};\n","import { watch } from 'vue';\nimport { InstancedMesh } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n count: Number,\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 created() {\n this.initMesh();\n },\n methods: {\n initMesh() {\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\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 if (this.mesh) this.mesh.material = material;\n },\n },\n __hmrId: 'InstancedMesh',\n};\n","import {\n CubeCamera,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'MirrorMesh',\n};\n","import {\n CubeCamera,\n CubeRefractionMapping,\n LinearMipmapLinearFilter,\n RGBFormat,\n WebGLCubeRenderTarget,\n} from 'three';\nimport Mesh from './Mesh.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: Mesh,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n refractionRatio: { type: Number, default: 0.98 },\n autoUpdate: Boolean,\n },\n mounted() {\n this.initMirrorMesh();\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\n else this.rendererComponent.onMounted(this.updateCubeRT);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateCubeRT);\n if (this.cubeCamera) this.$parent.remove(this.cubeCamera);\n },\n methods: {\n initMirrorMesh() {\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\n bindProp(this, 'position', this.cubeCamera);\n this.$parent.add(this.cubeCamera);\n\n this.material.envMap = cubeRT.texture;\n this.material.refractionRatio = this.refractionRatio;\n this.material.needsUpdate = true;\n },\n updateCubeRT() {\n this.mesh.visible = false;\n this.cubeCamera.update(this.three.renderer, this.scene);\n this.mesh.visible = true;\n },\n },\n __hmrId: 'RefractionMesh',\n};\n","import { Sprite, SpriteMaterial, TextureLoader } from 'three';\nimport Object3D from '../core/Object3D.js';\n\nexport default {\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 { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', gltf);\r\n this.initObject3D(gltf.scene);\r\n });\r\n },\r\n};\r\n","import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';\r\nimport Object3D from '../core/Object3D.js';\r\n\r\nexport default {\r\n extends: Object3D,\r\n emits: ['loaded'],\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.$emit('loaded', fbx);\r\n this.initObject3D(fbx);\r\n });\r\n },\r\n};\r\n","import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\n\nexport default {\n setup() {\n return {\n passes: [],\n };\n },\n inject: ['three'],\n provide() {\n return {\n passes: this.passes,\n };\n },\n mounted() {\n this.three.onAfterInit(() => {\n this.composer = new EffectComposer(this.three.renderer);\n this.three.renderer.autoClear = false;\n this.passes.forEach(pass => {\n this.composer.addPass(pass);\n });\n this.three.composer = this.composer;\n\n this.resize();\n this.three.onAfterResize(this.resize);\n });\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n this.composer.setSize(this.three.size.width, this.three.size.height);\n },\n },\n render() {\n return this.$slots.default();\n },\n __hmrId: 'EffectComposer',\n};\n","export default {\n inject: ['three', 'passes'],\n beforeMount() {\n if (!this.passes) {\n console.error('Missing parent EffectComposer');\n }\n },\n unmounted() {\n if (this.pass.dispose) this.pass.dispose();\n },\n render() {\n return [];\n },\n __hmrId: 'EffectPass',\n};\n","import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const pass = new RenderPass(this.three.scene, this.three.camera);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'RenderPass',\n};\n","import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n focus: {\n type: Number,\n default: 1,\n },\n aperture: {\n type: Number,\n default: 0.025,\n },\n maxblur: {\n type: Number,\n default: 0.01,\n },\n },\n watch: {\n focus() { this.pass.uniforms.focus.value = this.focus; },\n aperture() { this.pass.uniforms.aperture.value = this.aperture; },\n maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; },\n },\n mounted() {\n if (!this.three.scene) {\n console.error('Missing Scene');\n }\n if (!this.three.camera) {\n console.error('Missing Camera');\n }\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.three.size.width,\n height: this.three.size.height,\n };\n const pass = new BokehPass(this.three.scene, this.three.camera, params);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'BokehPass',\n};\n","import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n noiseIntensity: {\n type: Number,\n default: 0.5,\n },\n scanlinesIntensity: {\n type: Number,\n default: 0.05,\n },\n scanlinesCount: {\n type: Number,\n default: 4096,\n },\n grayscale: {\n type: Number,\n default: 0,\n },\n },\n watch: {\n noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; },\n scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; },\n scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; },\n grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; },\n },\n mounted() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'FilmPass',\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n const pass = new ShaderPass(FXAAShader);\n this.passes.push(pass);\n this.pass = pass;\n\n // resize will be called in three init\n this.three.onAfterResize(this.resize);\n },\n unmounted() {\n this.three.offAfterResize(this.resize);\n },\n methods: {\n resize() {\n const { resolution } = this.pass.material.uniforms;\n resolution.value.x = 1 / this.three.size.width;\n resolution.value.y = 1 / this.three.size.height;\n },\n },\n __hmrId: 'FXAAPass',\n};\n","import { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n },\n mounted() {\n const pass = new HalftonePass(this.three.size.width, this.three.size.height, {});\n\n ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => {\n pass.uniforms[p].value = this[p];\n watch(() => this[p], () => {\n pass.uniforms[p].value = this[p];\n });\n });\n\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'HalftonePass',\n};\n","import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n mounted() {\n // three size is not set yet, but this pass will be resized by effect composer\n const pass = new SMAAPass(this.three.size.width, this.three.size.height);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'SMAAPass',\n};\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { Vector2 } from 'three';\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport { watch } from 'vue';\nimport EffectPass from './EffectPass.js';\nimport TiltShift from '../shaders/TiltShift.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object, default: { x: 0, y: 100 } },\n end: { type: Object, default: { x: 10, y: 100 } },\n },\n mounted() {\n this.pass = new ShaderPass(TiltShift);\n this.passes.push(this.pass);\n\n this.pass1 = new ShaderPass(TiltShift);\n this.passes.push(this.pass1);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n const uniforms1 = this.uniforms1 = this.pass1.uniforms;\n uniforms1.blurRadius = uniforms.blurRadius;\n uniforms1.gradientRadius = uniforms.gradientRadius;\n uniforms1.start = uniforms.start;\n uniforms1.end = uniforms.end;\n uniforms1.texSize = uniforms.texSize;\n\n 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 methods: {\n updateFocusLine() {\n this.uniforms.start.value.copy(this.start);\n this.uniforms.end.value.copy(this.end);\n const dv = new Vector2().copy(this.end).sub(this.start).normalize();\n this.uniforms.delta.value.copy(dv);\n this.uniforms1.delta.value.set(-dv.y, dv.x);\n },\n },\n __hmrId: 'TiltShiftPass',\n};\n","import { Vector2 } from 'three';\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\nimport EffectPass from './EffectPass.js';\n\nexport default {\n extends: EffectPass,\n props: {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n },\n watch: {\n strength() { this.pass.strength = this.strength; },\n radius() { this.pass.radius = this.radius; },\n threshold() { this.pass.threshold = this.threshold; },\n },\n mounted() {\n const size = new Vector2(this.three.size.width, this.three.size.height);\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);\n this.passes.push(pass);\n this.pass = pass;\n },\n __hmrId: 'UnrealBloomPass',\n};\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three';\nimport DefaultShader from './default';\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n};\n","import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\nimport EffectPass from './EffectPass.js';\nimport ZoomBlur from '../shaders/ZoomBlur.js';\nimport { bindProp } from '../tools.js';\n\nexport default {\n extends: EffectPass,\n props: {\n center: { type: Object, default: { x: 0.5, y: 0.5 } },\n strength: { type: Number, default: 0.5 },\n },\n mounted() {\n this.pass = new ShaderPass(ZoomBlur);\n this.passes.push(this.pass);\n\n const uniforms = this.uniforms = this.pass.uniforms;\n bindProp(this, 'center', uniforms.center, 'value');\n bindProp(this, 'strength', uniforms.strength, 'value');\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 '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 '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":["useThree","const","conf","canvas","antialias","alpha","autoClear","orbit_ctrl","mouse_move","mouse_raycast","mouse_over","click","resize","width","height","size","wWidth","wHeight","ratio","afterInitCallbacks","afterResizeCallbacks","beforeRenderCallbacks","mouse","Vector2","mouseV3","Vector3","mousePlane","Plane","raycaster","Raycaster","intersectObjects","obj","renderer","camera","cameraCtrl","materials","scene","params","Object","entries","forEach","key","value","console","error","WebGLRenderer","orbitCtrl","OrbitControls","domElement","onResize","window","addEventListener","setSize","mouse_move_element","document","body","onMousemove","onMouseleave","onClick","c","removeEventListener","dispose","this","update","render","composer","callback","push","filter","o","indexOf","i","splice","updateMouse","e","rect","target","getBoundingClientRect","x","clientX","left","y","clientY","top","setFromCamera","objects","length","object","onMousechange","getWorldDirection","normal","normalize","ray","intersectPlane","onObjects","offObjects","hover","onHover","let","innerWidth","innerHeight","elt","parentNode","clientWidth","clientHeight","aspect","updateProjectionMatrix","type","right","bottom","wsize","vFOV","fov","Math","PI","h","tan","abs","position","z","getCameraSize","name","props","Boolean","default","mouseMove","String","mouseRaycast","mouseOver","shadow","setup","three","raf","onMountedCallbacks","provide","rendererComponent","mounted","$el","init","shadowMap","enabled","animateC","animate","beforeUnmount","methods","onMounted","onBeforeRender","onAfterResize","requestAnimationFrame","renderC","$slots","__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","MATCAP_ROOT","defaultVertexShader","defaultFragmentShader","inject","Number","near","far","zoom","created","OrthographicCamera","p","lookAt","PerspectiveCamera","v","rotation","scale","unmounted","_parent","remove","o3d","initObject3D","parent","$parent","add","extends","Object3D","group","Group","id","background","Scene","Color","set","rotateX","rotateY","rotateZ","mesh","watchProps","$props","createGeometry","rotateGeometry","setGeometry","geometry","addWatchers","refreshGeometry","oldGeo","Geometry","depth","widthSegments","heightSegments","depthSegments","w","d","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","radiusSegments","closed","TubeGeometry","color","intensity","castShadow","shadowMapSize","shadowCamera","light","initLight","mapSize","Light","AmbientLight","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","setProp","needsUpdate","setTexture","texture","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","string","find","replace","meshphongFragHead","ShaderChunk","meshphong_frag","slice","meshphongFragBody","SubsurfaceScatteringShader","UniformsUtils","merge","ShaderLib","phong","thicknessColor","thicknessDistortion","thicknessAmbient","thicknessAttenuation","thicknessPower","thicknessScale","lights_fragment_begin","split","join","clone","_key","_value","TShaderMaterial","lights","MeshToonMaterial","emits","onLoad","Function","onProgress","onError","mapping","UVMapping","wrapS","ClampToEdgeWrapping","wrapT","magFilter","LinearFilter","minFilter","LinearMipmapLinearFilter","repeat","center","refreshTexture","createTexture","onLoaded","$emit","urls","refraction","CubeTextureLoader","setPath","CubeRefractionMapping","receiveShadow","loading","initMesh","Mesh","over","component","addIntersectObject","event","removeIntersectObject","BoxBufferGeometry","CircleBufferGeometry","ConeBufferGeometry","CylinderBufferGeometry","DodecahedronBufferGeometry","IcosahedronBufferGeometry","LatheBufferGeometry","OctahedronBufferGeometry","PlaneBufferGeometry","PolyhedronBufferGeometry","RingBufferGeometry","SphereBufferGeometry","TetrahedronBufferGeometry","text","fontSrc","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align","TextProps","data","font","FontLoader","TextBufferGeometry","TorusBufferGeometry","TorusKnotBufferGeometry","updateTubeGeometryPoints","curve","CatmullRomCurve3","updateCurve","parameters","frames","computeFrenetFrames","tangents","normals","binormals","P","pArray","attributes","array","nArray","updateSegment","getPointAt","N","B","j","sin","cos","index","cubeRTSize","cubeCameraNear","cubeCameraFar","autoUpdate","initGem","updateCubeRT","offBeforeRender","meshBack","materialBack","cubeRT","WebGLCubeRenderTarget","RGBFormat","generateMipmaps","cubeCamera","CubeCamera","envMap","premultipliedAlpha","BackSide","TMesh","visible","keepSize","DoubleSide","map","loadTexture","screen","iRatio","image","count","beforeMount","InstancedMesh","initMirrorMesh","SpriteMaterial","sprite","Sprite","updateUV","iWidth","iHeight","positions","GLTFLoader","gltf","FBXLoader","fbx","passes","onAfterInit","EffectComposer","pass","addPass","offAfterResize","EffectPass","RenderPass","focus","aperture","maxblur","BokehPass","noiseIntensity","scanlinesIntensity","scanlinesCount","grayscale","nIntensity","sIntensity","sCount","FilmPass","ShaderPass","FXAAShader","resolution","shape","rotateR","rotateG","rotateB","scatter","HalftonePass","SMAAPass","tDiffuse","blurRadius","gradientRadius","start","end","delta","texSize","DefaultShader","TiltShift","pass1","uniforms1","updateFocusLine","copy","dv","sub","strength","threshold","UnrealBloomPass","ZoomBlur","TroisJSVuePlugin","install","app","comp","TROIS","createApp","_createApp","use"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"trois.module.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 ',\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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"} \ No newline at end of file diff --git a/package.json b/package.json index 6cc0ca3..1dfaeb2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "troisjs", - "version": "0.1.19", + "version": "0.2.1", "scripts": { "dev": "vite", "build": "vite build", @@ -22,7 +22,6 @@ "gsap": "^3.5.1", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-vue": "^6.0.0-beta.11", - "sass": "^1.26.10", "three": "^0.127", "vite": "^2.1.5", "vue": "^3.0.11"