mirror of
https://github.com/troisjs/trois.git
synced 2024-11-27 22:12:01 +08:00
1 line
36 KiB
Plaintext
1 line
36 KiB
Plaintext
{"version":3,"file":"trois.module.min.js","sources":["../src/core/useThree.js","../src/core/Renderer.js","../src/tools.js","../src/core/PerspectiveCamera.js","../src/core/Scene.js","../src/geometries/Geometry.js","../src/geometries/BoxGeometry.js","../src/geometries/SphereGeometry.js","../src/lights/Light.js","../src/lights/AmbientLight.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/PhysicalMaterial.js","../src/materials/StandardMaterial.js","../src/meshes/Mesh.js","../src/meshes/Box.js","../src/meshes/Plane.js","../src/meshes/Sphere.js","../src/meshes/InstancedMesh.js","../src/effects/EffectComposer.js","../src/effects/EffectPass.js","../src/effects/RenderPass.js","../src/effects/BokehPass.js","../src/effects/UnrealBloomPass.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 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 const afterInitHandlers = [];\r\n const afterResizeHandlers = [];\r\n const beforeRenderHandlers = [];\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,\r\n onBeforeRender,\r\n };\r\n\r\n /**\r\n * init three\r\n */\r\n function init(params) {\r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\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\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 for (const [key, value] of Object.entries(conf.orbit_ctrl)) {\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 afterInitHandlers.forEach(c => c());\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * add after init handler\r\n */\r\n function onAfterInit(callback) {\r\n afterInitHandlers.push(callback);\r\n }\r\n\r\n /**\r\n * add after resize handler\r\n */\r\n function onAfterResize(callback) {\r\n afterResizeHandlers.push(callback);\r\n }\r\n\r\n /**\r\n * add before render handler\r\n */\r\n function onBeforeRender(callback) {\r\n beforeRenderHandlers.push(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 beforeRenderHandlers.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 beforeRenderHandlers.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 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 }\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 afterResizeHandlers.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 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(props) {\r\n return {\r\n three: useThree(),\r\n raf: true,\r\n };\r\n },\r\n provide() {\r\n return {\r\n three: this.three,\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 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 beforeUnmount() {\r\n this.raf = false;\r\n this.three.dispose();\r\n },\r\n methods: {\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 for (const [key, value] of Object.entries(prop)) {\r\n o[key] = value;\r\n }\r\n }\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","import { PerspectiveCamera } from 'three';\r\nimport { setFromProp } from '../tools.js';\r\n\r\nexport default {\r\n inject: ['three'],\r\n props: {\r\n fov: {\r\n type: Number,\r\n default: 50,\r\n },\r\n position: Object,\r\n },\r\n created() {\r\n const camera = new PerspectiveCamera(this.fov);\r\n setFromProp(camera.position, this.position);\r\n this.three.camera = camera;\r\n },\r\n render() {\r\n return [];\r\n },\r\n};\r\n","import { Scene, Color } from 'three';\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 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 render() {\r\n if (this.$slots.default) {\r\n return this.$slots.default();\r\n }\r\n return [];\r\n },\r\n};\r\n","export default {\r\n inject: ['parent'],\r\n beforeMount() {\r\n if (!this.parent) {\r\n console.error('Missing parent Mesh');\r\n }\r\n },\r\n unmounted() {\r\n this.parent.geometry.dispose();\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: {\r\n type: Number,\r\n },\r\n width: {\r\n type: Number,\r\n default: 1,\r\n },\r\n height: {\r\n type: Number,\r\n default: 1,\r\n },\r\n depth: {\r\n type: Number,\r\n default: 1,\r\n },\r\n },\r\n mounted() {\r\n if (this.size) {\r\n this.parent.geometry = new BoxBufferGeometry(this.size, this.size, this.size);\r\n } else {\r\n this.parent.geometry = new BoxBufferGeometry(this.width, this.height, this.depth);\r\n }\r\n },\r\n};\r\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: Number,\r\n widthSegments: {\r\n type: Number,\r\n default: 12,\r\n },\r\n heightSegments: {\r\n type: Number,\r\n default: 12,\r\n },\r\n },\r\n mounted() {\r\n this.parent.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\r\n },\r\n};\r\n","import { setFromProp } from '../tools.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 setFromProp(this.light.position, this.position);\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 this.scene.add(this.light);\r\n if (this.light.target) this.scene.add(this.light.target);\r\n },\r\n render() {\r\n return [];\r\n },\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};\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};\r\n","import { SpotLight } 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 angle: {\r\n type: Number,\r\n default: Math.PI / 3,\r\n },\r\n penumbra: {\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 SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay);\r\n },\r\n};\r\n","import { FrontSide } from 'three';\r\n\r\nexport default {\r\n inject: ['three'],\r\n props: {\r\n id: String,\r\n color: {\r\n type: [String, Number],\r\n default: '#ffffff',\r\n },\r\n depthTest: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n depthWrite: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n fog: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n opacity: {\r\n type: Number,\r\n default: 1,\r\n },\r\n side: {\r\n type: Number,\r\n default: FrontSide,\r\n },\r\n transparent: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n vertexColors: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n mounted() {\r\n this.three.materials[this.id] = this.material;\r\n },\r\n unmounted() {\r\n this.material.dispose();\r\n },\r\n methods: {\r\n propsValues() {\r\n const props = {};\r\n for (const [key, value] of Object.entries(this.$props)) {\r\n if (key !== 'id') props[key] = value;\r\n }\r\n return props;\r\n },\r\n },\r\n render() {\r\n return [];\r\n },\r\n};\r\n","import { MeshBasicMaterial } from 'three';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n created() {\r\n this.material = new MeshBasicMaterial({\r\n color: this.color,\r\n });\r\n },\r\n};\r\n","import { MeshLambertMaterial } from 'three';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n created() {\r\n this.material = new MeshLambertMaterial({\r\n color: this.color,\r\n });\r\n },\r\n};\r\n","import { MeshPhongMaterial } from 'three';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n created() {\r\n this.material = new MeshPhongMaterial({\r\n color: this.color,\r\n });\r\n },\r\n};\r\n","import { MeshPhysicalMaterial } from 'three';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n created() {\r\n this.material = new MeshPhysicalMaterial({\r\n color: this.color,\r\n });\r\n },\r\n};\r\n","import { MeshStandardMaterial } from 'three';\r\nimport Material from './Material';\r\n\r\nexport default {\r\n extends: Material,\r\n props: {\r\n emissive: {\r\n type: [Number, String],\r\n default: 0,\r\n },\r\n emissiveIntensity: {\r\n type: Number,\r\n default: 1,\r\n },\r\n metalness: {\r\n type: Number,\r\n default: 0,\r\n },\r\n roughness: {\r\n type: Number,\r\n default: 1,\r\n },\r\n },\r\n created() {\r\n this.material = new MeshStandardMaterial(this.propsValues());\r\n },\r\n};\r\n","import { Mesh } from 'three';\r\nimport { setFromProp } from '../tools.js';\r\n\r\nexport default {\r\n inject: ['three', 'scene'],\r\n props: {\r\n material: String,\r\n position: Object,\r\n rotation: Object,\r\n scale: Object,\r\n castShadow: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n receiveShadow: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n mounted() {\r\n this.mesh = new Mesh(this.geometry, this.three.materials[this.material]);\r\n setFromProp(this.mesh.position, this.position);\r\n setFromProp(this.mesh.rotation, this.rotation);\r\n setFromProp(this.mesh.scale, this.scale);\r\n this.mesh.castShadow = this.castShadow;\r\n this.mesh.receiveShadow = this.receiveShadow;\r\n this.scene.add(this.mesh);\r\n },\r\n unmounted() {\r\n this.geometry.dispose();\r\n },\r\n render() {\r\n return [];\r\n },\r\n};\r\n","import { BoxBufferGeometry } from 'three';\r\nimport Mesh from './Mesh.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n size: {\r\n type: Number,\r\n },\r\n width: {\r\n type: Number,\r\n default: 1,\r\n },\r\n height: {\r\n type: Number,\r\n default: 1,\r\n },\r\n depth: {\r\n type: Number,\r\n default: 1,\r\n },\r\n },\r\n created() {\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","import { PlaneBufferGeometry } from 'three';\r\nimport Mesh from './Mesh.js';\r\n\r\nexport default {\r\n extends: Mesh,\r\n props: {\r\n width: {\r\n type: Number,\r\n default: 1,\r\n },\r\n height: {\r\n type: Number,\r\n default: 1,\r\n },\r\n widthSegments: {\r\n type: Number,\r\n default: 1,\r\n },\r\n heightSegments: {\r\n type: Number,\r\n default: 1,\r\n },\r\n },\r\n created() {\r\n this.geometry = new PlaneBufferGeometry(this.width, this.height, this.widthSegments, this.heightSegments);\r\n },\r\n};\r\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: {\r\n type: Number,\r\n default: 12,\r\n },\r\n heightSegments: {\r\n type: Number,\r\n default: 12,\r\n },\r\n },\r\n created() {\r\n this.geometry = new SphereBufferGeometry(this.radius, this.widthSegments, this.heightSegments);\r\n },\r\n};\r\n","import { InstancedMesh } from 'three';\r\nimport { setFromProp } from '../tools.js';\r\n\r\nexport default {\r\n inject: ['three', 'scene'],\r\n props: {\r\n material: String,\r\n count: Number,\r\n position: Object,\r\n castShadow: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n receiveShadow: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n setup() {\r\n return {\r\n conf: {},\r\n };\r\n },\r\n provide() {\r\n return {\r\n parent: this.conf,\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.mesh = new InstancedMesh(this.conf.geometry, this.three.materials[this.material], this.count);\r\n setFromProp(this.mesh.position, this.position);\r\n this.mesh.castShadow = this.castShadow;\r\n this.mesh.receiveShadow = this.receiveShadow;\r\n this.scene.add(this.mesh);\r\n },\r\n render() {\r\n return this.$slots.default();\r\n },\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.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};\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 render() {\r\n return [];\r\n },\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};\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() {\r\n // this.pass.focus = this.focus;\r\n // },\r\n // aperture() {\r\n // this.pass.aperture = this.aperture;\r\n // },\r\n // maxblur() {\r\n // this.pass.maxblur = this.maxblur;\r\n // },\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};\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: {\r\n type: Number,\r\n default: 1.5,\r\n },\r\n radius: {\r\n type: Number,\r\n default: 0,\r\n },\r\n threshold: {\r\n type: Number,\r\n default: 0,\r\n },\r\n },\r\n // watch: {\r\n // strength() {\r\n // this.pass.strength = this.strength;\r\n // },\r\n // radius() {\r\n // this.pass.strength = this.radius;\r\n // },\r\n // threshold() {\r\n // this.pass.strength = this.threshold;\r\n // },\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};\r\n"],"names":["useThree","const","conf","canvas","antialias","alpha","orbit_ctrl","mouse_move","mouse_raycast","resize","width","height","size","wWidth","wHeight","ratio","afterInitHandlers","afterResizeHandlers","beforeRenderHandlers","mouse","Vector2","mouseV3","Vector3","mousePlane","Plane","raycaster","Raycaster","obj","renderer","camera","cameraCtrl","materials","scene","params","key","value","Object","entries","console","error","WebGLRenderer","orbitCtrl","OrbitControls","domElement","setSize","onResize","window","addEventListener","mouse_move_element","document","body","onMousemove","onMouseleave","forEach","c","removeEventListener","update","render","composer","callback","push","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","provide","this","mounted","$refs","init","shadowMap","enabled","animateC","animate","beforeUnmount","dispose","methods","onBeforeRender","onAfterResize","requestAnimationFrame","renderC","ref","$slots","setFromProp","o","prop","lerp","value1","value2","amount","lerpv3","v1","v2","inject","Number","created","PerspectiveCamera","id","background","Scene","Color","beforeMount","parent","unmounted","geometry","extends","Geometry","depth","BoxBufferGeometry","radius","widthSegments","heightSegments","SphereBufferGeometry","color","intensity","castShadow","shadowMapSize","light","mapSize","add","target","Light","AmbientLight","distance","decay","PointLight","angle","penumbra","SpotLight","depthTest","depthWrite","fog","opacity","side","FrontSide","transparent","vertexColors","material","propsValues","$props","Material","MeshBasicMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshPhysicalMaterial","emissive","emissiveIntensity","metalness","roughness","MeshStandardMaterial","rotation","scale","receiveShadow","mesh","Mesh","PlaneBufferGeometry","count","InstancedMesh","passes","onAfterInit","EffectComposer","pass","addPass","EffectPass","RenderPass","focus","aperture","maxblur","BokehPass","strength","threshold","UnrealBloomPass"],"mappings":"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"} |