mirror of
https://github.com/troisjs/trois.git
synced 2024-11-24 04:12:02 +08:00
1 line
153 KiB
Plaintext
1 line
153 KiB
Plaintext
{"version":3,"file":"trois.module.min.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/use/useBindProp.js","../src/core/PerspectiveCamera.js","../src/core/Scene.js","../src/core/Texture.js","../src/core/CubeTexture.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/CircleGeometry.js","../src/geometries/ConeGeometry.js","../src/geometries/CylinderGeometry.js","../src/geometries/DodecahedronGeometry.js","../src/geometries/IcosahedronGeometry.js","../src/geometries/LatheGeometry.js","../src/geometries/OctahedronGeometry.js","../src/geometries/PolyhedronGeometry.js","../src/geometries/RingGeometry.js","../src/geometries/SphereGeometry.js","../src/geometries/TetrahedronGeometry.js","../src/geometries/TorusGeometry.js","../src/geometries/TorusKnotGeometry.js","../src/geometries/TubeGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.js","../src/lights/DirectionalLight.js","../src/lights/PointLight.js","../src/lights/SpotLight.js","../src/materials/Material.js","../src/materials/BasicMaterial.js","../src/materials/LambertMaterial.js","../src/materials/PhongMaterial.js","../src/materials/StandardMaterial.js","../src/materials/PhysicalMaterial.js","../src/materials/SubsurfaceScatteringShader.js","../src/materials/SubSurfaceMaterial.js","../src/materials/ShaderMaterial.js","../src/materials/ToonMaterial.js","../src/materials/Map.js","../src/materials/EnvMap.js","../src/meshes/Mesh.js","../src/meshes/Box.js","../src/meshes/Circle.js","../src/meshes/Cone.js","../src/meshes/Cylinder.js","../src/meshes/Dodecahedron.js","../src/meshes/Icosahedron.js","../src/meshes/Lathe.js","../src/meshes/Octahedron.js","../src/meshes/Plane.js","../src/meshes/Polyhedron.js","../src/meshes/Ring.js","../src/meshes/Sphere.js","../src/meshes/Tetrahedron.js","../src/meshes/TextProps.js","../src/meshes/Text.js","../src/meshes/Torus.js","../src/meshes/TorusKnot.js","../src/meshes/Tube.js","../src/meshes/Gem.js","../src/meshes/Image.js","../src/meshes/InstancedMesh.js","../src/meshes/MirrorMesh.js","../src/meshes/RefractionMesh.js","../src/meshes/Sprite.js","../src/effects/EffectComposer.js","../src/effects/EffectPass.js","../src/effects/RenderPass.js","../src/effects/BokehPass.js","../src/effects/FilmPass.js","../src/effects/HalftonePass.js","../src/effects/SAOPass.js","../src/effects/UnrealBloomPass.js","../src/glsl/snoise2.glsl.js","../src/components/noisy/NoisyImage.js","../src/components/noisy/NoisyPlane.js","../src/components/noisy/NoisySphere.js","../src/components/noisy/NoisyText.js","../src/components/sliders/AnimatedPlane.js","../src/components/sliders/Slider1.vue","../src/use/useTextures.js","../src/components/viewers/GLTFViewer.vue","../src/plugin.js"],"sourcesContent":["import {\r\n Plane,\r\n Raycaster,\r\n Vector2,\r\n Vector3,\r\n WebGLRenderer,\r\n} from 'three';\r\n\r\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\r\n\r\n/**\r\n * Three.js helper\r\n */\r\nexport default function useThree() {\r\n // default conf\r\n const conf = {\r\n canvas: null,\r\n antialias: true,\r\n alpha: false,\r\n autoClear: true,\r\n orbit_ctrl: false,\r\n mouse_move: false,\r\n mouse_raycast: false,\r\n resize: 'window',\r\n width: 0,\r\n height: 0,\r\n };\r\n\r\n // size\r\n const size = {\r\n width: 0, height: 0,\r\n wWidth: 0, wHeight: 0,\r\n ratio: 0,\r\n };\r\n\r\n // handlers\r\n let afterInitCallbacks = [];\r\n let afterResizeCallbacks = [];\r\n let beforeRenderCallbacks = [];\r\n\r\n // mouse tracking\r\n const mouse = new Vector2();\r\n const mouseV3 = new Vector3();\r\n const mousePlane = new Plane(new Vector3(0, 0, 1), 0);\r\n const raycaster = new Raycaster();\r\n\r\n // returned object\r\n const obj = {\r\n conf,\r\n renderer: null,\r\n camera: null,\r\n cameraCtrl: null,\r\n materials: {},\r\n scene: null,\r\n size,\r\n mouse, mouseV3,\r\n init,\r\n dispose,\r\n render,\r\n renderC,\r\n setSize,\r\n onAfterInit,\r\n onAfterResize, offAfterResize,\r\n onBeforeRender, offBeforeRender,\r\n };\r\n\r\n /**\r\n * init three\r\n */\r\n function init(params) {\r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n conf[key] = value;\r\n });\r\n }\r\n\r\n if (!obj.scene) {\r\n console.error('Missing Scene');\r\n return;\r\n }\r\n\r\n if (!obj.camera) {\r\n console.error('Missing Camera');\r\n return;\r\n }\r\n\r\n obj.renderer = new WebGLRenderer({ canvas: conf.canvas, antialias: conf.antialias, alpha: conf.alpha });\r\n obj.renderer.autoClear = conf.autoClear;\r\n\r\n if (conf.orbit_ctrl) {\r\n obj.orbitCtrl = new OrbitControls(obj.camera, obj.renderer.domElement);\r\n if (conf.orbit_ctrl instanceof Object) {\r\n Object.entries(conf.orbit_ctrl).forEach(([key, value]) => {\r\n obj.orbitCtrl[key] = value;\r\n });\r\n }\r\n }\r\n\r\n if (conf.width && conf.height) {\r\n setSize(conf.width, conf.height);\r\n } else if (conf.resize) {\r\n onResize();\r\n window.addEventListener('resize', onResize);\r\n }\r\n\r\n if (conf.mouse_move) {\r\n if (conf.mouse_move === 'body') {\r\n obj.mouse_move_element = document.body;\r\n } else {\r\n obj.mouse_move_element = obj.renderer.domElement;\r\n }\r\n obj.mouse_move_element.addEventListener('mousemove', onMousemove);\r\n obj.mouse_move_element.addEventListener('mouseleave', onMouseleave);\r\n }\r\n\r\n afterInitCallbacks.forEach(c => c());\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * add after init callback\r\n */\r\n function onAfterInit(callback) {\r\n afterInitCallbacks.push(callback);\r\n }\r\n\r\n /**\r\n * add after resize callback\r\n */\r\n function onAfterResize(callback) {\r\n afterResizeCallbacks.push(callback);\r\n }\r\n\r\n /**\r\n * remove after resize callback\r\n */\r\n function offAfterResize(callback) {\r\n afterResizeCallbacks = afterResizeCallbacks.filter(c => c !== callback);\r\n }\r\n\r\n /**\r\n * add before render callback\r\n */\r\n function onBeforeRender(callback) {\r\n beforeRenderCallbacks.push(callback);\r\n }\r\n\r\n /**\r\n * remove before render callback\r\n */\r\n function offBeforeRender(callback) {\r\n beforeRenderCallbacks = beforeRenderCallbacks.filter(c => c !== callback);\r\n }\r\n\r\n /**\r\n * default render\r\n */\r\n function render() {\r\n if (obj.orbitCtrl) obj.orbitCtrl.update();\r\n beforeRenderCallbacks.forEach(c => c());\r\n obj.renderer.render(obj.scene, obj.camera);\r\n }\r\n\r\n /**\r\n * composer render\r\n */\r\n function renderC() {\r\n if (obj.orbitCtrl) obj.orbitCtrl.update();\r\n beforeRenderCallbacks.forEach(c => c());\r\n obj.composer.render();\r\n }\r\n\r\n /**\r\n * remove listeners\r\n */\r\n function dispose() {\r\n beforeRenderCallbacks = [];\r\n window.removeEventListener('resize', onResize);\r\n if (obj.mouse_move_element) {\r\n obj.mouse_move_element.removeEventListener('mousemove', onMousemove);\r\n obj.mouse_move_element.removeEventListener('mouseleave', onMouseleave);\r\n }\r\n if (obj.orbitCtrl) obj.orbitCtrl.dispose();\r\n this.renderer.dispose();\r\n }\r\n\r\n /**\r\n * mousemove listener\r\n */\r\n function onMousemove(e) {\r\n mouse.x = (e.clientX / size.width) * 2 - 1;\r\n mouse.y = -(e.clientY / size.height) * 2 + 1;\r\n updateMouseV3();\r\n }\r\n\r\n /**\r\n * mouseleave listener\r\n */\r\n function onMouseleave(e) {\r\n mouse.x = 0;\r\n mouse.y = 0;\r\n updateMouseV3();\r\n }\r\n\r\n /**\r\n * get 3d mouse position\r\n */\r\n function updateMouseV3() {\r\n if (conf.mouse_raycast) {\r\n obj.camera.getWorldDirection(mousePlane.normal);\r\n mousePlane.normal.normalize();\r\n raycaster.setFromCamera(mouse, obj.camera);\r\n raycaster.ray.intersectPlane(mousePlane, mouseV3);\r\n }\r\n }\r\n\r\n /**\r\n * resize listener\r\n */\r\n function onResize() {\r\n if (conf.resize === 'window') {\r\n setSize(window.innerWidth, window.innerHeight);\r\n } else {\r\n setSize(conf.resize.clientWidth, conf.resize.clientHeight);\r\n }\r\n afterResizeCallbacks.forEach(c => c());\r\n }\r\n\r\n /**\r\n * update renderer size and camera\r\n */\r\n function setSize(width, height) {\r\n size.width = width;\r\n size.height = height;\r\n size.ratio = width / height;\r\n\r\n obj.renderer.setSize(width, height, false);\r\n obj.camera.aspect = size.ratio;\r\n obj.camera.updateProjectionMatrix();\r\n\r\n if (obj.composer) {\r\n obj.composer.setSize(width, height);\r\n }\r\n\r\n const wsize = getCameraSize();\r\n size.wWidth = wsize[0]; size.wHeight = wsize[1];\r\n }\r\n\r\n /**\r\n * calculate camera visible area size\r\n */\r\n function getCameraSize() {\r\n const vFOV = (obj.camera.fov * Math.PI) / 180;\r\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(obj.camera.position.z);\r\n const w = h * obj.camera.aspect;\r\n return [w, h];\r\n }\r\n\r\n return obj;\r\n}\r\n","import { h } from 'vue';\r\nimport useThree from './useThree';\r\n\r\nexport default {\r\n props: {\r\n antialias: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n alpha: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n autoClear: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n shadow: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n orbitCtrl: {\r\n type: [Boolean, Object],\r\n default: false,\r\n },\r\n mouseMove: {\r\n type: [Boolean, String],\r\n default: false,\r\n },\r\n mouseRaycast: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n resize: {\r\n type: [Boolean, String, Element],\r\n default: 'window',\r\n },\r\n width: String,\r\n height: String,\r\n },\r\n setup() {\r\n return {\r\n three: useThree(),\r\n raf: true,\r\n onMountedCallbacks: [],\r\n };\r\n },\r\n provide() {\r\n return {\r\n three: this.three,\r\n // renderer: this.three.renderer,\r\n rendererComponent: this,\r\n };\r\n },\r\n mounted() {\r\n const params = {\r\n canvas: this.$refs.canvas,\r\n antialias: this.antialias,\r\n alpha: this.alpha,\r\n autoClear: this.autoClear,\r\n orbit_ctrl: this.orbitCtrl,\r\n mouse_move: this.mouseMove,\r\n mouse_raycast: this.mouseRaycast,\r\n resize: this.resize,\r\n width: this.width,\r\n height: this.height,\r\n };\r\n\r\n if (this.three.init(params)) {\r\n this.three.renderer.shadowMap.enabled = this.shadow;\r\n if (this.three.composer) this.animateC();\r\n else this.animate();\r\n };\r\n\r\n this.onMountedCallbacks.forEach(c => c());\r\n },\r\n beforeUnmount() {\r\n this.raf = false;\r\n this.three.dispose();\r\n },\r\n methods: {\r\n onMounted(callback) {\r\n this.onMountedCallbacks.push(callback);\r\n },\r\n onBeforeRender(callback) {\r\n this.three.onBeforeRender(callback);\r\n },\r\n onAfterResize(callback) {\r\n this.three.onAfterResize(callback);\r\n },\r\n animate() {\r\n if (this.raf) requestAnimationFrame(this.animate);\r\n this.three.render();\r\n },\r\n animateC() {\r\n if (this.raf) requestAnimationFrame(this.animateC);\r\n this.three.renderC();\r\n },\r\n },\r\n render() {\r\n return h(\r\n 'canvas',\r\n { ref: 'canvas' },\r\n this.$slots.default()\r\n );\r\n },\r\n};\r\n","export function setFromProp(o, prop) {\r\n if (prop instanceof Object) {\r\n Object.entries(prop).forEach(([key, value]) => {\r\n o[key] = value;\r\n });\r\n }\r\n};\r\n\r\nexport function propsValues(props, exclude) {\r\n const values = {};\r\n Object.entries(props).forEach(([key, value]) => {\r\n if (!exclude || (exclude && !exclude.includes(key))) {\r\n values[key] = value;\r\n }\r\n });\r\n return values;\r\n};\r\n\r\nexport function lerp(value1, value2, amount) {\r\n amount = amount < 0 ? 0 : amount;\r\n amount = amount > 1 ? 1 : amount;\r\n return value1 + (value2 - value1) * amount;\r\n};\r\n\r\nexport function lerpv3(v1, v2, amount) {\r\n v1.x = lerp(v1.x, v2.x, amount);\r\n v1.y = lerp(v1.y, v2.y, amount);\r\n v1.z = lerp(v1.z, v2.z, amount);\r\n};\r\n\r\nexport function limit(val, min, max) {\r\n return val < min ? min : (val > max ? max : val);\r\n};\r\n","import { toRef, watch } from 'vue';\r\nimport { setFromProp } from '../tools.js';\r\n\r\nexport default function useBindProp(comp, prop, object) {\r\n if (comp[prop]) {\r\n const ref = toRef(comp, prop);\r\n setFromProp(object, ref.value);\r\n watch(ref, () => {\r\n setFromProp(object, ref.value);\r\n }, { deep: true });\r\n }\r\n};\r\n","import { PerspectiveCamera, Vector3 } from 'three';\r\nimport { watch } from 'vue';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n inject: ['three'],\r\n props: {\r\n aspect: {\r\n type: Number,\r\n default: 1,\r\n },\r\n far: {\r\n type: Number,\r\n default: 2000,\r\n },\r\n fov: {\r\n type: Number,\r\n default: 50,\r\n },\r\n near: {\r\n type: Number,\r\n default: 0.1,\r\n },\r\n position: {\r\n type: [Object, Vector3],\r\n default: { x: 0, y: 0, z: 0 },\r\n },\r\n },\r\n created() {\r\n this.camera = new PerspectiveCamera(this.fov, this.aspect, this.near, this.far);\r\n useBindProp(this, 'position', this.camera.position);\r\n\r\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\r\n watch(() => this[p], () => {\r\n this.camera[p] = this[p];\r\n this.camera.updateProjectionMatrix();\r\n });\r\n });\r\n\r\n this.three.camera = this.camera;\r\n },\r\n render() {\r\n return [];\r\n },\r\n __hmrId: 'PerspectiveCamera',\r\n};\r\n","import { Scene, Color } from 'three';\r\nimport { watch } from 'vue';\r\n\r\nexport default {\r\n inject: ['three'],\r\n props: {\r\n id: String,\r\n background: [String, Number],\r\n },\r\n setup(props) {\r\n const scene = new Scene();\r\n if (props.background) scene.background = new Color(props.background);\r\n watch(() => props.background, (value) => { scene.background = new Color(value); });\r\n return { scene };\r\n },\r\n provide() {\r\n return {\r\n scene: this.scene,\r\n };\r\n },\r\n mounted() {\r\n if (!this.three.scene) {\r\n this.three.scene = this.scene;\r\n }\r\n },\r\n methods: {\r\n // add(o) {\r\n // this.scene.add(o);\r\n // },\r\n // remove(o) {\r\n // this.scene.remove(o);\r\n // },\r\n },\r\n render() {\r\n if (this.$slots.default) {\r\n return this.$slots.default();\r\n }\r\n return [];\r\n },\r\n};\r\n","import { TextureLoader } from 'three';\r\nimport { watch } from 'vue';\r\n\r\nexport default {\r\n inject: ['three'],\r\n emits: ['loaded'],\r\n props: {\r\n src: String,\r\n onLoad: Function,\r\n onProgress: Function,\r\n onError: Function,\r\n },\r\n created() {\r\n this.createTexture();\r\n watch(() => this.src, this.refreshTexture);\r\n },\r\n unmounted() {\r\n this.texture.dispose();\r\n },\r\n methods: {\r\n createTexture() {\r\n this.texture = new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError);\r\n },\r\n refreshTexture() {\r\n this.createTexture();\r\n },\r\n onLoaded() {\r\n if (this.onLoad) this.onLoad();\r\n this.$emit('loaded');\r\n },\r\n },\r\n render() {\r\n return [];\r\n },\r\n};\r\n","import { CubeTextureLoader } from 'three';\r\nimport { watch } from 'vue';\r\n\r\nexport default {\r\n inject: ['three'],\r\n emits: ['loaded'],\r\n props: {\r\n path: String,\r\n urls: {\r\n type: Array,\r\n default: ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\r\n },\r\n onLoad: Function,\r\n onProgress: Function,\r\n onError: Function,\r\n },\r\n created() {\r\n this.createTexture();\r\n watch(() => this.path, this.refreshTexture);\r\n watch(() => this.urls, this.refreshTexture);\r\n },\r\n unmounted() {\r\n this.texture.dispose();\r\n },\r\n methods: {\r\n createTexture() {\r\n this.texture = new CubeTextureLoader()\r\n .setPath(this.path)\r\n .load(this.urls, this.onLoaded, this.onProgress, this.onError);\r\n },\r\n refreshTexture() {\r\n this.createTexture();\r\n },\r\n onLoaded() {\r\n if (this.onLoad) this.onLoad();\r\n this.$emit('loaded');\r\n },\r\n },\r\n render() {\r\n return [];\r\n },\r\n};\r\n","import { watch } from 'vue';\r\n\r\nexport default {\r\n emits: ['ready'],\r\n inject: ['mesh'],\r\n props: {\r\n rotateX: Number,\r\n rotateY: Number,\r\n rotateZ: Number,\r\n },\r\n created() {\r\n if (!this.mesh) {\r\n console.error('Missing parent Mesh');\r\n }\r\n this.watchProps = [];\r\n Object.entries(this.$props).forEach(e => this.watchProps.push(e[0]));\r\n },\r\n beforeMount() {\r\n this.createGeometry();\r\n this.rotateGeometry();\r\n this.mesh.setGeometry(this.geometry);\r\n },\r\n mounted() {\r\n this.addWatchers();\r\n },\r\n unmounted() {\r\n this.geometry.dispose();\r\n },\r\n methods: {\r\n rotateGeometry() {\r\n if (this.rotateX) this.geometry.rotateX(this.rotateX);\r\n if (this.rotateY) this.geometry.rotateY(this.rotateY);\r\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ);\r\n },\r\n addWatchers() {\r\n this.watchProps.forEach(prop => {\r\n watch(() => this[prop], () => {\r\n this.refreshGeometry();\r\n });\r\n });\r\n },\r\n refreshGeometry() {\r\n const oldGeo = this.geometry;\r\n this.createGeometry();\r\n this.rotateGeometry();\r\n this.mesh.setGeometry(this.geometry);\r\n oldGeo.dispose();\r\n },\r\n },\r\n render() {\r\n return [];\r\n },\r\n};\r\n","import { BoxBufferGeometry } from 'three';\r\nimport Geometry from './Geometry.js';\r\n\r\nexport default {\r\n extends: Geometry,\r\n props: {\r\n size: Number,\r\n width: { type: Number, default: 1 },\r\n height: { type: Number, default: 1 },\r\n depth: { type: Number, default: 1 },\r\n widthSegments: { type: Number, default: 1 },\r\n heightSegments: { type: Number, default: 1 },\r\n depthSegments: { type: Number, default: 1 },\r\n },\r\n methods: {\r\n createGeometry() {\r\n let w = this.width, h = this.height, d = this.depth;\r\n if (this.size) {\r\n w = this.size; h = this.size; d = this.size;\r\n }\r\n this.geometry = new BoxBufferGeometry(w, h, d, this.widthSegments, this.heightSegments, this.depthSegments);\r\n },\r\n },\r\n};\r\n","import { CircleBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CircleBufferGeometry(this.radius, this.segments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { ConeBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new ConeBufferGeometry(this.radius, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { CylinderBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new CylinderBufferGeometry(this.radiusTop, this.radiusBottom, this.height, this.radialSegments, this.heightSegments, this.openEnded, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { DodecahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new DodecahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { IcosahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new IcosahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { LatheBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new LatheBufferGeometry(this.points, this.segments, this.phiStart, this.phiLength);\n },\n },\n};\n","import { OctahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new OctahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { PolyhedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new PolyhedronBufferGeometry(this.vertices, this.indices, this.radius, this.detail);\n },\n },\n};\n","import { RingBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new RingBufferGeometry(this.innerRadius, this.outerRadius, this.thetaSegments, this.phiSegments, this.thetaStart, this.thetaLength);\n },\n },\n};\n","import { SphereBufferGeometry } from 'three';\r\nimport Geometry from './Geometry.js';\r\n\r\nexport default {\r\n extends: Geometry,\r\n props: {\r\n radius: { type: Number, default: 1 },\r\n widthSegments: { type: Number, default: 12 },\r\n heightSegments: { type: Number, default: 12 },\r\n },\r\n methods: {\r\n createGeometry() {\r\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\r\n },\r\n },\r\n};\r\n","import { TetrahedronBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 64 },\n tubularSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.p, this.q);\n },\n },\n};\n","import { Curve, TubeBufferGeometry } from 'three';\nimport Geometry from './Geometry.js';\n\nexport default {\n extends: Geometry,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radiusSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeBufferGeometry(this.path, this.tubularSegments, this.radius, this.radiusSegments, this.closed);\n },\n },\n};\n","import { Color } from 'three';\r\nimport { watch } from 'vue';\r\nimport { setFromProp } from '../tools.js';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n inject: ['scene'],\r\n props: {\r\n color: {\r\n type: String,\r\n default: '#ffffff',\r\n },\r\n intensity: {\r\n type: Number,\r\n default: 1,\r\n },\r\n castShadow: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n shadowMapSize: Object,\r\n position: Object,\r\n },\r\n mounted() {\r\n useBindProp(this, 'position', this.light.position);\r\n\r\n if (this.light.target) {\r\n useBindProp(this, 'target', this.light.target.position);\r\n }\r\n\r\n if (this.light.shadow) {\r\n this.light.castShadow = this.castShadow;\r\n setFromProp(this.light.shadow.mapSize, this.shadowMapSize);\r\n }\r\n\r\n ['color', 'intensity', 'castShadow'].forEach(p => {\r\n watch(() => this[p], () => {\r\n if (p === 'color') {\r\n this.light.color = new Color(this.color);\r\n } else {\r\n this.light[p] = this[p];\r\n }\r\n });\r\n });\r\n\r\n this.scene.add(this.light);\r\n if (this.light.target) this.scene.add(this.light.target);\r\n },\r\n unmounted() {\r\n this.scene.remove(this.light);\r\n },\r\n render() {\r\n return [];\r\n },\r\n __hmrId: 'Light',\r\n};\r\n","import { AmbientLight } from 'three';\r\nimport Light from './Light.js';\r\n\r\nexport default {\r\n extends: Light,\r\n created() {\r\n this.light = new AmbientLight(this.color, this.intensity);\r\n },\r\n __hmrId: 'AmbientLight',\r\n};\r\n","import { DirectionalLight } from 'three';\r\nimport Light from './Light.js';\r\n\r\nexport default {\r\n extends: Light,\r\n props: {\r\n target: Object,\r\n },\r\n created() {\r\n this.light = new DirectionalLight(this.color, this.intensity);\r\n },\r\n __hmrId: 'DirectionalLight',\r\n};\r\n","import { PointLight } from 'three';\r\nimport Light from './Light.js';\r\n\r\nexport default {\r\n extends: Light,\r\n props: {\r\n distance: {\r\n type: Number,\r\n default: 0,\r\n },\r\n decay: {\r\n type: Number,\r\n default: 1,\r\n },\r\n },\r\n created() {\r\n this.light = new PointLight(this.color, this.intensity, this.distance, this.decay);\r\n },\r\n __hmrId: 'PointLight',\r\n};\r\n","import { SpotLight } from 'three';\r\nimport { watch } from 'vue';\r\nimport Light from './Light.js';\r\n\r\nexport default {\r\n extends: Light,\r\n props: {\r\n angle: {\r\n type: Number,\r\n default: Math.PI / 3,\r\n },\r\n decay: {\r\n type: Number,\r\n default: 1,\r\n },\r\n distance: {\r\n type: Number,\r\n default: 0,\r\n },\r\n penumbra: {\r\n type: Number,\r\n default: 0,\r\n },\r\n target: Object,\r\n },\r\n created() {\r\n this.light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay);\r\n ['angle', 'decay', 'distance', 'penumbra'].forEach(p => {\r\n watch(() => this[p], () => {\r\n this.light[p] = this[p];\r\n });\r\n });\r\n },\r\n __hmrId: 'SpotLight',\r\n};\r\n","import { watch } from 'vue';\r\nimport { Color, FrontSide } from 'three';\r\n\r\nexport default {\r\n inject: ['three', 'mesh'],\r\n props: {\r\n id: String,\r\n color: { type: [String, Number], default: '#ffffff' },\r\n depthTest: { type: Boolean, default: true },\r\n depthWrite: { type: Boolean, default: true },\r\n flatShading: Boolean,\r\n fog: { type: Boolean, default: true },\r\n opacity: { type: Number, default: 1 },\r\n side: { type: Number, default: FrontSide },\r\n transparent: Boolean,\r\n vertexColors: Boolean,\r\n },\r\n provide() {\r\n return {\r\n material: this,\r\n };\r\n },\r\n beforeMount() {\r\n this.createMaterial();\r\n if (this.id) this.three.materials[this.id] = this.material;\r\n this.mesh.setMaterial(this.material);\r\n },\r\n mounted() {\r\n this._addWatchers();\r\n if (this.addWatchers) this.addWatchers();\r\n },\r\n unmounted() {\r\n this.material.dispose();\r\n if (this.id) delete this.three.materials[this.id];\r\n },\r\n methods: {\r\n setMap(texture) {\r\n this.material.map = texture;\r\n this.material.needsUpdate = true;\r\n },\r\n setEnvMap(texture) {\r\n this.material.envMap = texture;\r\n this.material.needsUpdate = true;\r\n },\r\n _addWatchers() {\r\n // don't work for flatShading\r\n ['color', 'depthTest', 'depthWrite', 'fog', 'opacity', 'side', 'transparent'].forEach(p => {\r\n watch(() => this[p], () => {\r\n if (p === 'color') {\r\n this.material.color.set(this.color);\r\n } else {\r\n this.material[p] = this[p];\r\n }\r\n });\r\n });\r\n },\r\n },\r\n render() {\r\n if (this.$slots.default) {\r\n return this.$slots.default();\r\n }\r\n return [];\r\n },\r\n __hmrId: 'Material',\r\n};\r\n","import { MeshBasicMaterial } from 'three';\r\nimport { propsValues } from '../tools.js';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n methods: {\r\n createMaterial() {\r\n this.material = new MeshBasicMaterial(propsValues(this.$props, ['id']));\r\n },\r\n },\r\n __hmrId: 'BasicMaterial',\r\n};\r\n","import { MeshLambertMaterial } from 'three';\r\nimport { propsValues } from '../tools.js';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n methods: {\r\n createMaterial() {\r\n this.material = new MeshLambertMaterial(propsValues(this.$props, ['id']));\r\n },\r\n },\r\n __hmrId: 'LambertMaterial',\r\n};\r\n","import { MeshPhongMaterial } from 'three';\r\nimport { propsValues } from '../tools.js';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n methods: {\r\n createMaterial() {\r\n this.material = new MeshPhongMaterial(propsValues(this.$props, ['id']));\r\n },\r\n },\r\n __hmrId: 'PhongMaterial',\r\n};\r\n","import { Color, MeshStandardMaterial } from 'three';\r\nimport { watch } from 'vue';\r\nimport { propsValues } from '../tools.js';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n props: {\r\n emissive: { type: [Number, String], default: 0 },\r\n emissiveIntensity: { type: Number, default: 1 },\r\n metalness: { type: Number, default: 0 },\r\n roughness: { type: Number, default: 1 },\r\n },\r\n methods: {\r\n createMaterial() {\r\n this.material = new MeshStandardMaterial(propsValues(this.$props, ['id']));\r\n },\r\n addWatchers() {\r\n ['emissive', 'emissiveIntensity', 'metalness', 'roughness'].forEach(p => {\r\n watch(() => this[p], (value) => {\r\n if (p === 'emissive') {\r\n this.material.emissive = new Color(value);\r\n } else {\r\n this.material[p] = value;\r\n }\r\n });\r\n });\r\n },\r\n },\r\n __hmrId: 'StandardMaterial',\r\n};\r\n","import { MeshPhysicalMaterial } from 'three';\r\nimport { propsValues } from '../tools.js';\r\nimport StandardMaterial from './StandardMaterial';\r\n\r\nexport default {\r\n extends: StandardMaterial,\r\n methods: {\r\n createMaterial() {\r\n this.material = new MeshPhysicalMaterial(propsValues(this.$props, ['id']));\r\n },\r\n },\r\n __hmrId: 'PhysicalMaterial',\r\n};\r\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three';\n\nfunction replaceAll(string, find, replace) {\n return string.split(find).join(replace);\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'));\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'));\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0x668597) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include <lights_fragment_begin>',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n};\n\nexport default SubsurfaceScatteringShader;\n","import { Color, ShaderMaterial as TShaderMaterial, UniformsUtils } from 'three';\r\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader.js';\r\nimport ShaderMaterial from './ShaderMaterial';\r\n\r\nexport default {\r\n extends: ShaderMaterial,\r\n props: {\r\n diffuse: { type: String, default: '#ffffff' },\r\n thicknessColor: { type: String, default: '#ffffff' },\r\n thicknessDistortion: { type: Number, default: 0.4 },\r\n thicknessAmbient: { type: Number, default: 0.01 },\r\n thicknessAttenuation: { type: Number, default: 0.7 },\r\n thicknessPower: { type: Number, default: 2 },\r\n thicknessScale: { type: Number, default: 4 },\r\n transparent: { type: Boolean, default: false },\r\n opacity: { type: Number, default: 1 },\r\n vertexColors: { type: Boolean, default: false },\r\n },\r\n methods: {\r\n createMaterial() {\r\n const params = SubsurfaceScatteringShader;\r\n const uniforms = UniformsUtils.clone(params.uniforms);\r\n Object.entries(this.$props).forEach(([key, value]) => {\r\n if (key === 'diffuse' || key === 'thicknessColor') {\r\n value = new Color(value);\r\n }\r\n if (key !== 'id' && key !== 'transparent' && key !== 'vertexColors') {\r\n uniforms[key].value = value;\r\n }\r\n });\r\n\r\n this.material = new TShaderMaterial({\r\n ...params,\r\n uniforms,\r\n lights: true,\r\n transparent: this.transparent,\r\n vertexColors: this.vertexColors,\r\n });\r\n },\r\n },\r\n __hmrId: 'SubSurfaceMaterial',\r\n};\r\n","export default {\r\n inject: ['three', 'mesh'],\r\n props: {\r\n id: String,\r\n uniforms: Object,\r\n vertexShader: String,\r\n fragmentShader: String,\r\n },\r\n beforeMount() {\r\n this.createMaterial();\r\n if (this.id) this.three.materials[this.id] = this.material;\r\n this.mesh.setMaterial(this.material);\r\n },\r\n mounted() {\r\n if (this.addWatchers) this.addWatchers();\r\n },\r\n unmounted() {\r\n this.material.dispose();\r\n if (this.id) delete this.three.materials[this.id];\r\n },\r\n render() {\r\n return [];\r\n },\r\n __hmrId: 'ShaderMaterial',\r\n};\r\n","import { MeshToonMaterial } from 'three';\r\nimport { propsValues } from '../tools.js';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n methods: {\r\n createMaterial() {\r\n this.material = new MeshToonMaterial(propsValues(this.$props, ['id']));\r\n },\r\n },\r\n __hmrId: 'ToonMaterial',\r\n};\r\n","import Texture from '../core/Texture';\r\n\r\nexport default {\r\n extends: Texture,\r\n inject: ['material'],\r\n created() {\r\n this.material.setMap(this.texture);\r\n },\r\n unmounted() {\r\n this.material.setMap(null);\r\n },\r\n methods: {\r\n refreshTexture() {\r\n this.createTexture();\r\n this.material.setMap(this.texture);\r\n },\r\n },\r\n __hmrId: 'Map',\r\n};\r\n","import CubeTexture from '../core/CubeTexture';\r\n\r\nexport default {\r\n extends: CubeTexture,\r\n inject: ['material'],\r\n created() {\r\n this.material.setEnvMap(this.texture);\r\n },\r\n unmounted() {\r\n this.material.setEnvMap(null);\r\n },\r\n methods: {\r\n refreshTexture() {\r\n this.createTexture();\r\n this.material.setEnvMap(this.texture);\r\n },\r\n },\r\n __hmrId: 'EnvMap',\r\n};\r\n","import { Mesh } from 'three';\nimport { watch } from 'vue';\nimport useBindProp from '../use/useBindProp.js';\n\nexport default {\n inject: ['three', 'scene', 'rendererComponent'],\n emits: ['ready'],\n props: {\n materialId: String,\n position: Object,\n rotation: Object,\n scale: Object,\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n provide() {\n return {\n mesh: this,\n };\n },\n mounted() {\n // console.log('Mesh mounted');\n if (this.geometry && !this.mesh) this.initMesh();\n },\n unmounted() {\n // console.log('Mesh unmounted');\n if (this.mesh) this.scene.remove(this.mesh);\n if (this.geometry) this.geometry.dispose();\n if (this.material && !this.materialId) this.material.dispose();\n },\n methods: {\n initMesh() {\n if (!this.material && this.materialId) {\n this.material = this.three.materials[this.materialId];\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.bindProps();\n this.scene.add(this.mesh);\n this.$emit('ready');\n },\n bindProps() {\n useBindProp(this, 'position', this.mesh.position);\n useBindProp(this, 'rotation', this.mesh.rotation);\n useBindProp(this, 'scale', this.mesh.scale);\n\n ['castShadow', 'receiveShadow'].forEach(p => {\n this.mesh[p] = this[p];\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\n });\n\n watch(() => this.materialId, () => {\n this.mesh.material = this.three.materials[this.materialId];\n });\n },\n setGeometry(geometry) {\n this.geometry = geometry;\n if (this.mesh) this.mesh.geometry = geometry;\n },\n setMaterial(material) {\n this.material = material;\n if (this.mesh) this.mesh.material = material;\n },\n refreshGeometry() {\n const oldGeo = this.geometry;\n this.createGeometry();\n this.mesh.geometry = this.geometry;\n oldGeo.dispose();\n },\n },\n render() {\n if (this.$slots.default) {\n return this.$slots.default();\n }\n return [];\n },\n __hmrId: 'Mesh',\n};\n","import { BoxBufferGeometry } from 'three';\r\nimport { watch } from 'vue';\r\nimport Mesh from './Mesh.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n size: Number,\r\n width: { type: Number, default: 1 },\r\n height: { type: Number, default: 1 },\r\n depth: { type: Number, default: 1 },\r\n widthSegments: { type: Number, default: 1 },\r\n heightSegments: { type: Number, default: 1 },\r\n depthSegments: { type: Number, default: 1 },\r\n },\r\n created() {\r\n this.createGeometry();\r\n\r\n ['size', 'width', 'height', 'depth', 'widthSegments', 'heightSegments', 'depthSegments'].forEach(prop => {\r\n watch(() => this[prop], () => {\r\n this.refreshGeometry();\r\n });\r\n });\r\n },\r\n methods: {\r\n createGeometry() {\r\n if (this.size) {\r\n this.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\r\n } else {\r\n this.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\r\n }\r\n },\r\n },\r\n __hmrId: 'Box',\r\n};\r\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';\r\nimport { watch } from 'vue';\r\nimport Mesh from './Mesh.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n width: { type: Number, default: 1 },\r\n height: { type: Number, default: 1 },\r\n widthSegments: { type: Number, default: 1 },\r\n heightSegments: { type: Number, default: 1 },\r\n },\r\n created() {\r\n this.createGeometry();\r\n\r\n const watchProps = ['width', 'height', 'widthSegments', 'heightSegments'];\r\n watchProps.forEach(prop => {\r\n watch(() => this[prop], () => {\r\n this.refreshGeometry();\r\n });\r\n });\r\n },\r\n methods: {\r\n createGeometry() {\r\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\r\n },\r\n },\r\n __hmrId: 'Plane',\r\n};\r\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';\r\nimport Mesh from './Mesh.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n radius: Number,\r\n widthSegments: { type: Number, default: 12 },\r\n heightSegments: { type: Number, default: 12 },\r\n },\r\n watch: {\r\n radius() { this.refreshGeometry(); },\r\n widthSegments() { this.refreshGeometry(); },\r\n heightSegments() { this.refreshGeometry(); },\r\n },\r\n created() {\r\n this.createGeometry();\r\n },\r\n methods: {\r\n createGeometry() {\r\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\r\n },\r\n },\r\n __hmrId: 'Sphere',\r\n};\r\n","import { TetrahedronBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'detail'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TetrahedronBufferGeometry(this.radius, this.detail);\n },\n },\n __hmrId: 'Tetrahedron',\n};\n","export default {\n text: String,\n fontSrc: String,\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String], default: false },\n};\n","import { FontLoader, TextBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\nimport TextProps from './TextProps.js';\n\nexport default {\n extends: Mesh,\n props: {\n ...TextProps,\n },\n created() {\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ];\n watchProps.forEach(p => {\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry();\n });\n });\n\n const loader = new FontLoader();\n loader.load(this.fontSrc, (font) => {\n this.font = font;\n this.createGeometry();\n this.initMesh();\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TextBufferGeometry(this.text, {\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n });\n\n if (this.align === 'center') {\n this.geometry.center();\n }\n },\n },\n};\n","import { TorusBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'arc'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.arc);\n },\n },\n __hmrId: 'Torus',\n};\n","import { TorusKnotBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n radius: { type: Number, default: 0.5 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 64 },\n tubularSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['radius', 'tube', 'radialSegments', 'tubularSegments', 'p', 'q'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TorusKnotBufferGeometry(this.radius, this.tube, this.radialSegments, this.tubularSegments, this.p, this.q);\n },\n },\n __hmrId: 'TorusKnot',\n};\n","import { Curve, TubeBufferGeometry } from 'three';\nimport { watch } from 'vue';\nimport Mesh from './Mesh.js';\n\nexport default {\n extends: Mesh,\n props: {\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n },\n created() {\n this.createGeometry();\n\n const watchProps = ['path', 'tubularSegments', 'radius', 'radialSegments', 'closed'];\n watchProps.forEach(prop => {\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n methods: {\n createGeometry() {\n this.geometry = new TubeBufferGeometry(this.path, this.tubularSegments, this.radius, this.radialSegments, this.closed);\n },\n },\n __hmrId: 'Tube',\n};\n","import {\r\n BackSide,\r\n CubeCamera,\r\n FrontSide,\r\n LinearMipmapLinearFilter,\r\n Mesh as TMesh,\r\n RGBFormat,\r\n WebGLCubeRenderTarget,\r\n} from 'three';\r\n// import { watch } from 'vue';\r\nimport Mesh from '../meshes/Mesh.js';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n cubeRTSize: { type: Number, default: 512 },\r\n cubeCameraNear: { type: Number, default: 0.1 },\r\n cubeCameraFar: { type: Number, default: 2000 },\r\n autoUpdate: Boolean,\r\n },\r\n mounted() {\r\n this.initGem();\r\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\r\n else this.rendererComponent.onMounted(this.updateCubeRT);\r\n },\r\n unmounted() {\r\n this.three.offBeforeRender(this.updateCubeRT);\r\n if (this.meshBack) this.scene.remove(this.meshBack);\r\n if (this.materialBack) this.materialBack.dispose();\r\n },\r\n methods: {\r\n initGem() {\r\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\r\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\r\n useBindProp(this, 'position', this.cubeCamera.position);\r\n this.scene.add(this.cubeCamera);\r\n\r\n this.material.side = FrontSide;\r\n this.material.envMap = cubeRT.texture;\r\n this.material.envMapIntensity = 10;\r\n this.material.metalness = 0;\r\n this.material.roughness = 0;\r\n this.material.opacity = 0.75;\r\n this.material.transparent = true;\r\n this.material.premultipliedAlpha = true;\r\n this.material.needsUpdate = true;\r\n\r\n this.materialBack = this.material.clone();\r\n this.materialBack.side = BackSide;\r\n this.materialBack.envMapIntensity = 5;\r\n this.materialBack.metalness = 1;\r\n this.materialBack.roughness = 0;\r\n this.materialBack.opacity = 0.5;\r\n\r\n this.meshBack = new TMesh(this.geometry, this.materialBack);\r\n\r\n useBindProp(this, 'position', this.meshBack.position);\r\n useBindProp(this, 'rotation', this.meshBack.rotation);\r\n useBindProp(this, 'scale', this.meshBack.scale);\r\n this.scene.add(this.meshBack);\r\n },\r\n updateCubeRT() {\r\n this.mesh.visible = false;\r\n this.meshBack.visible = false;\r\n this.cubeCamera.update(this.three.renderer, this.scene);\r\n this.mesh.visible = true;\r\n this.meshBack.visible = true;\r\n },\r\n },\r\n __hmrId: 'Gem',\r\n};\r\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry, TextureLoader } from 'three';\r\nimport { watch } from 'vue';\r\nimport Mesh from './Mesh.js';\r\n\r\nexport default {\r\n emits: ['loaded'],\r\n extends: Mesh,\r\n props: {\r\n src: String,\r\n width: Number,\r\n height: Number,\r\n keepSize: Boolean,\r\n },\r\n created() {\r\n this.createGeometry();\r\n this.createMaterial();\r\n this.initMesh();\r\n\r\n watch(() => this.src, this.refreshTexture);\r\n\r\n ['width', 'height'].forEach(p => {\r\n watch(() => this[p], this.resize);\r\n });\r\n\r\n if (this.keepSize) this.three.onAfterResize(this.resize);\r\n },\r\n methods: {\r\n createGeometry() {\r\n this.geometry = new PlaneBufferGeometry(1, 1, 1, 1);\r\n },\r\n createMaterial() {\r\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\r\n },\r\n loadTexture() {\r\n return new TextureLoader().load(this.src, this.onLoaded);\r\n },\r\n refreshTexture() {\r\n if (this.texture) this.texture.dispose();\r\n this.material.map = this.loadTexture();\r\n this.material.needsUpdate = true;\r\n },\r\n onLoaded(texture) {\r\n this.texture = texture;\r\n this.resize();\r\n this.$emit('loaded');\r\n },\r\n resize() {\r\n if (!this.texture) return;\r\n const screen = this.three.size;\r\n const iW = this.texture.image.width;\r\n const iH = this.texture.image.height;\r\n const iRatio = iW / iH;\r\n let w, h;\r\n if (this.width && this.height) {\r\n w = this.width * screen.wWidth / screen.width;\r\n h = this.height * screen.wHeight / screen.height;\r\n } else if (this.width) {\r\n w = this.width * screen.wWidth / screen.width;\r\n h = w / iRatio;\r\n } else if (this.height) {\r\n h = this.height * screen.wHeight / screen.height;\r\n w = h * iRatio;\r\n }\r\n this.mesh.scale.x = w;\r\n this.mesh.scale.y = h;\r\n },\r\n },\r\n __hmrId: 'Image',\r\n};\r\n","import { InstancedMesh } from 'three';\r\nimport { watch } from 'vue';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n inject: ['three', 'scene'],\r\n props: {\r\n materialId: String,\r\n count: Number,\r\n position: Object,\r\n castShadow: Boolean,\r\n receiveShadow: Boolean,\r\n },\r\n provide() {\r\n return {\r\n mesh: this,\r\n };\r\n },\r\n beforeMount() {\r\n if (!this.$slots.default) {\r\n console.error('Missing Geometry');\r\n }\r\n },\r\n mounted() {\r\n this.initMesh();\r\n },\r\n unmounted() {\r\n this.scene.remove(this.mesh);\r\n },\r\n methods: {\r\n initMesh() {\r\n if (!this.material && this.materialId) {\r\n this.material = this.three.materials[this.materialId];\r\n }\r\n\r\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count);\r\n\r\n useBindProp(this, 'position', this.mesh.position);\r\n useBindProp(this, 'rotation', this.mesh.rotation);\r\n useBindProp(this, 'scale', this.mesh.scale);\r\n\r\n ['castShadow', 'receiveShadow'].forEach(p => {\r\n this.mesh[p] = this[p];\r\n watch(() => this[p], () => { this.mesh[p] = this[p]; });\r\n });\r\n\r\n // watch(() => this.materialId, () => {\r\n // this.mesh.material = this.three.materials[this.materialId];\r\n // });\r\n\r\n this.scene.add(this.mesh);\r\n },\r\n setGeometry(geometry) {\r\n this.geometry = geometry;\r\n if (this.mesh) this.mesh.geometry = geometry;\r\n },\r\n setMaterial(material) {\r\n this.material = material;\r\n if (this.mesh) this.mesh.material = material;\r\n },\r\n },\r\n render() {\r\n return this.$slots.default();\r\n },\r\n __hmrId: 'InstancedMesh',\r\n};\r\n","import {\r\n CubeCamera,\r\n LinearMipmapLinearFilter,\r\n RGBFormat,\r\n WebGLCubeRenderTarget,\r\n} from 'three';\r\n// import { watch } from 'vue';\r\nimport Mesh from './Mesh.js';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n cubeRTSize: { type: Number, default: 512 },\r\n cubeCameraNear: { type: Number, default: 0.1 },\r\n cubeCameraFar: { type: Number, default: 2000 },\r\n autoUpdate: Boolean,\r\n },\r\n mounted() {\r\n this.initMirrorMesh();\r\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\r\n else this.rendererComponent.onMounted(this.updateCubeRT);\r\n },\r\n unmounted() {\r\n this.three.offBeforeRender(this.updateCubeRT);\r\n },\r\n methods: {\r\n initMirrorMesh() {\r\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\r\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\r\n useBindProp(this, 'position', this.cubeCamera.position);\r\n this.scene.add(this.cubeCamera);\r\n\r\n this.material.envMap = cubeRT.texture;\r\n this.material.needsUpdate = true;\r\n },\r\n updateCubeRT() {\r\n this.mesh.visible = false;\r\n this.cubeCamera.update(this.three.renderer, this.scene);\r\n this.mesh.visible = true;\r\n },\r\n },\r\n __hmrId: 'MirrorMesh',\r\n};\r\n","import {\r\n CubeCamera,\r\n CubeRefractionMapping,\r\n LinearMipmapLinearFilter,\r\n RGBFormat,\r\n WebGLCubeRenderTarget,\r\n} from 'three';\r\n// import { watch } from 'vue';\r\nimport Mesh from './Mesh.js';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n cubeRTSize: { type: Number, default: 512 },\r\n cubeCameraNear: { type: Number, default: 0.1 },\r\n cubeCameraFar: { type: Number, default: 2000 },\r\n autoUpdate: Boolean,\r\n },\r\n mounted() {\r\n this.initMirrorMesh();\r\n if (this.autoUpdate) this.three.onBeforeRender(this.updateCubeRT);\r\n else this.rendererComponent.onMounted(this.updateCubeRT);\r\n },\r\n unmounted() {\r\n this.three.offBeforeRender(this.updateCubeRT);\r\n },\r\n methods: {\r\n initMirrorMesh() {\r\n const cubeRT = new WebGLCubeRenderTarget(this.cubeRTSize, { mapping: CubeRefractionMapping, format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter });\r\n this.cubeCamera = new CubeCamera(this.cubeCameraNear, this.cubeCameraFar, cubeRT);\r\n useBindProp(this, 'position', this.cubeCamera.position);\r\n this.scene.add(this.cubeCamera);\r\n\r\n this.material.envMap = cubeRT.texture;\r\n this.material.refractionRatio = 0.95;\r\n this.material.needsUpdate = true;\r\n },\r\n updateCubeRT() {\r\n this.mesh.visible = false;\r\n this.cubeCamera.update(this.three.renderer, this.scene);\r\n this.mesh.visible = true;\r\n },\r\n },\r\n __hmrId: 'RefractionMesh',\r\n};\r\n","import { Sprite, SpriteMaterial, TextureLoader } from 'three';\r\nimport { watch } from 'vue';\r\nimport useBindProp from '../use/useBindProp.js';\r\n\r\nexport default {\r\n emits: ['ready', 'loaded'],\r\n inject: ['three', 'scene'],\r\n props: {\r\n src: String,\r\n position: Object,\r\n scale: Object,\r\n },\r\n mounted() {\r\n this.texture = new TextureLoader().load(this.src, this.onLoaded);\r\n this.material = new SpriteMaterial({ map: this.texture });\r\n this.sprite = new Sprite(this.material);\r\n this.geometry = this.sprite.geometry;\r\n\r\n useBindProp(this, 'position', this.sprite.position);\r\n useBindProp(this, 'scale', this.sprite.scale);\r\n\r\n // watch(() => this.src, () => {\r\n // this.texture = new TextureLoader().load(this.src, this.onLoaded);\r\n // this.material.map = this.texture;\r\n // });\r\n\r\n this.scene.add(this.sprite);\r\n this.$emit('ready');\r\n },\r\n unmounted() {\r\n this.texture.dispose();\r\n this.material.dispose();\r\n this.scene.remove(this.sprite);\r\n },\r\n methods: {\r\n onLoaded() {\r\n this.updateUV();\r\n this.$emit('loaded');\r\n },\r\n updateUV() {\r\n this.iWidth = this.texture.image.width;\r\n this.iHeight = this.texture.image.height;\r\n this.iRatio = this.iWidth / this.iHeight;\r\n\r\n let x = 0.5, y = 0.5;\r\n if (this.iRatio > 1) {\r\n y = 0.5 / this.iRatio;\r\n } else {\r\n x = 0.5 / this.iRatio;\r\n }\r\n\r\n const positions = this.geometry.attributes.position.array;\r\n positions[0] = -x; positions[1] = -y;\r\n positions[5] = x; positions[6] = -y;\r\n positions[10] = x; positions[11] = y;\r\n positions[15] = -x; positions[16] = y;\r\n this.geometry.attributes.position.needsUpdate = true;\r\n },\r\n },\r\n render() {\r\n return [];\r\n },\r\n __hmrId: 'Sprite',\r\n};\r\n","import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\r\n\r\nexport default {\r\n setup() {\r\n return {\r\n passes: [],\r\n };\r\n },\r\n inject: ['three'],\r\n provide() {\r\n return {\r\n passes: this.passes,\r\n };\r\n },\r\n mounted() {\r\n this.three.onAfterInit(() => {\r\n this.composer = new EffectComposer(this.three.renderer);\r\n this.three.renderer.autoClear = false;\r\n this.passes.forEach(pass => {\r\n this.composer.addPass(pass);\r\n });\r\n this.three.composer = this.composer;\r\n });\r\n },\r\n render() {\r\n return this.$slots.default();\r\n },\r\n __hmrId: 'EffectComposer',\r\n};\r\n","export default {\r\n inject: ['three', 'passes'],\r\n beforeMount() {\r\n if (!this.passes) {\r\n console.error('Missing parent EffectComposer');\r\n }\r\n },\r\n unmounted() {\r\n if (this.pass.dispose) this.pass.dispose();\r\n },\r\n render() {\r\n return [];\r\n },\r\n __hmrId: 'EffectPass',\r\n};\r\n","import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\r\nimport EffectPass from './EffectPass.js';\r\n\r\nexport default {\r\n extends: EffectPass,\r\n mounted() {\r\n if (!this.three.scene) {\r\n console.error('Missing Scene');\r\n }\r\n if (!this.three.camera) {\r\n console.error('Missing Camera');\r\n }\r\n const pass = new RenderPass(this.three.scene, this.three.camera);\r\n this.passes.push(pass);\r\n this.pass = pass;\r\n },\r\n __hmrId: 'RenderPass',\r\n};\r\n","import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';\r\nimport EffectPass from './EffectPass.js';\r\n\r\nexport default {\r\n extends: EffectPass,\r\n props: {\r\n focus: {\r\n type: Number,\r\n default: 1,\r\n },\r\n aperture: {\r\n type: Number,\r\n default: 0.025,\r\n },\r\n maxblur: {\r\n type: Number,\r\n default: 0.01,\r\n },\r\n },\r\n watch: {\r\n focus() { this.pass.uniforms.focus.value = this.focus; },\r\n aperture() { this.pass.uniforms.aperture.value = this.aperture; },\r\n maxblur() { this.pass.uniforms.maxblur.value = this.maxblur; },\r\n },\r\n mounted() {\r\n if (!this.three.scene) {\r\n console.error('Missing Scene');\r\n }\r\n if (!this.three.camera) {\r\n console.error('Missing Camera');\r\n }\r\n const params = {\r\n focus: this.focus,\r\n aperture: this.aperture,\r\n maxblur: this.maxblur,\r\n width: this.three.size.width,\r\n height: this.three.size.height,\r\n };\r\n const pass = new BokehPass(this.three.scene, this.three.camera, params);\r\n this.passes.push(pass);\r\n this.pass = pass;\r\n },\r\n __hmrId: 'BokehPass',\r\n};\r\n","import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';\r\nimport EffectPass from './EffectPass.js';\r\n\r\nexport default {\r\n extends: EffectPass,\r\n props: {\r\n noiseIntensity: {\r\n type: Number,\r\n default: 0.5,\r\n },\r\n scanlinesIntensity: {\r\n type: Number,\r\n default: 0.05,\r\n },\r\n scanlinesCount: {\r\n type: Number,\r\n default: 4096,\r\n },\r\n grayscale: {\r\n type: Number,\r\n default: 0,\r\n },\r\n },\r\n watch: {\r\n noiseIntensity() { this.pass.uniforms.nIntensity.value = this.noiseIntensity; },\r\n scanlinesIntensity() { this.pass.uniforms.sIntensity.value = this.scanlinesIntensity; },\r\n scanlinesCount() { this.pass.uniforms.sCount.value = this.scanlinesCount; },\r\n grayscale() { this.pass.uniforms.grayscale.value = this.grayscale; },\r\n },\r\n mounted() {\r\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale);\r\n this.passes.push(pass);\r\n this.pass = pass;\r\n },\r\n __hmrId: 'FilmPass',\r\n};\r\n","import { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js';\r\nimport { watch } from 'vue';\r\nimport EffectPass from './EffectPass.js';\r\n\r\nexport default {\r\n extends: EffectPass,\r\n props: {\r\n shape: { type: Number, default: 1 },\r\n radius: { type: Number, default: 4 },\r\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\r\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\r\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\r\n scatter: { type: Number, default: 0 },\r\n },\r\n mounted() {\r\n const pass = new HalftonePass(this.three.size.width, this.three.size.height, {});\r\n\r\n ['shape', 'radius', 'rotateR', 'rotateG', 'rotateB', 'scatter'].forEach(p => {\r\n pass.uniforms[p].value = this[p];\r\n watch(() => this[p], () => {\r\n pass.uniforms[p].value = this[p];\r\n });\r\n });\r\n\r\n this.passes.push(pass);\r\n this.pass = pass;\r\n },\r\n __hmrId: 'HalftonePass',\r\n};\r\n","import { Vector2 } from 'three';\r\nimport { SAOPass } from 'three/examples/jsm/postprocessing/SAOPass.js';\r\nimport { watch } from 'vue';\r\nimport EffectPass from './EffectPass.js';\r\n\r\nexport default {\r\n extends: EffectPass,\r\n props: {\r\n depthTexture: { type: Boolean, default: false },\r\n useNormals: { type: Boolean, default: false },\r\n resolution: Object,\r\n },\r\n mounted() {\r\n if (!this.three.scene) {\r\n console.error('Missing Scene');\r\n }\r\n if (!this.three.camera) {\r\n console.error('Missing Camera');\r\n }\r\n\r\n const resolution = this.resolution ? new Vector2(this.resolution.x, this.resolution.y) : new Vector2(this.three.size.width, this.three.size.height);\r\n const pass = new SAOPass(this.three.scene, this.three.camera, this.depthTexture, this.useNormals, resolution);\r\n this.passes.push(pass);\r\n this.pass = pass;\r\n },\r\n __hmrId: 'SAOPass',\r\n};\r\n","import { Vector2 } from 'three';\r\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\r\nimport EffectPass from './EffectPass.js';\r\n\r\nexport default {\r\n extends: EffectPass,\r\n props: {\r\n strength: { type: Number, default: 1.5 },\r\n radius: { type: Number, default: 0 },\r\n threshold: { type: Number, default: 0 },\r\n },\r\n watch: {\r\n strength() { this.pass.strength = this.strength; },\r\n radius() { this.pass.radius = this.radius; },\r\n threshold() { this.pass.threshold = this.threshold; },\r\n },\r\n mounted() {\r\n const size = new Vector2(this.three.size.width, this.three.size.height);\r\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold);\r\n this.passes.push(pass);\r\n this.pass = pass;\r\n },\r\n __hmrId: 'UnrealBloomPass',\r\n};\r\n","export default `\n//\n// Description : Array and textureless GLSL 2D simplex noise function.\n// Author : Ian McEwan, Ashima Arts.\n// Maintainer : ijm\n// Lastmod : 20110822 (ijm)\n// License : Copyright (C) 2011 Ashima Arts. All rights reserved.\n// Distributed under the MIT License. See LICENSE file.\n// https://github.com/ashima/webgl-noise\n//\n\nvec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec2 mod289(vec2 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec3 permute(vec3 x) {\n return mod289(((x*34.0)+1.0)*x);\n}\n\nfloat snoise(vec2 v)\n{\n const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0\n 0.366025403784439, // 0.5*(sqrt(3.0)-1.0)\n -0.577350269189626, // -1.0 + 2.0 * C.x\n 0.024390243902439); // 1.0 / 41.0\n // First corner\n vec2 i = floor(v + dot(v, C.yy) );\n vec2 x0 = v - i + dot(i, C.xx);\n\n // Other corners\n vec2 i1;\n i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n vec4 x12 = x0.xyxy + C.xxzz;\n x12.xy -= i1;\n\n // Permutations\n i = mod289(i); // Avoid truncation effects in permutation\n vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))\n + i.x + vec3(0.0, i1.x, 1.0 ));\n\n vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);\n m = m*m ;\n m = m*m ;\n\n // Gradients: 41 points uniformly over a line, mapped onto a diamond.\n // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)\n\n vec3 x = 2.0 * fract(p * C.www) - 1.0;\n vec3 h = abs(x) - 0.5;\n vec3 ox = floor(x + 0.5);\n vec3 a0 = x - ox;\n\n // Normalise gradients implicitly by scaling m\n // Approximation of: m *= inversesqrt( a0*a0 + h*h );\n m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );\n\n // Compute final noise value at P\n vec3 g;\n g.x = a0.x * x0.x + h.x * x0.y;\n g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n return 130.0 * dot(m, g);\n}\n`;\n","import { DoubleSide, MeshBasicMaterial, PlaneBufferGeometry } from 'three';\r\nimport { watch } from 'vue';\r\nimport Image from '../../meshes/Image.js';\r\nimport snoise2 from '../../glsl/snoise2.glsl.js';\r\n\r\nexport default {\r\n extends: Image,\r\n props: {\r\n widthSegments: { type: Number, default: 20 },\r\n heightSegments: { type: Number, default: 20 },\r\n timeCoef: { type: Number, default: 0.001 },\r\n noiseCoef: { type: Number, default: 1 },\r\n zCoef: { type: Number, default: 5 },\r\n dispCoef: { type: Number, default: 0.05 },\r\n },\r\n setup(props) {\r\n // uniforms\r\n const uTime = { value: 0 };\r\n const uNoiseCoef = { value: props.noiseCoef };\r\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\r\n const uZCoef = { value: props.zCoef };\r\n watch(() => props.zCoef, (value) => { uZCoef.value = value; });\r\n const uDispCoef = { value: props.dispCoef };\r\n watch(() => props.dispCoef, (value) => { uDispCoef.value = value; });\r\n\r\n return {\r\n uTime, uNoiseCoef, uZCoef, uDispCoef,\r\n };\r\n },\r\n mounted() {\r\n this.startTime = Date.now();\r\n this.three.onBeforeRender(this.updateTime);\r\n },\r\n unmounted() {\r\n this.three.offBeforeRender(this.updateTime);\r\n },\r\n methods: {\r\n createGeometry() {\r\n this.geometry = new PlaneBufferGeometry(1, 1, this.widthSegments, this.heightSegments);\r\n },\r\n createMaterial() {\r\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() });\r\n this.material.onBeforeCompile = (shader) => {\r\n shader.uniforms.uTime = this.uTime;\r\n shader.uniforms.uNoiseCoef = this.uNoiseCoef;\r\n shader.uniforms.uZCoef = this.uZCoef;\r\n shader.uniforms.uDispCoef = this.uDispCoef;\r\n shader.vertexShader = `\r\n uniform float uTime;\r\n uniform float uNoiseCoef;\r\n uniform float uZCoef;\r\n varying float vNoise;\r\n ${snoise2}\r\n ` + shader.vertexShader;\r\n\r\n shader.vertexShader = shader.vertexShader.replace(\r\n '#include <begin_vertex>',\r\n ` \r\n vec3 p = vec3(position * uNoiseCoef);\r\n p.x += uTime;\r\n vNoise = snoise(p.xy);\r\n vec3 transformed = vec3(position);\r\n transformed.z += vNoise * uZCoef;\r\n `\r\n );\r\n\r\n shader.fragmentShader = `\r\n uniform float uDispCoef;\r\n varying float vNoise;\r\n ` + shader.fragmentShader;\r\n\r\n shader.fragmentShader = shader.fragmentShader.replace(\r\n '#include <map_fragment>',\r\n `\r\n vec4 texelColor = texture2D(map, vUv);\r\n vec4 dispTexel = texture2D(map, vUv + vec2(vNoise * uDispCoef, 0));\r\n texelColor.r = dispTexel.r;\r\n diffuseColor = texelColor;\r\n `\r\n );\r\n this.materialShader = shader;\r\n };\r\n },\r\n updateTime() {\r\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\r\n },\r\n },\r\n __hmrId: 'NoisyImage',\r\n};\r\n","import { watch } from 'vue';\r\nimport Plane from '../../meshes/Plane.js';\r\nimport snoise3 from '../../glsl/snoise3.glsl.js';\r\n\r\nexport default {\r\n extends: Plane,\r\n props: {\r\n timeCoef: { type: Number, default: 0.001 },\r\n noiseCoef: { type: Number, default: 1 },\r\n zCoef: { type: Number, default: 5 },\r\n },\r\n setup(props) {\r\n // uniforms\r\n const uTime = { value: 0 };\r\n const uNoiseCoef = { value: props.noiseCoef };\r\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\r\n const uZCoef = { value: props.zCoef };\r\n watch(() => props.zCoef, (value) => { uZCoef.value = value; });\r\n\r\n return {\r\n uTime, uNoiseCoef, uZCoef,\r\n };\r\n },\r\n mounted() {\r\n this.updateMaterial();\r\n this.startTime = Date.now();\r\n this.three.onBeforeRender(this.updateTime);\r\n },\r\n unmounted() {\r\n this.three.offBeforeRender(this.updateTime);\r\n },\r\n methods: {\r\n updateMaterial() {\r\n this.material.onBeforeCompile = (shader) => {\r\n shader.uniforms.uTime = this.uTime;\r\n shader.uniforms.uNoiseCoef = this.uNoiseCoef;\r\n shader.uniforms.uZCoef = this.uZCoef;\r\n shader.vertexShader = `\r\n uniform float uTime;\r\n uniform float uNoiseCoef;\r\n uniform float uZCoef;\r\n varying float vNoise;\r\n ${snoise3}\r\n ` + shader.vertexShader;\r\n\r\n shader.vertexShader = shader.vertexShader.replace(\r\n '#include <begin_vertex>',\r\n ` \r\n vec3 p = vec3(position * uNoiseCoef);\r\n vNoise = snoise(vec3(p.x, p.y, uTime));\r\n vec3 transformed = vec3(position);\r\n transformed.z += vNoise * uZCoef;\r\n `\r\n );\r\n this.materialShader = shader;\r\n };\r\n this.material.needsupdate = true;\r\n },\r\n updateTime() {\r\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\r\n },\r\n },\r\n __hmrId: 'NoisyPlane',\r\n};\r\n","import { watch } from 'vue';\r\nimport Sphere from '../../meshes/Sphere.js';\r\nimport snoise4 from '../../glsl/snoise4.glsl.js';\r\n\r\nexport default {\r\n extends: Sphere,\r\n props: {\r\n radius: { type: Number, default: 20 },\r\n widthSegments: { type: Number, default: 128 },\r\n heightSegments: { type: Number, default: 128 },\r\n timeCoef: { type: Number, default: 0.001 },\r\n noiseCoef: { type: Number, default: 0.05 },\r\n dispCoef: { type: Number, default: 5 },\r\n },\r\n setup(props) {\r\n // uniforms\r\n const uTime = { value: 0 };\r\n const uNoiseCoef = { value: props.noiseCoef };\r\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\r\n const uDispCoef = { value: props.dispCoef };\r\n watch(() => props.dispCoef, (value) => { uDispCoef.value = value; });\r\n\r\n return {\r\n uTime, uNoiseCoef, uDispCoef,\r\n };\r\n },\r\n mounted() {\r\n this.updateMaterial();\r\n\r\n this.startTime = Date.now();\r\n this.three.onBeforeRender(this.updateTime);\r\n },\r\n unmounted() {\r\n this.three.offBeforeRender(this.updateTime);\r\n },\r\n methods: {\r\n updateMaterial() {\r\n this.material.onBeforeCompile = (shader) => {\r\n shader.uniforms.uTime = this.uTime;\r\n shader.uniforms.uNoiseCoef = this.uNoiseCoef;\r\n shader.uniforms.uDispCoef = this.uDispCoef;\r\n shader.vertexShader = `\r\n uniform float uTime;\r\n uniform float uNoiseCoef;\r\n uniform float uDispCoef;\r\n varying float vNoise;\r\n ${snoise4}\r\n ` + shader.vertexShader;\r\n\r\n shader.vertexShader = shader.vertexShader.replace(\r\n '#include <begin_vertex>',\r\n `\r\n vec4 p = vec4(vec3(position * uNoiseCoef), uTime);\r\n vNoise = snoise(p);\r\n vec3 transformed = vec3(position);\r\n transformed += normalize(position) * vNoise * uDispCoef;\r\n `\r\n );\r\n this.materialShader = shader;\r\n };\r\n this.material.needsupdate = true;\r\n },\r\n updateTime() {\r\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\r\n },\r\n },\r\n __hmrId: 'NoisySphere',\r\n};\r\n","import { watch } from 'vue';\nimport Text from '../../meshes/Text.js';\nimport snoise2 from '../../glsl/snoise2.glsl.js';\n\nexport default {\n extends: Text,\n props: {\n timeCoef: { type: Number, default: 0.001 },\n noiseCoef: { type: Number, default: 0.015 },\n zCoef: { type: Number, default: 10 },\n },\n setup(props) {\n // uniforms\n const uTime = { value: 0 };\n const uNoiseCoef = { value: props.noiseCoef };\n watch(() => props.noiseCoef, (value) => { uNoiseCoef.value = value; });\n const uZCoef = { value: props.zCoef };\n watch(() => props.zCoef, (value) => { uZCoef.value = value; });\n\n return {\n uTime, uNoiseCoef, uZCoef,\n };\n },\n mounted() {\n this.updateMaterial();\n\n this.startTime = Date.now();\n this.three.onBeforeRender(this.updateTime);\n },\n unmounted() {\n this.three.offBeforeRender(this.updateTime);\n },\n methods: {\n updateMaterial() {\n this.material.onBeforeCompile = (shader) => {\n shader.uniforms.uTime = this.uTime;\n shader.uniforms.uNoiseCoef = this.uNoiseCoef;\n shader.uniforms.uZCoef = this.uZCoef;\n shader.vertexShader = `\n uniform float uTime;\n uniform float uNoiseCoef;\n uniform float uZCoef;\n ${snoise2}\n ` + shader.vertexShader;\n\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>',\n ` \n vec3 p = vec3(position * uNoiseCoef);\n p.x += uTime;\n float noise = snoise(p.xy);\n vec3 transformed = vec3(position);\n transformed.z += noise * uZCoef;\n `\n );\n this.materialShader = shader;\n };\n this.material.needsupdate = true;\n },\n updateTime() {\n this.uTime.value = (Date.now() - this.startTime) * this.timeCoef;\n },\n },\n __hmrId: 'NoisyText',\n};\n","\r\nimport {\r\n BufferGeometry,\r\n DoubleSide,\r\n Face3,\r\n Geometry,\r\n InstancedBufferAttribute,\r\n InstancedMesh,\r\n MathUtils,\r\n MeshBasicMaterial,\r\n Object3D,\r\n Vector2,\r\n Vector3,\r\n} from 'three';\r\n\r\nexport default class AnimatedPlane {\r\n constructor(params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n this[key] = value;\r\n });\r\n\r\n this.o3d = new Object3D();\r\n this.uProgress = { value: 0 };\r\n this.uvScale = new Vector2();\r\n\r\n this.initMaterial();\r\n this.initPlane();\r\n }\r\n\r\n initMaterial() {\r\n this.material = new MeshBasicMaterial({\r\n side: DoubleSide,\r\n transparent: true,\r\n map: this.texture,\r\n onBeforeCompile: shader => {\r\n shader.uniforms.progress = this.uProgress;\r\n shader.uniforms.uvScale = { value: this.uvScale };\r\n shader.vertexShader = `\r\n uniform float progress;\r\n uniform vec2 uvScale;\r\n\r\n attribute vec3 offset;\r\n attribute vec3 rotation;\r\n attribute vec2 uvOffset;\r\n\r\n mat3 rotationMatrixXYZ(vec3 r)\r\n {\r\n float cx = cos(r.x);\r\n float sx = sin(r.x);\r\n float cy = cos(r.y);\r\n float sy = sin(r.y);\r\n float cz = cos(r.z);\r\n float sz = sin(r.z);\r\n\r\n return mat3(\r\n cy * cz, cx * sz + sx * sy * cz, sx * sz - cx * sy * cz,\r\n -cy * sz, cx * cz - sx * sy * sz, sx * cz + cx * sy * sz,\r\n sy, -sx * cy, cx * cy\r\n );\r\n }\r\n ` + shader.vertexShader;\r\n\r\n shader.vertexShader = shader.vertexShader.replace('#include <uv_vertex>', `\r\n #include <uv_vertex>\r\n vUv = vUv * uvScale + uvOffset;\r\n `);\r\n\r\n shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `\r\n mat3 rotMat = rotationMatrixXYZ(progress * rotation);\r\n transformed = rotMat * transformed;\r\n\r\n vec4 mvPosition = vec4(transformed, 1.0);\r\n #ifdef USE_INSTANCING\r\n mvPosition = instanceMatrix * mvPosition;\r\n #endif\r\n\r\n mvPosition.xyz += progress * offset;\r\n\r\n mvPosition = modelViewMatrix * mvPosition;\r\n gl_Position = projectionMatrix * mvPosition;\r\n `);\r\n },\r\n });\r\n }\r\n\r\n initPlane() {\r\n const { width, wWidth, wHeight } = this.screen;\r\n this.wSize = this.size * wWidth / width;\r\n this.nx = Math.ceil(wWidth / this.wSize) + 1;\r\n this.ny = Math.ceil(wHeight / this.wSize) + 1;\r\n this.icount = this.nx * this.ny;\r\n\r\n this.initGeometry();\r\n this.initUV();\r\n this.initAnimAttributes();\r\n\r\n if (this.imesh) {\r\n this.o3d.remove(this.imesh);\r\n }\r\n this.imesh = new InstancedMesh(this.bGeometry, this.material, this.icount);\r\n this.o3d.add(this.imesh);\r\n\r\n const dummy = new Object3D();\r\n let index = 0;\r\n let x = -(wWidth - (wWidth - this.nx * this.wSize)) / 2 + this.dx;\r\n for (let i = 0; i < this.nx; i++) {\r\n let y = -(wHeight - (wHeight - this.ny * this.wSize)) / 2 + this.dy;\r\n for (let j = 0; j < this.ny; j++) {\r\n dummy.position.set(x, y, 0);\r\n dummy.updateMatrix();\r\n this.imesh.setMatrixAt(index++, dummy.matrix);\r\n y += this.wSize;\r\n }\r\n x += this.wSize;\r\n }\r\n }\r\n\r\n initGeometry() {\r\n // square\r\n const geometry = new Geometry();\r\n geometry.vertices.push(new Vector3(0, 0, 0));\r\n geometry.vertices.push(new Vector3(this.wSize, 0, 0));\r\n geometry.vertices.push(new Vector3(0, this.wSize, 0));\r\n geometry.vertices.push(new Vector3(this.wSize, this.wSize, 0));\r\n geometry.faces.push(new Face3(0, 2, 1));\r\n geometry.faces.push(new Face3(2, 3, 1));\r\n\r\n geometry.faceVertexUvs[0].push([\r\n new Vector2(0, 0),\r\n new Vector2(0, 1),\r\n new Vector2(1, 0),\r\n ]);\r\n geometry.faceVertexUvs[0].push([\r\n new Vector2(0, 1),\r\n new Vector2(1, 1),\r\n new Vector2(1, 0),\r\n ]);\r\n\r\n // geometry.computeFaceNormals();\r\n // geometry.computeVertexNormals();\r\n\r\n // center\r\n this.dx = this.wSize / 2;\r\n this.dy = this.wSize / 2;\r\n geometry.translate(-this.dx, -this.dy, 0);\r\n\r\n this.bGeometry = new BufferGeometry().fromGeometry(geometry);\r\n }\r\n\r\n initAnimAttributes() {\r\n const { randFloat: rnd, randFloatSpread: rndFS } = MathUtils;\r\n const v3 = new Vector3();\r\n\r\n const offsets = new Float32Array(this.icount * 3);\r\n for (let i = 0; i < offsets.length; i += 3) {\r\n if (this.anim === 1) v3.set(rndFS(10), rnd(50, 100), rnd(20, 50)).toArray(offsets, i);\r\n else v3.set(rndFS(20), rndFS(20), rnd(20, 200)).toArray(offsets, i);\r\n }\r\n this.bGeometry.setAttribute('offset', new InstancedBufferAttribute(offsets, 3));\r\n\r\n const rotations = new Float32Array(this.icount * 3);\r\n const angle = Math.PI * 4;\r\n for (let i = 0; i < rotations.length; i += 3) {\r\n rotations[i] = rndFS(angle);\r\n rotations[i + 1] = rndFS(angle);\r\n rotations[i + 2] = rndFS(angle);\r\n }\r\n this.bGeometry.setAttribute('rotation', new InstancedBufferAttribute(rotations, 3));\r\n }\r\n\r\n initUV() {\r\n const ratio = this.nx / this.ny;\r\n const tRatio = this.texture.image.width / this.texture.image.height;\r\n if (ratio > tRatio) this.uvScale.set(1 / this.nx, (tRatio / ratio) / this.ny);\r\n else this.uvScale.set((ratio / tRatio) / this.nx, 1 / this.ny);\r\n const nW = this.uvScale.x * this.nx;\r\n const nH = this.uvScale.y * this.ny;\r\n\r\n const v2 = new Vector2();\r\n const uvOffsets = new Float32Array(this.icount * 2);\r\n for (let i = 0; i < this.nx; i++) {\r\n for (let j = 0; j < this.ny; j++) {\r\n v2.set(\r\n this.uvScale.x * i + (1 - nW) / 2,\r\n this.uvScale.y * j + (1 - nH) / 2\r\n ).toArray(uvOffsets, (i * this.ny + j) * 2);\r\n }\r\n }\r\n this.bGeometry.setAttribute('uvOffset', new InstancedBufferAttribute(uvOffsets, 2));\r\n }\r\n\r\n setTexture(texture) {\r\n this.texture = texture;\r\n this.material.map = texture;\r\n this.initUV();\r\n }\r\n\r\n resize() {\r\n this.initPlane();\r\n }\r\n}\r\n","<template>\r\n <Renderer ref=\"renderer\">\r\n <Camera ref=\"camera\" :position=\"{ z: 150 }\"></Camera>\r\n <Scene ref=\"scene\">\r\n </Scene>\r\n </Renderer>\r\n</template>\r\n\r\n<script>\r\nimport { Object3D } from 'three';\r\nimport { gsap, Power4 } from 'gsap';\r\nimport { lerp, limit } from '../../tools.js';\r\nimport AnimatedPlane from './AnimatedPlane.js';\r\nimport useTextures from '../../use/useTextures';\r\n\r\nexport default {\r\n props: {\r\n images: Array,\r\n events: { type: Object, default: () => { return { wheel: true, click: true, keyup: true }; } },\r\n },\r\n setup() {\r\n const { textures, loadTextures } = useTextures();\r\n return {\r\n textures,\r\n loadTextures,\r\n progress: 0,\r\n targetProgress: 0,\r\n };\r\n },\r\n mounted() {\r\n this.three = this.$refs.renderer.three;\r\n\r\n if (this.images.length < 2) {\r\n console.error('This slider needs at least 2 images.');\r\n } else {\r\n this.loadTextures(this.images, this.init);\r\n }\r\n },\r\n unmounted() {\r\n document.removeEventListener('click', this.onClick);\r\n document.removeEventListener('keyup', this.onKeyup);\r\n window.removeEventListener('wheel', this.onWheel);\r\n },\r\n methods: {\r\n init() {\r\n this.initScene();\r\n\r\n gsap.fromTo(this.plane1.uProgress,\r\n {\r\n value: -2,\r\n },\r\n {\r\n value: 0,\r\n duration: 2.5,\r\n ease: Power4.easeOut,\r\n }\r\n );\r\n\r\n if (this.events.click) document.addEventListener('click', this.onClick);\r\n if (this.events.keyup) document.addEventListener('keyup', this.onKeyup);\r\n if (this.events.wheel) window.addEventListener('wheel', this.onWheel);\r\n this.three.onBeforeRender(this.updateProgress);\r\n this.three.onAfterResize(this.onResize);\r\n },\r\n initScene() {\r\n const renderer = this.three.renderer;\r\n const scene = this.$refs.scene.scene;\r\n\r\n this.plane1 = new AnimatedPlane({\r\n renderer, screen: this.three.size,\r\n size: 10,\r\n anim: 1,\r\n texture: this.textures[0],\r\n });\r\n\r\n this.plane2 = new AnimatedPlane({\r\n renderer, screen: this.three.size,\r\n size: 10,\r\n anim: 2,\r\n texture: this.textures[1],\r\n });\r\n\r\n this.setPlanesProgress(0);\r\n this.planes = new Object3D();\r\n this.planes.add(this.plane1.o3d);\r\n this.planes.add(this.plane2.o3d);\r\n scene.add(this.planes);\r\n },\r\n onResize() {\r\n this.plane1.resize();\r\n this.plane2.resize();\r\n },\r\n onWheel(e) {\r\n // e.preventDefault();\r\n if (e.deltaY > 0) {\r\n this.targetProgress = limit(this.targetProgress + 1 / 20, 0, this.images.length - 1);\r\n } else {\r\n this.targetProgress = limit(this.targetProgress - 1 / 20, 0, this.images.length - 1);\r\n }\r\n },\r\n onClick(e) {\r\n if (e.clientY < this.three.size.height / 2) {\r\n this.navPrevious();\r\n } else {\r\n this.navNext();\r\n }\r\n },\r\n onKeyup(e) {\r\n if (e.keyCode === 37 || e.keyCode === 38) {\r\n this.navPrevious();\r\n } else if (e.keyCode === 39 || e.keyCode === 40) {\r\n this.navNext();\r\n }\r\n },\r\n navNext() {\r\n if (Number.isInteger(this.targetProgress)) this.targetProgress += 1;\r\n else this.targetProgress = Math.ceil(this.targetProgress);\r\n this.targetProgress = limit(this.targetProgress, 0, this.images.length - 1);\r\n },\r\n navPrevious() {\r\n if (Number.isInteger(this.targetProgress)) this.targetProgress -= 1;\r\n else this.targetProgress = Math.floor(this.targetProgress);\r\n this.targetProgress = limit(this.targetProgress, 0, this.images.length - 1);\r\n },\r\n updateProgress() {\r\n const progress1 = lerp(this.progress, this.targetProgress, 0.1);\r\n const pdiff = progress1 - this.progress;\r\n if (pdiff === 0) return;\r\n\r\n const p0 = this.progress % 1;\r\n const p1 = progress1 % 1;\r\n if ((pdiff > 0 && p1 < p0) || (pdiff < 0 && p0 < p1)) {\r\n const i = Math.floor(progress1);\r\n this.plane1.setTexture(this.textures[i]);\r\n this.plane2.setTexture(this.textures[i + 1]);\r\n }\r\n\r\n this.progress = progress1;\r\n this.setPlanesProgress(this.progress % 1);\r\n },\r\n setPlanesProgress(progress) {\r\n this.plane1.uProgress.value = progress;\r\n this.plane2.uProgress.value = -1 + progress;\r\n this.plane1.material.opacity = 1 - progress;\r\n this.plane2.material.opacity = progress;\r\n this.plane1.o3d.position.z = progress;\r\n this.plane2.o3d.position.z = progress - 1;\r\n },\r\n },\r\n};\r\n</script>\r\n","import { TextureLoader } from 'three';\r\n\r\nexport default function useTextures() {\r\n const loader = new TextureLoader();\r\n const textures = [];\r\n\r\n const loadTexture = (img, index) => {\r\n return new Promise(resolve => {\r\n loader.load(\r\n img.src,\r\n texture => {\r\n textures[index] = texture;\r\n resolve(texture);\r\n }\r\n );\r\n });\r\n };\r\n\r\n const loadTextures = (images, cb) => {\r\n textures.splice(0);\r\n Promise.all(images.map(loadTexture)).then(cb);\r\n };\r\n\r\n return {\r\n textures,\r\n loadTextures,\r\n };\r\n};\r\n","<template>\r\n <Renderer ref=\"renderer\" :orbit-ctrl=\"{ enableDamping: true, dampingFactor: 0.05 }\">\r\n <Camera ref=\"camera\" :position=\"cameraPosition\"></Camera>\r\n <Scene>\r\n <slot></slot>\r\n </Scene>\r\n </Renderer>\r\n</template>\r\n\r\n<script>\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nexport default {\r\n props: {\r\n src: String,\r\n cameraPosition: Object,\r\n },\r\n mounted() {\r\n this.renderer = this.$refs.renderer;\r\n\r\n const loader = new GLTFLoader();\r\n loader.load(this.src, (gltf) => {\r\n this.renderer.three.scene.add(gltf.scene);\r\n });\r\n },\r\n};\r\n</script>\r\n","import * as TROIS from './index.js';\r\n\r\nexport const TroisJSVuePlugin = {\r\n install: (app) => {\r\n const comps = [\r\n 'Camera',\r\n 'PerspectiveCamera',\r\n 'Renderer',\r\n 'Scene',\r\n // 'Texture',\r\n // 'CubeTexture',\r\n\r\n 'BoxGeometry',\r\n 'CircleGeometry',\r\n 'ConeGeometry',\r\n 'CylinderGeometry',\r\n 'DodecahedronGeometry',\r\n 'IcosahedronGeometry',\r\n 'LatheGeometry',\r\n 'OctahedronGeometry',\r\n 'PolyhedronGeometry',\r\n 'RingGeometry',\r\n 'SphereGeometry',\r\n 'TetrahedronGeometry',\r\n 'TorusGeometry',\r\n 'TorusKnotGeometry',\r\n 'TubeGeometry',\r\n\r\n 'AmbientLight',\r\n 'DirectionalLight',\r\n 'PointLight',\r\n 'SpotLight',\r\n\r\n 'BasicMaterial',\r\n 'LambertMaterial',\r\n 'PhongMaterial',\r\n 'PhysicalMaterial',\r\n 'ShaderMaterial',\r\n 'StandardMaterial',\r\n 'SubSurfaceMaterial',\r\n 'ToonMaterial',\r\n\r\n 'Map',\r\n 'EnvMap',\r\n\r\n 'Box',\r\n 'Circle',\r\n 'Cone',\r\n 'Cylinder',\r\n 'Dodecahedron',\r\n 'Icosahedron',\r\n 'Mesh',\r\n 'Lathe',\r\n 'Octahedron',\r\n 'Plane',\r\n 'Polyhedron',\r\n 'Ring',\r\n 'Sphere',\r\n 'Tetrahedron',\r\n 'Text',\r\n 'Torus',\r\n 'TorusKnot',\r\n 'Tube',\r\n\r\n 'Gem',\r\n 'Image',\r\n 'InstancedMesh',\r\n 'MirrorMesh',\r\n 'RefractionMesh',\r\n 'Sprite',\r\n\r\n 'BokehPass',\r\n 'EffectComposer',\r\n 'FilmPass',\r\n 'HalftonePass',\r\n 'RenderPass',\r\n 'SAOPass',\r\n 'UnrealBloomPass',\r\n\r\n 'GLTFViewer',\r\n ];\r\n\r\n comps.forEach(comp => {\r\n app.component(comp, TROIS[comp]);\r\n });\r\n },\r\n};\r\n"],"names":["useThree","const","conf","canvas","antialias","alpha","autoClear","orbit_ctrl","mouse_move","mouse_raycast","resize","width","height","size","wWidth","wHeight","ratio","afterInitCallbacks","afterResizeCallbacks","beforeRenderCallbacks","mouse","Vector2","mouseV3","Vector3","mousePlane","Plane","raycaster","Raycaster","obj","renderer","camera","cameraCtrl","materials","scene","params","Object","entries","forEach","key","value","console","error","WebGLRenderer","orbitCtrl","OrbitControls","domElement","setSize","onResize","window","addEventListener","mouse_move_element","document","body","onMousemove","onMouseleave","c","removeEventListener","dispose","this","update","render","composer","callback","push","filter","e","x","clientX","y","clientY","updateMouseV3","getWorldDirection","normal","normalize","setFromCamera","ray","intersectPlane","innerWidth","innerHeight","clientWidth","clientHeight","aspect","updateProjectionMatrix","wsize","vFOV","fov","Math","PI","h","tan","abs","position","z","getCameraSize","props","type","Boolean","default","shadow","mouseMove","String","mouseRaycast","Element","setup","three","raf","onMountedCallbacks","provide","rendererComponent","mounted","$refs","init","shadowMap","enabled","animateC","animate","beforeUnmount","methods","onMounted","onBeforeRender","onAfterResize","requestAnimationFrame","renderC","ref","$slots","setFromProp","o","prop","propsValues","exclude","values","includes","lerp","value1","value2","amount","lerpv3","v1","v2","limit","val","min","max","useBindProp","comp","object","toRef","watch","deep","inject","Number","far","near","created","PerspectiveCamera","p","__hmrId","id","background","Scene","Color","emits","src","onLoad","Function","onProgress","onError","createTexture","refreshTexture","unmounted","texture","TextureLoader","load","onLoaded","$emit","path","urls","Array","CubeTextureLoader","setPath","rotateX","rotateY","rotateZ","mesh","watchProps","$props","beforeMount","createGeometry","rotateGeometry","setGeometry","geometry","addWatchers","refreshGeometry","oldGeo","extends","Geometry","depth","widthSegments","heightSegments","depthSegments","let","w","d","BoxBufferGeometry","radius","segments","thetaStart","thetaLength","CircleBufferGeometry","radialSegments","openEnded","ConeBufferGeometry","radiusTop","radiusBottom","CylinderBufferGeometry","detail","DodecahedronBufferGeometry","IcosahedronBufferGeometry","points","phiStart","phiLength","LatheBufferGeometry","OctahedronBufferGeometry","vertices","indices","PolyhedronBufferGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","SphereBufferGeometry","TetrahedronBufferGeometry","tube","tubularSegments","arc","TorusBufferGeometry","q","TorusKnotBufferGeometry","Curve","radiusSegments","closed","TubeBufferGeometry","color","intensity","castShadow","shadowMapSize","light","target","mapSize","add","remove","Light","AmbientLight","DirectionalLight","distance","decay","PointLight","angle","penumbra","SpotLight","depthTest","depthWrite","flatShading","fog","opacity","side","FrontSide","transparent","vertexColors","material","createMaterial","setMaterial","_addWatchers","setMap","map","needsUpdate","setEnvMap","envMap","set","Material","MeshBasicMaterial","MeshLambertMaterial","MeshPhongMaterial","emissive","emissiveIntensity","metalness","roughness","MeshStandardMaterial","StandardMaterial","MeshPhysicalMaterial","string","find","replace","meshphongFragHead","ShaderChunk","meshphong_frag","slice","indexOf","meshphongFragBody","SubsurfaceScatteringShader","uniforms","UniformsUtils","merge","ShaderLib","phong","thicknessColor","thicknessDistortion","thicknessAmbient","thicknessAttenuation","thicknessPower","thicknessScale","vertexShader","fragmentShader","lights_fragment_begin","split","join","diffuse","clone","TShaderMaterial","lights","MeshToonMaterial","Texture","CubeTexture","materialId","rotation","scale","receiveShadow","initMesh","Mesh","bindProps","PlaneBufferGeometry","text","fontSrc","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align","TextProps","font","FontLoader","TextBufferGeometry","center","cubeRTSize","cubeCameraNear","cubeCameraFar","autoUpdate","initGem","updateCubeRT","offBeforeRender","meshBack","materialBack","cubeRT","WebGLCubeRenderTarget","format","RGBFormat","generateMipmaps","minFilter","LinearMipmapLinearFilter","cubeCamera","CubeCamera","envMapIntensity","premultipliedAlpha","BackSide","TMesh","visible","keepSize","DoubleSide","loadTexture","screen","iRatio","image","count","InstancedMesh","initMirrorMesh","mapping","CubeRefractionMapping","refractionRatio","SpriteMaterial","sprite","Sprite","updateUV","iWidth","iHeight","positions","attributes","array","passes","onAfterInit","EffectComposer","pass","addPass","EffectPass","RenderPass","focus","aperture","maxblur","BokehPass","noiseIntensity","scanlinesIntensity","scanlinesCount","grayscale","nIntensity","sIntensity","sCount","FilmPass","shape","rotateR","rotateG","rotateB","scatter","HalftonePass","depthTexture","useNormals","resolution","SAOPass","strength","threshold","UnrealBloomPass","Image","timeCoef","noiseCoef","zCoef","dispCoef","uNoiseCoef","uZCoef","uDispCoef","startTime","Date","now","updateTime","onBeforeCompile","shader","uTime","snoise2","materialShader","updateMaterial","needsupdate","Sphere","Text","AnimatedPlane","o3d","Object3D","uProgress","uvScale","initMaterial","initPlane","progress","wSize","nx","ceil","ny","icount","initGeometry","initUV","initAnimAttributes","imesh","bGeometry","dummy","index","dx","i","dy","j","updateMatrix","setMatrixAt","matrix","faces","Face3","faceVertexUvs","translate","BufferGeometry","fromGeometry","v3","offsets","Float32Array","length","anim","rndFS","rnd","toArray","setAttribute","InstancedBufferAttribute","rotations","tRatio","nW","nH","uvOffsets","setTexture","images","events","wheel","click","keyup","loader","textures","img","Promise","resolve","cb","splice","all","then","useTextures","targetProgress","loadTextures","onClick","onKeyup","onWheel","initScene","gsap","fromTo","plane1","duration","ease","Power4","easeOut","updateProgress","plane2","setPlanesProgress","planes","deltaY","navPrevious","navNext","keyCode","isInteger","floor","progress1","pdiff","p0","p1","_createBlock","_createVNode","cameraPosition","GLTFLoader","gltf","orbit-ctrl","_renderSlot","TroisJSVuePlugin","install","app","component","TROIS"],"mappings":"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"} |