├── .gitignore ├── README.md ├── app.vue ├── assets ├── css │ └── tailwind.css ├── fonts │ └── .gitkeep └── sass │ ├── components │ └── .gitkeep │ ├── pages │ └── _home.scss │ └── styles.scss ├── class ├── three │ ├── Camera.ts │ ├── Debug.ts │ ├── Layers.ts │ ├── Mouse.ts │ ├── Raycaster.ts │ ├── Renderer.ts │ ├── Time.ts │ ├── WebGL.ts │ ├── WebGLSub.ts │ ├── World │ │ ├── Cube.ts │ │ ├── Environment.ts │ │ ├── Floor.ts │ │ ├── Fox.ts │ │ └── World.ts │ ├── shaders │ │ └── cube │ │ │ ├── fragment.glsl │ │ │ └── vertex.glsl │ └── utils │ │ ├── Resources.ts │ │ └── Sizes.ts └── ui │ └── .gitkeep ├── components ├── Header.vue └── three │ └── Canvas.vue ├── composables └── .gitkeep ├── constants ├── ENTITIES.ts └── SOURCES.ts ├── layouts └── default.vue ├── nuxt.config.ts ├── package.json ├── pages ├── about.vue └── index.vue ├── plugins └── locale.server.ts ├── postcss.config.js ├── public ├── .gitkeep ├── draco │ ├── README.md │ ├── draco_decoder.js │ ├── draco_decoder.wasm │ ├── draco_encoder.js │ ├── draco_wasm_wrapper.js │ └── gltf │ │ ├── draco_decoder.js │ │ ├── draco_decoder.wasm │ │ ├── draco_encoder.js │ │ └── draco_wasm_wrapper.js ├── models │ ├── .gitkeep │ └── Fox │ │ ├── README.md │ │ ├── glTF-Binary │ │ └── Fox.glb │ │ ├── glTF-Embedded │ │ └── Fox.gltf │ │ └── glTF │ │ ├── Fox.bin │ │ ├── Fox.gltf │ │ └── Texture.png └── textures │ ├── dirt │ ├── color.jpg │ └── normal.jpg │ └── environmentMap │ ├── nx.jpg │ ├── ny.jpg │ ├── nz.jpg │ ├── px.jpg │ ├── py.jpg │ └── pz.jpg ├── server └── api │ └── hello.ts ├── tailwind.config.js ├── tsconfig.json ├── types └── index.d.ts ├── vue-shim.d.ts └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .nuxt 4 | nuxt.d.ts 5 | .output 6 | .DS_Store 7 | .vercel 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nuxt 3 Minimal Starter 2 | 3 | Look at the [nuxt 3 documentation](https://v3.nuxtjs.org) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install the dependencies: 8 | 9 | ```bash 10 | # yarn 11 | yarn install 12 | 13 | # npm 14 | npm install 15 | 16 | # pnpm 17 | pnpm install --shamefully-hoist 18 | ``` 19 | 20 | ## Development Server 21 | 22 | Start the development server on http://localhost:3000 23 | 24 | ```bash 25 | npm run dev 26 | ``` 27 | 28 | ## Production 29 | 30 | Build the application for production: 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | Locally preview production build: 37 | 38 | ```bash 39 | npm run preview 40 | ``` 41 | 42 | Checkout the [deployment documentation](https://v3.nuxtjs.org/docs/deployment) for more information. 43 | -------------------------------------------------------------------------------- /app.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /assets/css/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /assets/fonts/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrieucCaillot/nuxt3-threejs-starter/3c33046e8b17d71df98a0d9699d175a128755c63/assets/fonts/.gitkeep -------------------------------------------------------------------------------- /assets/sass/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrieucCaillot/nuxt3-threejs-starter/3c33046e8b17d71df98a0d9699d175a128755c63/assets/sass/components/.gitkeep -------------------------------------------------------------------------------- /assets/sass/pages/_home.scss: -------------------------------------------------------------------------------- 1 | #home { 2 | position: absolute; 3 | bottom: 5%; 4 | } 5 | -------------------------------------------------------------------------------- /assets/sass/styles.scss: -------------------------------------------------------------------------------- 1 | // PAGES 2 | // @import 'pages/_home.scss'; 3 | 4 | // COMMON 5 | body { 6 | background-color: skyblue; 7 | overflow: hidden; 8 | } 9 | 10 | .page { 11 | padding: 0 2rem; 12 | width: 100%; 13 | height: 100%; 14 | } 15 | -------------------------------------------------------------------------------- /class/three/Camera.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' 3 | 4 | import WebGL from '@/class/three/WebGL' 5 | import WebGLSub from '@/class/three/WebGLSub' 6 | 7 | import { EntitiesLayer } from '@/constants/ENTITIES' 8 | 9 | class Camera extends WebGLSub { 10 | instance: THREE.PerspectiveCamera | null = null 11 | controls: OrbitControls | null = null 12 | 13 | constructor() { 14 | super() 15 | 16 | this.setInstance() 17 | this.setControls() 18 | } 19 | 20 | setInstance() { 21 | this.instance = new THREE.PerspectiveCamera(35, WebGL.sizes.width / WebGL.sizes.height, 1, 1000) 22 | this.instance.position.set(6, 4, 8) 23 | WebGL.scene.add(this.instance) 24 | } 25 | 26 | enableLayers(layerId: EntitiesLayer) { 27 | this.instance.layers.enable(layerId) 28 | } 29 | 30 | setControls() { 31 | this.controls = new OrbitControls(this.instance!, WebGL.canvas) 32 | this.controls.enableDamping = true 33 | } 34 | 35 | onResize() { 36 | this.instance!.aspect = WebGL.sizes.width / WebGL.sizes.height 37 | this.instance!.updateProjectionMatrix() 38 | } 39 | 40 | onUpdate() { 41 | this.controls!.update() 42 | } 43 | 44 | destroy() { 45 | this.controls!.dispose() 46 | } 47 | } 48 | 49 | export default Camera 50 | -------------------------------------------------------------------------------- /class/three/Debug.ts: -------------------------------------------------------------------------------- 1 | import GUI from 'lil-gui' 2 | import Stats from 'three/examples/jsm/libs/stats.module.js' 3 | 4 | class Debug { 5 | active: boolean = false 6 | gui!: GUI 7 | stats: Stats = Stats() 8 | 9 | constructor() { 10 | this.setGUI() 11 | this.setStats() 12 | } 13 | 14 | setGUI() { 15 | this.gui = new GUI() 16 | this.active = window.location.hash === '#debug' 17 | this.gui.hide() 18 | if (!this.active) return 19 | this.gui.show() 20 | } 21 | 22 | setStats() { 23 | this.stats.showPanel(0) 24 | document.body.appendChild(this.stats.dom) 25 | } 26 | 27 | addFolder(name: string) { 28 | return this.gui.addFolder(name) 29 | } 30 | } 31 | 32 | export default Debug 33 | -------------------------------------------------------------------------------- /class/three/Layers.ts: -------------------------------------------------------------------------------- 1 | import WebGL from '@/class/three/WebGL' 2 | import WebGLSub from '@/class/three/WebGLSub' 3 | 4 | import { EntitiesLayer } from '@/constants/ENTITIES' 5 | 6 | class Layers extends WebGLSub { 7 | activeLayers: EntitiesLayer[] = [EntitiesLayer.DEFAULT] 8 | 9 | constructor() { 10 | super() 11 | 12 | // this.updateLayers([EntitiesLayer.DEFAULT, EntitiesLayer.FOX, EntitiesLayer.CUBE]) 13 | } 14 | 15 | async updateLayers(layers: EntitiesLayer[]) { 16 | this.activeLayers = layers 17 | 18 | // await new Promise((resolve, reject) => { 19 | layers.forEach((layerId: number) => { 20 | WebGL.camera.enableLayers(layerId) 21 | WebGL.raycaster.setLayers(layerId) 22 | }) 23 | 24 | // resolve() 25 | // }) 26 | 27 | // await this.dispatchEvent({ 28 | // type: 'activeLayersUpdated', 29 | // }) 30 | } 31 | } 32 | 33 | export default Layers 34 | -------------------------------------------------------------------------------- /class/three/Mouse.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | import WebGL from '@/class/three/WebGL' 4 | import WebGLSub from '@/class/three/WebGLSub' 5 | 6 | class Mouse extends WebGLSub { 7 | position: THREE.Vector2 = new THREE.Vector2(0) 8 | normalizedPosition: THREE.Vector2 = new THREE.Vector2(-1, -1) 9 | 10 | timeoutMouseMove = null 11 | isMoving: boolean = false 12 | 13 | constructor() { 14 | super() 15 | 16 | this.setEvents() 17 | } 18 | 19 | onMouseMove(e: MouseEvent) { 20 | this.isMoving = true 21 | this.position.set(e.clientX, e.clientY) 22 | this.normalizedPosition.set((e.clientX / WebGL.sizes.width) * 2 - 1, -(e.clientY / WebGL.sizes.height) * 2 + 1) 23 | } 24 | 25 | onMouseStop() { 26 | this.isMoving = false 27 | } 28 | 29 | setEvents = () => { 30 | window.addEventListener('mousemove', (e: MouseEvent) => { 31 | this.onMouseMove(e) 32 | 33 | // Stop mousemove event after 0.3s 34 | // clearTimeout(this.timeoutMouseMove) 35 | // this.timeoutMouseMove = setTimeout(() => this.onMouseStop(), 300) 36 | 37 | this.dispatchEvent({ 38 | type: 'mousemove', 39 | }) 40 | }) 41 | } 42 | } 43 | 44 | export default Mouse 45 | -------------------------------------------------------------------------------- /class/three/Raycaster.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | import WebGL from '@/class/three/WebGL' 4 | import WebGLSub from '@/class/three/WebGLSub' 5 | 6 | import { EntitiesLayer } from '@/constants/ENTITIES' 7 | 8 | class Raycaster extends WebGLSub { 9 | instance: THREE.Raycaster = new THREE.Raycaster() 10 | pointer: THREE.Vector2 = new THREE.Vector2(-10, -10) 11 | 12 | constructor() { 13 | super() 14 | } 15 | 16 | onMouseMove() { 17 | this.pointer.set(WebGL.mouse.normalizedPosition.x, WebGL.mouse.normalizedPosition.y) 18 | } 19 | 20 | onUpdate() { 21 | if (!WebGL.mouse.isMoving) return 22 | this.instance.setFromCamera(this.pointer, WebGL.camera.instance) 23 | 24 | // calculate objects intersecting the picking ray 25 | const intersects = this.instance.intersectObjects(WebGL.scene.children) 26 | 27 | for (let i = 0; i < intersects.length; i++) { 28 | // console.log(intersects[i].object.name) 29 | const object = intersects[i].object as THREE.Mesh 30 | if (object.name == 'CUBE') { 31 | object.material.uniforms.uColor.value = new THREE.Color(0xff0000) 32 | } 33 | } 34 | } 35 | 36 | setLayers(layerId: EntitiesLayer) { 37 | this.instance.layers.set(layerId) 38 | } 39 | } 40 | 41 | export default Raycaster 42 | -------------------------------------------------------------------------------- /class/three/Renderer.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | import WebGL from '@/class/three/WebGL' 4 | import WebGLSub from '@/class/three/WebGLSub' 5 | 6 | class Renderer extends WebGLSub { 7 | instance: THREE.WebGLRenderer | null = null 8 | 9 | constructor() { 10 | super() 11 | 12 | this.instance 13 | this.setInstance() 14 | } 15 | 16 | setInstance() { 17 | this.instance = new THREE.WebGLRenderer({ 18 | canvas: WebGL.canvas, 19 | antialias: true, 20 | }) 21 | this.instance.physicallyCorrectLights = true 22 | this.instance.outputEncoding = THREE.sRGBEncoding 23 | this.instance.toneMapping = THREE.ACESFilmicToneMapping 24 | this.instance.toneMappingExposure = 0.8 25 | this.instance.shadowMap.enabled = true 26 | this.instance.shadowMap.type = THREE.PCFSoftShadowMap 27 | this.instance.setClearColor(0x222222, 1) 28 | this.instance.setSize(WebGL.sizes.width, WebGL.sizes.height) 29 | this.instance.setPixelRatio(WebGL.sizes.pixelRatio) 30 | } 31 | 32 | onResize() { 33 | this.instance!.setSize(WebGL.sizes.width, WebGL.sizes.height) 34 | this.instance!.setPixelRatio(WebGL.sizes.pixelRatio) 35 | } 36 | 37 | onUpdate() { 38 | this.instance!.render(WebGL.scene, WebGL.camera.instance!) 39 | } 40 | 41 | destroy() { 42 | this.instance!.dispose() 43 | } 44 | } 45 | 46 | export default Renderer 47 | -------------------------------------------------------------------------------- /class/three/Time.ts: -------------------------------------------------------------------------------- 1 | import gsap from 'gsap' 2 | 3 | import WebGL from '@/class/three/WebGL' 4 | 5 | class Time { 6 | time: number = 0 7 | deltaTime: number = 0 8 | frame: number = 0 9 | elapsed: number = 0 10 | 11 | addUpdate(fn: Function) { 12 | gsap.ticker.add((time: number, deltaTime: number, frame: number, elapsed: number) => { 13 | WebGL.debug!.stats.begin() 14 | this.time = time 15 | this.deltaTime = deltaTime 16 | this.frame = frame 17 | this.elapsed = elapsed 18 | WebGL.debug!.stats.end() 19 | fn() 20 | }) 21 | } 22 | 23 | removeUpdate(fn: gsap.TickerCallback) { 24 | gsap.ticker.remove(fn) 25 | } 26 | } 27 | 28 | export default Time 29 | -------------------------------------------------------------------------------- /class/three/WebGL.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | import Sizes from '@/class/three/utils/Sizes' 4 | import Mouse from '@/class/three/Mouse' 5 | import Time from '@/class/three/Time' 6 | import Resources from '@/class/three/utils/Resources' 7 | import Camera from '@/class/three/Camera' 8 | import Raycaster from '@/class/three/Raycaster' 9 | import Renderer from '@/class/three/Renderer' 10 | import World from '@/class/three/World/World' 11 | import Debug from '@/class/three/Debug' 12 | import Layers from '@/class/three/Layers' 13 | 14 | class WebGL { 15 | canvas: HTMLCanvasElement 16 | sizes: Sizes 17 | mouse: Mouse 18 | time: Time 19 | scene: THREE.Scene 20 | resources: Resources 21 | camera: Camera 22 | raycaster: Raycaster 23 | renderer: Renderer 24 | world: World 25 | debug: Debug 26 | layers: Layers 27 | 28 | setup(_canvas: HTMLCanvasElement) { 29 | this.canvas = _canvas 30 | this.sizes = new Sizes() 31 | this.mouse = new Mouse() 32 | this.time = new Time() 33 | this.scene = new THREE.Scene() 34 | this.resources = new Resources() 35 | this.camera = new Camera() 36 | this.raycaster = new Raycaster() 37 | this.renderer = new Renderer() 38 | this.debug = new Debug() 39 | this.world = new World() 40 | this.layers = new Layers() 41 | 42 | // Listeners 43 | this.sizes.addEventListener('resize', this.resize) 44 | this.mouse.addEventListener('mousemove', this.mouseMove) 45 | 46 | // Update 47 | this.time.addUpdate(this.update) 48 | 49 | // Dispose WebGL 50 | // setTimeout(() => this.destroy(), 3000) 51 | } 52 | 53 | resize = () => { 54 | this.camera.onResize() 55 | this.renderer.onResize() 56 | } 57 | 58 | mouseMove = (e) => { 59 | // To do on mousemove 60 | this.raycaster.onMouseMove() 61 | } 62 | 63 | update = () => { 64 | this.camera.onUpdate() 65 | this.world.onUpdate() 66 | this.raycaster.onUpdate() 67 | this.renderer.onUpdate() 68 | } 69 | 70 | destroy() { 71 | // @TODO Destroy from inside all classes 72 | 73 | // Traverse the whole scene 74 | this.scene.traverse((child) => { 75 | // Test if it's a mesh 76 | if (child instanceof THREE.Mesh) { 77 | child.geometry.dispose() 78 | console.log('Disposed geometry') 79 | 80 | // Loop through the material properties 81 | for (const key in child.material) { 82 | const value = child.material[key] 83 | 84 | // Test if there is a dispose function 85 | if (value && typeof value.dispose === 'function') { 86 | value.dispose() 87 | console.log('Disposed material') 88 | } 89 | } 90 | } 91 | }) 92 | 93 | // Destroy from classes 94 | this.camera.destroy() 95 | this.renderer.destroy() 96 | 97 | // Remove update 98 | this.time.removeUpdate(this.update) 99 | } 100 | } 101 | 102 | export default new WebGL() 103 | -------------------------------------------------------------------------------- /class/three/WebGLSub.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | class WebGLSub extends THREE.EventDispatcher { 4 | store: { 5 | resourcesLoaded: boolean 6 | } 7 | 8 | constructor() { 9 | super() 10 | 11 | this.store = { 12 | resourcesLoaded: false, 13 | } 14 | } 15 | } 16 | 17 | export default WebGLSub 18 | -------------------------------------------------------------------------------- /class/three/World/Cube.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | import WebGL from '@/class/three/WebGL' 4 | import WebGLSub from '@/class/three/WebGLSub' 5 | import vertexShader from '@/class/three/shaders/cube/vertex.glsl' 6 | import fragmentShader from '@/class/three/shaders/cube/fragment.glsl' 7 | 8 | import { EntitiesLayer, EntitiesName } from '@/constants/ENTITIES' 9 | 10 | class Cube extends WebGLSub { 11 | geometry!: THREE.BoxGeometry 12 | material!: THREE.ShaderMaterial 13 | mesh!: THREE.Mesh 14 | 15 | debugFolder: { [key: string]: any } | undefined 16 | colors = ['#ffffff', '#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff'] 17 | params = { 18 | color: this.colors[0], 19 | } 20 | 21 | constructor() { 22 | super() 23 | 24 | this.setGeometry() 25 | this.setMaterial() 26 | this.setMesh() 27 | // this.setLayer() 28 | 29 | // Debug 30 | if (WebGL.debug.active) { 31 | this.debugFolder = WebGL.debug.gui.addFolder('cube') 32 | } 33 | } 34 | 35 | setGeometry() { 36 | this.geometry = new THREE.BoxGeometry(1) 37 | } 38 | 39 | setMaterial() { 40 | this.material = new THREE.ShaderMaterial({ 41 | vertexShader: vertexShader, 42 | fragmentShader: fragmentShader, 43 | uniforms: { 44 | uColor: { value: new THREE.Color(this.params.color) }, 45 | }, 46 | }) 47 | 48 | if (WebGL.debug.active) { 49 | WebGL.debug.gui.add(this.params, 'color', this.colors).onChange((value: string) => { 50 | this.material.uniforms.uColor.value.set(value) 51 | }) 52 | } 53 | } 54 | 55 | setMesh() { 56 | this.mesh = new THREE.Mesh(this.geometry, this.material) 57 | this.mesh.rotation.x = -Math.PI * 0.5 58 | this.mesh.receiveShadow = true 59 | this.mesh.name = EntitiesName.CUBE 60 | WebGL.scene.add(this.mesh) 61 | } 62 | 63 | setLayer() { 64 | this.mesh.layers.set(EntitiesLayer[EntitiesName.CUBE]) 65 | } 66 | 67 | update(deltaTime: number) { 68 | this.mesh.rotation.z += deltaTime * 0.001 69 | } 70 | 71 | destroy() { 72 | WebGL.scene.remove(this.mesh) 73 | this.geometry.dispose() 74 | this.material.dispose() 75 | } 76 | } 77 | 78 | export default Cube 79 | -------------------------------------------------------------------------------- /class/three/World/Environment.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | import WebGL from '@/class/three/WebGL' 4 | import WebGLSub from '@/class/three/WebGLSub' 5 | 6 | class Environment extends WebGLSub { 7 | debugFolder!: { [key: string]: any } 8 | sunLight!: THREE.DirectionalLight 9 | environmentMap: { [key: string]: any } = {} 10 | 11 | constructor() { 12 | super() 13 | 14 | // Debug 15 | if (WebGL.debug.active) this.debugFolder = WebGL.debug.addFolder('environment') 16 | 17 | this.setSunLight() 18 | this.setEnvironmentMap() 19 | } 20 | 21 | setSunLight() { 22 | this.sunLight = new THREE.DirectionalLight('#ffffff', 4) 23 | this.sunLight.castShadow = true 24 | this.sunLight.shadow.camera.far = 15 25 | this.sunLight.shadow.mapSize.set(1024, 1024) 26 | this.sunLight.shadow.normalBias = 0.05 27 | this.sunLight.position.set(3.5, 2, -1.25) 28 | WebGL.scene.add(this.sunLight) 29 | 30 | // Debug 31 | if (WebGL.debug.active) { 32 | this.debugFolder!.add(this.sunLight, 'intensity').name('sunLightIntensity').min(0).max(10).step(0.001) 33 | this.debugFolder!.add(this.sunLight.position, 'x').name('sunLightX').min(-5).max(5).step(0.001) 34 | this.debugFolder!.add(this.sunLight.position, 'y').name('sunLightY').min(-5).max(5).step(0.001) 35 | this.debugFolder!.add(this.sunLight.position, 'z').name('sunLightZ').min(-5).max(5).step(0.001) 36 | } 37 | } 38 | 39 | setEnvironmentMap() { 40 | this.environmentMap.intensity = 0.4 41 | this.environmentMap.texture = WebGL.resources.itemsLoaded['environmentMapTexture'] 42 | this.environmentMap.texture.encoding = THREE.sRGBEncoding 43 | 44 | WebGL.scene.environment = this.environmentMap.texture 45 | 46 | this.environmentMap.updateMaterials = () => { 47 | WebGL.scene.traverse((child) => { 48 | if (child instanceof THREE.Mesh && child.material instanceof THREE.MeshStandardMaterial) { 49 | child.material.envMap = this.environmentMap.texture 50 | child.material.envMapIntensity = this.environmentMap.intensity 51 | child.material.needsUpdate = true 52 | } 53 | }) 54 | } 55 | this.environmentMap.updateMaterials() 56 | 57 | // Debug 58 | if (WebGL.debug.active) { 59 | this.debugFolder 60 | .add(this.environmentMap, 'intensity') 61 | .name('envMapIntensity') 62 | .min(0) 63 | .max(4) 64 | .step(0.001) 65 | .onChange(this.environmentMap.updateMaterials) 66 | } 67 | } 68 | } 69 | 70 | export default Environment 71 | -------------------------------------------------------------------------------- /class/three/World/Floor.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | import WebGL from '@/class/three/WebGL' 4 | import WebGLSub from '@/class/three/WebGLSub' 5 | 6 | import { EntitiesName } from '@/constants/ENTITIES' 7 | 8 | class Floor extends WebGLSub { 9 | geometry!: THREE.CircleGeometry 10 | material!: THREE.MeshStandardMaterial 11 | mesh!: THREE.Mesh 12 | textures: { [key: string]: THREE.Texture } = {} 13 | 14 | constructor() { 15 | super() 16 | 17 | this.setGeometry() 18 | this.setTextures() 19 | this.setMaterial() 20 | this.setMesh() 21 | } 22 | 23 | setGeometry() { 24 | this.geometry = new THREE.CircleGeometry(5, 64) 25 | } 26 | 27 | setTextures() { 28 | this.textures.base = WebGL.resources.itemsLoaded['grassColorTexture'] 29 | this.textures.base.encoding = THREE.sRGBEncoding 30 | this.textures.base.repeat.set(1.5, 1.5) 31 | this.textures.base.wrapS = THREE.RepeatWrapping 32 | this.textures.base.wrapT = THREE.RepeatWrapping 33 | 34 | this.textures.normal = WebGL.resources.itemsLoaded['grassNormalTexture'] 35 | this.textures.normal.repeat.set(1.5, 1.5) 36 | this.textures.normal.wrapS = THREE.RepeatWrapping 37 | this.textures.normal.wrapT = THREE.RepeatWrapping 38 | } 39 | 40 | setMaterial() { 41 | this.material = new THREE.MeshStandardMaterial({ 42 | map: this.textures.base, 43 | normalMap: this.textures.normal, 44 | }) 45 | } 46 | 47 | setMesh() { 48 | this.mesh = new THREE.Mesh(this.geometry, this.material) 49 | this.mesh.rotation.x = -Math.PI * 0.5 50 | this.mesh.name = EntitiesName.FLOOR 51 | this.mesh.receiveShadow = true 52 | WebGL.scene.add(this.mesh) 53 | } 54 | 55 | update() {} 56 | } 57 | 58 | export default Floor 59 | -------------------------------------------------------------------------------- /class/three/World/Fox.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import { GLTF } from 'three/examples/jsm/loaders/GLTFLoader' 3 | 4 | import WebGL from '@/class/three/WebGL' 5 | import WebGLSub from '@/class/three/WebGLSub' 6 | 7 | import { EntitiesName } from '@/constants/ENTITIES' 8 | 9 | class Fox extends WebGLSub { 10 | debugFolder: { [key: string]: any } | undefined 11 | resource: GLTF 12 | model!: THREE.Object3D 13 | animation!: { [key: string]: any } 14 | 15 | constructor() { 16 | super() 17 | 18 | // Debug 19 | if (WebGL.debug.active) this.debugFolder = WebGL.debug.gui.addFolder('fox') 20 | 21 | // Resource 22 | this.resource = WebGL.resources.itemsLoaded['foxModel'] as GLTF 23 | 24 | this.setModel() 25 | this.setAnimation() 26 | } 27 | 28 | setModel() { 29 | this.model = this.resource.scene 30 | this.model.scale.set(0.02, 0.02, 0.02) 31 | this.model.name = EntitiesName.FOX 32 | WebGL.scene.add(this.model) 33 | 34 | this.model.traverse((child) => { 35 | if (child instanceof THREE.Mesh) { 36 | child.castShadow = true 37 | // child.layers.set(EntitiesLayer[EntitiesName.FOX]) 38 | } 39 | }) 40 | } 41 | 42 | setAnimation() { 43 | this.animation = {} 44 | 45 | // Mixer 46 | this.animation.mixer = new THREE.AnimationMixer(this.model) 47 | 48 | // Actions 49 | this.animation.actions = {} 50 | 51 | this.animation.actions.idle = this.animation.mixer.clipAction(this.resource.animations[0]) 52 | this.animation.actions.walking = this.animation.mixer.clipAction(this.resource.animations[1]) 53 | this.animation.actions.running = this.animation.mixer.clipAction(this.resource.animations[2]) 54 | 55 | this.animation.actions.current = this.animation.actions.idle 56 | this.animation.actions.current.play() 57 | 58 | // Play the action 59 | this.animation.play = (name: string) => { 60 | const newAction = this.animation.actions[name] 61 | const oldAction = this.animation.actions.current 62 | 63 | newAction.reset() 64 | newAction.play() 65 | newAction.crossFadeFrom(oldAction, 1) 66 | 67 | this.animation.actions.current = newAction 68 | } 69 | 70 | // Debug 71 | if (WebGL.debug.active) { 72 | this.debugFolder!.add(this.debugParams().animations, 'playIdle') 73 | this.debugFolder!.add(this.debugParams().animations, 'playWalking') 74 | this.debugFolder!.add(this.debugParams().animations, 'playRunning') 75 | } 76 | } 77 | 78 | debugParams() { 79 | return { 80 | animations: { 81 | playIdle: () => { 82 | this.animation.play('idle') 83 | }, 84 | playWalking: () => { 85 | this.animation.play('walking') 86 | }, 87 | playRunning: () => { 88 | this.animation.play('running') 89 | }, 90 | }, 91 | } 92 | } 93 | 94 | update(deltaTime: number) { 95 | this.animation.mixer.update(deltaTime * 0.001) 96 | } 97 | } 98 | 99 | export default Fox 100 | -------------------------------------------------------------------------------- /class/three/World/World.ts: -------------------------------------------------------------------------------- 1 | import WebGL from '@/class/three/WebGL' 2 | import WebGLSub from '@/class/three/WebGLSub' 3 | 4 | import Floor from '@/class/three/World/Floor' 5 | import Fox from '@/class/three/World/Fox' 6 | import Cube from '@/class/three/World/Cube' 7 | import Environment from '@/class/three/World/Environment' 8 | 9 | import { EntitiesLayer } from '@/constants/ENTITIES' 10 | 11 | class World extends WebGLSub { 12 | floor: Floor | null = null 13 | fox: Fox | null = null 14 | cube: Cube | null = null 15 | environment: Environment | null = null 16 | 17 | constructor() { 18 | super() 19 | 20 | // Wait for resources 21 | WebGL.resources.addEventListener('resourcesLoaded', () => this.onResourcesLoaded()) 22 | } 23 | 24 | onResourcesLoaded() { 25 | console.log('Resources loaded') 26 | this.store.resourcesLoaded = true 27 | this.floor = new Floor() 28 | this.fox = new Fox() 29 | this.cube = new Cube() 30 | this.environment = new Environment() 31 | } 32 | 33 | onUpdate() { 34 | const { deltaTime } = WebGL.time 35 | if (!this.store.resourcesLoaded) return 36 | this.fox.update(deltaTime) 37 | this.cube.update(deltaTime) 38 | } 39 | } 40 | 41 | export default World 42 | -------------------------------------------------------------------------------- /class/three/shaders/cube/fragment.glsl: -------------------------------------------------------------------------------- 1 | uniform vec3 uColor; 2 | 3 | void main() { 4 | vec4 color = vec4(uColor, 1.0); 5 | 6 | gl_FragColor = color; 7 | } 8 | -------------------------------------------------------------------------------- /class/three/shaders/cube/vertex.glsl: -------------------------------------------------------------------------------- 1 | void main() { 2 | vec4 modelPosition = modelMatrix * vec4(position, 1.0); 3 | vec4 viewPosition = viewMatrix * modelPosition; 4 | vec4 projectionPosition = projectionMatrix * viewPosition; 5 | 6 | gl_Position = projectionPosition; 7 | } -------------------------------------------------------------------------------- /class/three/utils/Resources.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js' 3 | 4 | import { Source, sources as _sources } from '@/constants/SOURCES' 5 | 6 | class Resources extends THREE.EventDispatcher { 7 | sources: Source[] = _sources 8 | loaders: { 9 | gltfLoader: GLTFLoader 10 | textureLoader: THREE.TextureLoader 11 | cubeTextureLoader: THREE.CubeTextureLoader 12 | } 13 | itemsLoaded: [key: string, value: GLTF | THREE.Texture | THREE.CubeTexture][] = [] 14 | toLoad: number 15 | totalLoaded: number 16 | 17 | constructor() { 18 | super() 19 | 20 | this.loaders = { 21 | gltfLoader: new GLTFLoader(), 22 | textureLoader: new THREE.TextureLoader(), 23 | cubeTextureLoader: new THREE.CubeTextureLoader(), 24 | } 25 | this.itemsLoaded = [] 26 | this.toLoad = this.sources.length 27 | this.totalLoaded = 0 28 | 29 | this.startLoading() 30 | } 31 | 32 | startLoading() { 33 | // Load each source 34 | for (const source of this.sources) { 35 | if (source.type === 'gltfModel') { 36 | this.loaders.gltfLoader.load(source.path as string, (file) => { 37 | this.sourceLoaded(source, file) 38 | }) 39 | } else if (source.type === 'texture') { 40 | this.loaders.textureLoader.load(source.path as string, (file) => { 41 | this.sourceLoaded(source, file) 42 | }) 43 | } else if (source.type === 'cubeTexture') { 44 | this.loaders.cubeTextureLoader.load(source.path as [], (file) => { 45 | this.sourceLoaded(source, file) 46 | }) 47 | } 48 | } 49 | } 50 | 51 | sourceLoaded(source: Source, file: GLTF | THREE.Texture | THREE.CubeTexture) { 52 | this.itemsLoaded[source.name] = file 53 | 54 | this.totalLoaded++ 55 | 56 | if (this.totalLoaded === this.toLoad) { 57 | this.dispatchEvent({ 58 | type: 'resourcesLoaded', 59 | }) 60 | } 61 | } 62 | } 63 | 64 | export default Resources 65 | -------------------------------------------------------------------------------- /class/three/utils/Sizes.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | class Sizes extends THREE.EventDispatcher { 4 | width: number 5 | height: number 6 | pixelRatio: number 7 | aspect: number 8 | 9 | constructor() { 10 | super() 11 | 12 | this.width = window.innerWidth 13 | this.height = window.innerHeight 14 | this.pixelRatio = Math.min(window.devicePixelRatio, 2) 15 | this.aspect = this.width / this.height 16 | 17 | this.setEvents() 18 | } 19 | 20 | setEvents = () => { 21 | window.addEventListener('resize', () => { 22 | this.width = window.innerWidth 23 | this.height = window.innerHeight 24 | this.pixelRatio = Math.min(window.devicePixelRatio, 2) 25 | this.aspect = this.width / this.height 26 | 27 | this.dispatchEvent({ 28 | type: 'resize', 29 | }) 30 | }) 31 | } 32 | } 33 | 34 | export default Sizes 35 | -------------------------------------------------------------------------------- /class/ui/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrieucCaillot/nuxt3-threejs-starter/3c33046e8b17d71df98a0d9699d175a128755c63/class/ui/.gitkeep -------------------------------------------------------------------------------- /components/Header.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 23 | -------------------------------------------------------------------------------- /components/three/Canvas.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | -------------------------------------------------------------------------------- /composables/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrieucCaillot/nuxt3-threejs-starter/3c33046e8b17d71df98a0d9699d175a128755c63/composables/.gitkeep -------------------------------------------------------------------------------- /constants/ENTITIES.ts: -------------------------------------------------------------------------------- 1 | enum EntitiesName { 2 | FOX = 'FOX', 3 | CUBE = 'CUBE', 4 | FLOOR = 'FLOOR', 5 | } 6 | enum EntitiesLayer { 7 | DEFAULT = 0, 8 | FOX = 1, 9 | CUBE = 2, 10 | } 11 | 12 | export { EntitiesName, EntitiesLayer } 13 | -------------------------------------------------------------------------------- /constants/SOURCES.ts: -------------------------------------------------------------------------------- 1 | enum SourceType { 2 | texture = 'texture', 3 | cubeTexture = 'cubeTexture', 4 | gltfModel = 'gltfModel', 5 | } 6 | 7 | interface Source { 8 | name: string 9 | type: SourceType 10 | path: string | string[] 11 | } 12 | 13 | const sources = [ 14 | { 15 | name: 'environmentMapTexture', 16 | type: SourceType.cubeTexture, 17 | path: [ 18 | 'textures/environmentMap/px.jpg', 19 | 'textures/environmentMap/nx.jpg', 20 | 'textures/environmentMap/py.jpg', 21 | 'textures/environmentMap/ny.jpg', 22 | 'textures/environmentMap/pz.jpg', 23 | 'textures/environmentMap/nz.jpg', 24 | ], 25 | }, 26 | { 27 | name: 'grassColorTexture', 28 | type: SourceType.texture, 29 | path: 'textures/dirt/color.jpg', 30 | }, 31 | { 32 | name: 'grassNormalTexture', 33 | type: SourceType.texture, 34 | path: 'textures/dirt/normal.jpg', 35 | }, 36 | { 37 | name: 'foxModel', 38 | type: SourceType.gltfModel, 39 | path: 'models/Fox/glTF/Fox.gltf', 40 | }, 41 | ] 42 | 43 | export { SourceType, Source, sources } 44 | -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /nuxt.config.ts: -------------------------------------------------------------------------------- 1 | import { defineNuxtConfig } from 'nuxt' 2 | import glsl from 'vite-plugin-glsl' 3 | 4 | export default defineNuxtConfig({ 5 | meta: { 6 | link: [ 7 | { 8 | href: 'https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap', 9 | rel: 'stylesheet', 10 | }, 11 | ], 12 | }, 13 | build: { 14 | postcss: { 15 | postcssOptions: require('./postcss.config'), 16 | }, 17 | transpile: ['three', 'gsap'], 18 | }, 19 | vite: { 20 | plugins: [glsl()], 21 | }, 22 | }) 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "build": "nuxt build", 5 | "dev": "nuxt dev", 6 | "generate": "nuxt generate", 7 | "preview": "nuxt preview" 8 | }, 9 | "devDependencies": { 10 | "@types/gsap": "^3.0.0", 11 | "@types/three": "^0.139.0", 12 | "autoprefixer": "^10.4.4", 13 | "lil-gui": "^0.16.1", 14 | "nuxt": "3.0.0-rc.1", 15 | "postcss": "^8.4.12", 16 | "sass": "^1.50.0", 17 | "tailwindcss": "^3.0.24", 18 | "vite-plugin-glsl": "^0.1.2" 19 | }, 20 | "dependencies": { 21 | "gsap": "^3.10.3", 22 | "three": "^0.136.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pages/about.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /plugins/locale.server.ts: -------------------------------------------------------------------------------- 1 | import { defineNuxtPlugin, useState } from '#app' 2 | 3 | export default defineNuxtPlugin((nuxt) => { 4 | const locale = useState('locale', () => nuxt.ssrContext.req.headers['accept-language']?.split(',')[0]) 5 | }) 6 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrieucCaillot/nuxt3-threejs-starter/3c33046e8b17d71df98a0d9699d175a128755c63/public/.gitkeep -------------------------------------------------------------------------------- /public/draco/README.md: -------------------------------------------------------------------------------- 1 | # Draco 3D Data Compression 2 | 3 | Draco is an open-source library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics. 4 | 5 | [Website](https://google.github.io/draco/) | [GitHub](https://github.com/google/draco) 6 | 7 | ## Contents 8 | 9 | This folder contains three utilities: 10 | 11 | * `draco_decoder.js` — Emscripten-compiled decoder, compatible with any modern browser. 12 | * `draco_decoder.wasm` — WebAssembly decoder, compatible with newer browsers and devices. 13 | * `draco_wasm_wrapper.js` — JavaScript wrapper for the WASM decoder. 14 | 15 | Each file is provided in two variations: 16 | 17 | * **Default:** Latest stable builds, tracking the project's [master branch](https://github.com/google/draco). 18 | * **glTF:** Builds targeted by the [glTF mesh compression extension](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression), tracking the [corresponding Draco branch](https://github.com/google/draco/tree/gltf_2.0_draco_extension). 19 | 20 | Either variation may be used with `THREE.DRACOLoader`: 21 | 22 | ```js 23 | var dracoLoader = new THREE.DRACOLoader(); 24 | dracoLoader.setDecoderPath('path/to/decoders/'); 25 | dracoLoader.setDecoderConfig({type: 'js'}); // (Optional) Override detection of WASM support. 26 | ``` 27 | 28 | Further [documentation on GitHub](https://github.com/google/draco/tree/master/javascript/example#static-loading-javascript-decoder). 29 | 30 | ## License 31 | 32 | [Apache License 2.0](https://github.com/google/draco/blob/master/LICENSE) 33 | -------------------------------------------------------------------------------- /public/draco/draco_decoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrieucCaillot/nuxt3-threejs-starter/3c33046e8b17d71df98a0d9699d175a128755c63/public/draco/draco_decoder.wasm -------------------------------------------------------------------------------- /public/draco/draco_wasm_wrapper.js: -------------------------------------------------------------------------------- 1 | var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(f){var m=0;return function(){return m=d);)++b;if(16k?d+=String.fromCharCode(k):(k-=65536,d+=String.fromCharCode(55296|k>>10,56320|k&1023))}}else d+=String.fromCharCode(k)}return d}function X(a,c){return a?h(ca,a,c):""}function e(a,c){0=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++b)&1023);127>=d?++c:c=2047>=d?c+2:65535>=d?c+3:c+4}c=Array(c+1);b=0;d=c.length;if(0=e){var f=a.charCodeAt(++k);e=65536+((e&1023)<<10)|f&1023}if(127>=e){if(b>=d)break;c[b++]=e}else{if(2047>=e){if(b+1>=d)break;c[b++]=192|e>>6}else{if(65535>=e){if(b+2>=d)break;c[b++]=224|e>>12}else{if(b+3>=d)break;c[b++]=240|e>>18;c[b++]=128|e>>12&63}c[b++]=128|e>>6&63}c[b++]=128| 18 | e&63}}c[b]=0}a=n.alloc(c,T);n.copy(c,T,a)}return a}function x(){throw"cannot construct a Status, no constructor in IDL";}function A(){this.ptr=Oa();u(A)[this.ptr]=this}function B(){this.ptr=Pa();u(B)[this.ptr]=this}function C(){this.ptr=Qa();u(C)[this.ptr]=this}function D(){this.ptr=Ra();u(D)[this.ptr]=this}function E(){this.ptr=Sa();u(E)[this.ptr]=this}function q(){this.ptr=Ta();u(q)[this.ptr]=this}function J(){this.ptr=Ua();u(J)[this.ptr]=this}function w(){this.ptr=Va();u(w)[this.ptr]=this}function F(){this.ptr= 19 | Wa();u(F)[this.ptr]=this}function r(){this.ptr=Xa();u(r)[this.ptr]=this}function G(){this.ptr=Ya();u(G)[this.ptr]=this}function H(){this.ptr=Za();u(H)[this.ptr]=this}function O(){this.ptr=$a();u(O)[this.ptr]=this}function K(){this.ptr=ab();u(K)[this.ptr]=this}function g(){this.ptr=bb();u(g)[this.ptr]=this}function y(){this.ptr=cb();u(y)[this.ptr]=this}function Q(){throw"cannot construct a VoidPtr, no constructor in IDL";}function I(){this.ptr=db();u(I)[this.ptr]=this}function L(){this.ptr=eb();u(L)[this.ptr]= 20 | this}m=m||{};var a="undefined"!==typeof m?m:{},Ga=!1,Ha=!1;a.onRuntimeInitialized=function(){Ga=!0;if(Ha&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Ha=!0;if(Ga&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(a){if("string"!==typeof a)return!1;a=a.split(".");return 2>a.length||3=a[1]?!0:0!=a[0]||10>2]},getStr:function(){return X(R.get())}, 26 | get64:function(){var a=R.get();R.get();return a},getZero:function(){R.get()}},Ka={__cxa_allocate_exception:function(a){return ib(a)},__cxa_throw:function(a,c,b){"uncaught_exception"in ta?ta.uncaught_exceptions++:ta.uncaught_exceptions=1;throw a;},abort:function(){z()},emscripten_get_sbrk_ptr:function(){return 18416},emscripten_memcpy_big:function(a,c,b){ca.set(ca.subarray(c,c+b),a)},emscripten_resize_heap:function(a){if(2147418112= 27 | c?e(2*c,65536):Math.min(e((3*c+2147483648)/4,65536),2147418112);a:{try{ia.grow(c-ka.byteLength+65535>>16);l(ia.buffer);var b=1;break a}catch(d){}b=void 0}return b?!0:!1},environ_get:function(a,c){var b=0;ba().forEach(function(d,e){var f=c+b;e=P[a+4*e>>2]=f;for(f=0;f>0]=d.charCodeAt(f);T[e>>0]=0;b+=d.length+1});return 0},environ_sizes_get:function(a,c){var b=ba();P[a>>2]=b.length;var d=0;b.forEach(function(a){d+=a.length+1});P[c>>2]=d;return 0},fd_close:function(a){return 0},fd_seek:function(a, 28 | c,b,d,e){return 0},fd_write:function(a,c,b,d){try{for(var e=0,f=0;f>2],k=P[c+(8*f+4)>>2],h=0;h>2]=e;return 0}catch(ua){return"undefined"!==typeof FS&&ua instanceof FS.ErrnoError||z(ua),ua.errno}},memory:ia,setTempRet0:function(a){},table:gb},La=function(){function e(c,b){a.asm=c.exports;aa--;a.monitorRunDependencies&&a.monitorRunDependencies(aa);0==aa&&(null!==sa&&(clearInterval(sa),sa=null),ja&&(c=ja,ja=null,c()))}function c(a){e(a.instance)} 29 | function b(a){return Ma().then(function(a){return WebAssembly.instantiate(a,d)}).then(a,function(a){Y("failed to asynchronously prepare wasm: "+a);z(a)})}var d={env:Ka,wasi_unstable:Ka};aa++;a.monitorRunDependencies&&a.monitorRunDependencies(aa);if(a.instantiateWasm)try{return a.instantiateWasm(d,e)}catch(Na){return Y("Module.instantiateWasm callback failed with error: "+Na),!1}(function(){if(da||"function"!==typeof WebAssembly.instantiateStreaming||va(U)||"function"!==typeof fetch)return b(c);fetch(U, 30 | {credentials:"same-origin"}).then(function(a){return WebAssembly.instantiateStreaming(a,d).then(c,function(a){Y("wasm streaming compile failed: "+a);Y("falling back to ArrayBuffer instantiation");b(c)})})})();return{}}();a.asm=La;var hb=a.___wasm_call_ctors=function(){return a.asm.__wasm_call_ctors.apply(null,arguments)},jb=a._emscripten_bind_Status_code_0=function(){return a.asm.emscripten_bind_Status_code_0.apply(null,arguments)},kb=a._emscripten_bind_Status_ok_0=function(){return a.asm.emscripten_bind_Status_ok_0.apply(null, 31 | arguments)},lb=a._emscripten_bind_Status_error_msg_0=function(){return a.asm.emscripten_bind_Status_error_msg_0.apply(null,arguments)},mb=a._emscripten_bind_Status___destroy___0=function(){return a.asm.emscripten_bind_Status___destroy___0.apply(null,arguments)},Oa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return a.asm.emscripten_bind_DracoUInt16Array_DracoUInt16Array_0.apply(null,arguments)},nb=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoUInt16Array_GetValue_1.apply(null, 32 | arguments)},ob=a._emscripten_bind_DracoUInt16Array_size_0=function(){return a.asm.emscripten_bind_DracoUInt16Array_size_0.apply(null,arguments)},pb=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return a.asm.emscripten_bind_DracoUInt16Array___destroy___0.apply(null,arguments)},Pa=a._emscripten_bind_PointCloud_PointCloud_0=function(){return a.asm.emscripten_bind_PointCloud_PointCloud_0.apply(null,arguments)},qb=a._emscripten_bind_PointCloud_num_attributes_0=function(){return a.asm.emscripten_bind_PointCloud_num_attributes_0.apply(null, 33 | arguments)},rb=a._emscripten_bind_PointCloud_num_points_0=function(){return a.asm.emscripten_bind_PointCloud_num_points_0.apply(null,arguments)},sb=a._emscripten_bind_PointCloud___destroy___0=function(){return a.asm.emscripten_bind_PointCloud___destroy___0.apply(null,arguments)},Qa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return a.asm.emscripten_bind_DracoUInt8Array_DracoUInt8Array_0.apply(null,arguments)},tb=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoUInt8Array_GetValue_1.apply(null, 34 | arguments)},ub=a._emscripten_bind_DracoUInt8Array_size_0=function(){return a.asm.emscripten_bind_DracoUInt8Array_size_0.apply(null,arguments)},vb=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return a.asm.emscripten_bind_DracoUInt8Array___destroy___0.apply(null,arguments)},Ra=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return a.asm.emscripten_bind_DracoUInt32Array_DracoUInt32Array_0.apply(null,arguments)},wb=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoUInt32Array_GetValue_1.apply(null, 35 | arguments)},xb=a._emscripten_bind_DracoUInt32Array_size_0=function(){return a.asm.emscripten_bind_DracoUInt32Array_size_0.apply(null,arguments)},yb=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return a.asm.emscripten_bind_DracoUInt32Array___destroy___0.apply(null,arguments)},Sa=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return a.asm.emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0.apply(null,arguments)},zb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1= 36 | function(){return a.asm.emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1.apply(null,arguments)},Ab=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return a.asm.emscripten_bind_AttributeOctahedronTransform_quantization_bits_0.apply(null,arguments)},Bb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return a.asm.emscripten_bind_AttributeOctahedronTransform___destroy___0.apply(null,arguments)},Ta=a._emscripten_bind_PointAttribute_PointAttribute_0= 37 | function(){return a.asm.emscripten_bind_PointAttribute_PointAttribute_0.apply(null,arguments)},Cb=a._emscripten_bind_PointAttribute_size_0=function(){return a.asm.emscripten_bind_PointAttribute_size_0.apply(null,arguments)},Db=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return a.asm.emscripten_bind_PointAttribute_GetAttributeTransformData_0.apply(null,arguments)},Eb=a._emscripten_bind_PointAttribute_attribute_type_0=function(){return a.asm.emscripten_bind_PointAttribute_attribute_type_0.apply(null, 38 | arguments)},Fb=a._emscripten_bind_PointAttribute_data_type_0=function(){return a.asm.emscripten_bind_PointAttribute_data_type_0.apply(null,arguments)},Gb=a._emscripten_bind_PointAttribute_num_components_0=function(){return a.asm.emscripten_bind_PointAttribute_num_components_0.apply(null,arguments)},Hb=a._emscripten_bind_PointAttribute_normalized_0=function(){return a.asm.emscripten_bind_PointAttribute_normalized_0.apply(null,arguments)},Ib=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return a.asm.emscripten_bind_PointAttribute_byte_stride_0.apply(null, 39 | arguments)},Jb=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return a.asm.emscripten_bind_PointAttribute_byte_offset_0.apply(null,arguments)},Kb=a._emscripten_bind_PointAttribute_unique_id_0=function(){return a.asm.emscripten_bind_PointAttribute_unique_id_0.apply(null,arguments)},Lb=a._emscripten_bind_PointAttribute___destroy___0=function(){return a.asm.emscripten_bind_PointAttribute___destroy___0.apply(null,arguments)},Ua=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0= 40 | function(){return a.asm.emscripten_bind_AttributeTransformData_AttributeTransformData_0.apply(null,arguments)},Mb=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return a.asm.emscripten_bind_AttributeTransformData_transform_type_0.apply(null,arguments)},Nb=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return a.asm.emscripten_bind_AttributeTransformData___destroy___0.apply(null,arguments)},Va=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0= 41 | function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0.apply(null,arguments)},Ob=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1.apply(null,arguments)},Pb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_quantization_bits_0.apply(null,arguments)}, 42 | Qb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_min_value_1.apply(null,arguments)},Rb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_range_0.apply(null,arguments)},Sb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform___destroy___0.apply(null,arguments)}, 43 | Wa=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return a.asm.emscripten_bind_DracoInt8Array_DracoInt8Array_0.apply(null,arguments)},Tb=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoInt8Array_GetValue_1.apply(null,arguments)},Ub=a._emscripten_bind_DracoInt8Array_size_0=function(){return a.asm.emscripten_bind_DracoInt8Array_size_0.apply(null,arguments)},Vb=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return a.asm.emscripten_bind_DracoInt8Array___destroy___0.apply(null, 44 | arguments)},Xa=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return a.asm.emscripten_bind_MetadataQuerier_MetadataQuerier_0.apply(null,arguments)},Wb=a._emscripten_bind_MetadataQuerier_HasEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_HasEntry_2.apply(null,arguments)},Xb=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetIntEntry_2.apply(null,arguments)},Yb=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3= 45 | function(){return a.asm.emscripten_bind_MetadataQuerier_GetIntEntryArray_3.apply(null,arguments)},Zb=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetDoubleEntry_2.apply(null,arguments)},$b=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetStringEntry_2.apply(null,arguments)},ac=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return a.asm.emscripten_bind_MetadataQuerier_NumEntries_1.apply(null, 46 | arguments)},bc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetEntryName_2.apply(null,arguments)},cc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return a.asm.emscripten_bind_MetadataQuerier___destroy___0.apply(null,arguments)},Ya=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return a.asm.emscripten_bind_DracoInt16Array_DracoInt16Array_0.apply(null,arguments)},dc=a._emscripten_bind_DracoInt16Array_GetValue_1= 47 | function(){return a.asm.emscripten_bind_DracoInt16Array_GetValue_1.apply(null,arguments)},ec=a._emscripten_bind_DracoInt16Array_size_0=function(){return a.asm.emscripten_bind_DracoInt16Array_size_0.apply(null,arguments)},fc=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return a.asm.emscripten_bind_DracoInt16Array___destroy___0.apply(null,arguments)},Za=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return a.asm.emscripten_bind_DracoFloat32Array_DracoFloat32Array_0.apply(null, 48 | arguments)},gc=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoFloat32Array_GetValue_1.apply(null,arguments)},hc=a._emscripten_bind_DracoFloat32Array_size_0=function(){return a.asm.emscripten_bind_DracoFloat32Array_size_0.apply(null,arguments)},ic=a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return a.asm.emscripten_bind_DracoFloat32Array___destroy___0.apply(null,arguments)},$a=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return a.asm.emscripten_bind_GeometryAttribute_GeometryAttribute_0.apply(null, 49 | arguments)},jc=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return a.asm.emscripten_bind_GeometryAttribute___destroy___0.apply(null,arguments)},ab=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return a.asm.emscripten_bind_DecoderBuffer_DecoderBuffer_0.apply(null,arguments)},kc=a._emscripten_bind_DecoderBuffer_Init_2=function(){return a.asm.emscripten_bind_DecoderBuffer_Init_2.apply(null,arguments)},lc=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return a.asm.emscripten_bind_DecoderBuffer___destroy___0.apply(null, 50 | arguments)},bb=a._emscripten_bind_Decoder_Decoder_0=function(){return a.asm.emscripten_bind_Decoder_Decoder_0.apply(null,arguments)},mc=a._emscripten_bind_Decoder_GetEncodedGeometryType_1=function(){return a.asm.emscripten_bind_Decoder_GetEncodedGeometryType_1.apply(null,arguments)},nc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return a.asm.emscripten_bind_Decoder_DecodeBufferToPointCloud_2.apply(null,arguments)},oc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return a.asm.emscripten_bind_Decoder_DecodeBufferToMesh_2.apply(null, 51 | arguments)},pc=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeId_2.apply(null,arguments)},qc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeIdByName_2.apply(null,arguments)},rc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3.apply(null,arguments)},sc=a._emscripten_bind_Decoder_GetAttribute_2= 52 | function(){return a.asm.emscripten_bind_Decoder_GetAttribute_2.apply(null,arguments)},tc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeByUniqueId_2.apply(null,arguments)},uc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return a.asm.emscripten_bind_Decoder_GetMetadata_1.apply(null,arguments)},vc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeMetadata_2.apply(null, 53 | arguments)},wc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return a.asm.emscripten_bind_Decoder_GetFaceFromMesh_3.apply(null,arguments)},xc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return a.asm.emscripten_bind_Decoder_GetTriangleStripsFromMesh_2.apply(null,arguments)},yc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=function(){return a.asm.emscripten_bind_Decoder_GetTrianglesUInt16Array_3.apply(null,arguments)},zc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3= 54 | function(){return a.asm.emscripten_bind_Decoder_GetTrianglesUInt32Array_3.apply(null,arguments)},Ac=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeFloat_3.apply(null,arguments)},Bc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3.apply(null,arguments)},Cc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeIntForAllPoints_3.apply(null, 55 | arguments)},Dc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3.apply(null,arguments)},Ec=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3.apply(null,arguments)},Fc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3.apply(null,arguments)}, 56 | Gc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3.apply(null,arguments)},Hc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3.apply(null,arguments)},Ic=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3.apply(null,arguments)},Jc= 57 | a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=function(){return a.asm.emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5.apply(null,arguments)},Kc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return a.asm.emscripten_bind_Decoder_SkipAttributeTransform_1.apply(null,arguments)},Lc=a._emscripten_bind_Decoder___destroy___0=function(){return a.asm.emscripten_bind_Decoder___destroy___0.apply(null,arguments)},cb=a._emscripten_bind_Mesh_Mesh_0=function(){return a.asm.emscripten_bind_Mesh_Mesh_0.apply(null, 58 | arguments)},Mc=a._emscripten_bind_Mesh_num_faces_0=function(){return a.asm.emscripten_bind_Mesh_num_faces_0.apply(null,arguments)},Nc=a._emscripten_bind_Mesh_num_attributes_0=function(){return a.asm.emscripten_bind_Mesh_num_attributes_0.apply(null,arguments)},Oc=a._emscripten_bind_Mesh_num_points_0=function(){return a.asm.emscripten_bind_Mesh_num_points_0.apply(null,arguments)},Pc=a._emscripten_bind_Mesh___destroy___0=function(){return a.asm.emscripten_bind_Mesh___destroy___0.apply(null,arguments)}, 59 | Qc=a._emscripten_bind_VoidPtr___destroy___0=function(){return a.asm.emscripten_bind_VoidPtr___destroy___0.apply(null,arguments)},db=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return a.asm.emscripten_bind_DracoInt32Array_DracoInt32Array_0.apply(null,arguments)},Rc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoInt32Array_GetValue_1.apply(null,arguments)},Sc=a._emscripten_bind_DracoInt32Array_size_0=function(){return a.asm.emscripten_bind_DracoInt32Array_size_0.apply(null, 60 | arguments)},Tc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return a.asm.emscripten_bind_DracoInt32Array___destroy___0.apply(null,arguments)},eb=a._emscripten_bind_Metadata_Metadata_0=function(){return a.asm.emscripten_bind_Metadata_Metadata_0.apply(null,arguments)},Uc=a._emscripten_bind_Metadata___destroy___0=function(){return a.asm.emscripten_bind_Metadata___destroy___0.apply(null,arguments)},Vc=a._emscripten_enum_draco_StatusCode_OK=function(){return a.asm.emscripten_enum_draco_StatusCode_OK.apply(null, 61 | arguments)},Wc=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=function(){return a.asm.emscripten_enum_draco_StatusCode_DRACO_ERROR.apply(null,arguments)},Xc=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return a.asm.emscripten_enum_draco_StatusCode_IO_ERROR.apply(null,arguments)},Yc=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return a.asm.emscripten_enum_draco_StatusCode_INVALID_PARAMETER.apply(null,arguments)},Zc=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION= 62 | function(){return a.asm.emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION.apply(null,arguments)},$c=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return a.asm.emscripten_enum_draco_StatusCode_UNKNOWN_VERSION.apply(null,arguments)},ad=a._emscripten_enum_draco_DataType_DT_INVALID=function(){return a.asm.emscripten_enum_draco_DataType_DT_INVALID.apply(null,arguments)},bd=a._emscripten_enum_draco_DataType_DT_INT8=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT8.apply(null, 63 | arguments)},cd=a._emscripten_enum_draco_DataType_DT_UINT8=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT8.apply(null,arguments)},dd=a._emscripten_enum_draco_DataType_DT_INT16=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT16.apply(null,arguments)},ed=a._emscripten_enum_draco_DataType_DT_UINT16=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT16.apply(null,arguments)},fd=a._emscripten_enum_draco_DataType_DT_INT32=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT32.apply(null, 64 | arguments)},gd=a._emscripten_enum_draco_DataType_DT_UINT32=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT32.apply(null,arguments)},hd=a._emscripten_enum_draco_DataType_DT_INT64=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT64.apply(null,arguments)},id=a._emscripten_enum_draco_DataType_DT_UINT64=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT64.apply(null,arguments)},jd=a._emscripten_enum_draco_DataType_DT_FLOAT32=function(){return a.asm.emscripten_enum_draco_DataType_DT_FLOAT32.apply(null, 65 | arguments)},kd=a._emscripten_enum_draco_DataType_DT_FLOAT64=function(){return a.asm.emscripten_enum_draco_DataType_DT_FLOAT64.apply(null,arguments)},ld=a._emscripten_enum_draco_DataType_DT_BOOL=function(){return a.asm.emscripten_enum_draco_DataType_DT_BOOL.apply(null,arguments)},md=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=function(){return a.asm.emscripten_enum_draco_DataType_DT_TYPES_COUNT.apply(null,arguments)},nd=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return a.asm.emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE.apply(null, 66 | arguments)},od=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return a.asm.emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD.apply(null,arguments)},pd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return a.asm.emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH.apply(null,arguments)},qd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM.apply(null, 67 | arguments)},rd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM.apply(null,arguments)},sd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM.apply(null,arguments)},td=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM.apply(null, 68 | arguments)},ud=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_INVALID.apply(null,arguments)},vd=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_POSITION.apply(null,arguments)},wd=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_NORMAL.apply(null,arguments)},xd=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR= 69 | function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_COLOR.apply(null,arguments)},yd=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD.apply(null,arguments)},zd=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_GENERIC.apply(null,arguments)};a._setThrew=function(){return a.asm.setThrew.apply(null,arguments)};var ta=a.__ZSt18uncaught_exceptionv= 70 | function(){return a.asm._ZSt18uncaught_exceptionv.apply(null,arguments)};a._free=function(){return a.asm.free.apply(null,arguments)};var ib=a._malloc=function(){return a.asm.malloc.apply(null,arguments)};a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)};a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)};a.__growWasmMemory=function(){return a.asm.__growWasmMemory.apply(null,arguments)}; 71 | a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)};a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)};a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)};a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)};a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)};a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)};a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)}; 72 | a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)};a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)};a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)};a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)};a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)};a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)};a.asm=La;var fa;a.then=function(e){if(fa)e(a); 73 | else{var c=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){c&&c();e(a)}}return a};ja=function c(){fa||ma();fa||(ja=c)};a.run=ma;if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0=n.size?(t(0>=1;break;case 4:d>>=2;break;case 8:d>>=3}for(var c=0;c=d);)++b;if(16k?d+=String.fromCharCode(k):(k-=65536,d+=String.fromCharCode(55296|k>>10,56320|k&1023))}}else d+=String.fromCharCode(k)}return d}function X(a,c){return a?h(ca,a,c):""}function e(a,c){0=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++b)&1023);127>=d?++c:c=2047>=d?c+2:65535>=d?c+3:c+4}c=Array(c+1);b=0;d=c.length;if(0=e){var f=a.charCodeAt(++k);e=65536+((e&1023)<<10)|f&1023}if(127>=e){if(b>=d)break;c[b++]=e}else{if(2047>=e){if(b+1>=d)break;c[b++]=192|e>>6}else{if(65535>=e){if(b+2>=d)break;c[b++]=224|e>>12}else{if(b+3>=d)break;c[b++]=240|e>>18;c[b++]=128|e>>12&63}c[b++]=128|e>>6&63}c[b++]=128| 18 | e&63}}c[b]=0}a=n.alloc(c,T);n.copy(c,T,a)}return a}function x(){throw"cannot construct a Status, no constructor in IDL";}function A(){this.ptr=Oa();u(A)[this.ptr]=this}function B(){this.ptr=Pa();u(B)[this.ptr]=this}function C(){this.ptr=Qa();u(C)[this.ptr]=this}function D(){this.ptr=Ra();u(D)[this.ptr]=this}function E(){this.ptr=Sa();u(E)[this.ptr]=this}function q(){this.ptr=Ta();u(q)[this.ptr]=this}function J(){this.ptr=Ua();u(J)[this.ptr]=this}function w(){this.ptr=Va();u(w)[this.ptr]=this}function F(){this.ptr= 19 | Wa();u(F)[this.ptr]=this}function r(){this.ptr=Xa();u(r)[this.ptr]=this}function G(){this.ptr=Ya();u(G)[this.ptr]=this}function H(){this.ptr=Za();u(H)[this.ptr]=this}function O(){this.ptr=$a();u(O)[this.ptr]=this}function K(){this.ptr=ab();u(K)[this.ptr]=this}function g(){this.ptr=bb();u(g)[this.ptr]=this}function y(){this.ptr=cb();u(y)[this.ptr]=this}function Q(){throw"cannot construct a VoidPtr, no constructor in IDL";}function I(){this.ptr=db();u(I)[this.ptr]=this}function L(){this.ptr=eb();u(L)[this.ptr]= 20 | this}m=m||{};var a="undefined"!==typeof m?m:{},Ga=!1,Ha=!1;a.onRuntimeInitialized=function(){Ga=!0;if(Ha&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Ha=!0;if(Ga&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(a){if("string"!==typeof a)return!1;a=a.split(".");return 2>a.length||3=a[1]?!0:0!=a[0]||10>2]},getStr:function(){return X(R.get())}, 26 | get64:function(){var a=R.get();R.get();return a},getZero:function(){R.get()}},Ka={__cxa_allocate_exception:function(a){return ib(a)},__cxa_throw:function(a,c,b){"uncaught_exception"in ta?ta.uncaught_exceptions++:ta.uncaught_exceptions=1;throw a;},abort:function(){z()},emscripten_get_sbrk_ptr:function(){return 13664},emscripten_memcpy_big:function(a,c,b){ca.set(ca.subarray(c,c+b),a)},emscripten_resize_heap:function(a){if(2147418112= 27 | c?e(2*c,65536):Math.min(e((3*c+2147483648)/4,65536),2147418112);a:{try{ia.grow(c-ka.byteLength+65535>>16);l(ia.buffer);var b=1;break a}catch(d){}b=void 0}return b?!0:!1},environ_get:function(a,c){var b=0;ba().forEach(function(d,e){var f=c+b;e=P[a+4*e>>2]=f;for(f=0;f>0]=d.charCodeAt(f);T[e>>0]=0;b+=d.length+1});return 0},environ_sizes_get:function(a,c){var b=ba();P[a>>2]=b.length;var d=0;b.forEach(function(a){d+=a.length+1});P[c>>2]=d;return 0},fd_close:function(a){return 0},fd_seek:function(a, 28 | c,b,d,e){return 0},fd_write:function(a,c,b,d){try{for(var e=0,f=0;f>2],k=P[c+(8*f+4)>>2],h=0;h>2]=e;return 0}catch(ua){return"undefined"!==typeof FS&&ua instanceof FS.ErrnoError||z(ua),ua.errno}},memory:ia,setTempRet0:function(a){},table:gb},La=function(){function e(c,b){a.asm=c.exports;aa--;a.monitorRunDependencies&&a.monitorRunDependencies(aa);0==aa&&(null!==sa&&(clearInterval(sa),sa=null),ja&&(c=ja,ja=null,c()))}function c(a){e(a.instance)} 29 | function b(a){return Ma().then(function(a){return WebAssembly.instantiate(a,d)}).then(a,function(a){Y("failed to asynchronously prepare wasm: "+a);z(a)})}var d={env:Ka,wasi_unstable:Ka};aa++;a.monitorRunDependencies&&a.monitorRunDependencies(aa);if(a.instantiateWasm)try{return a.instantiateWasm(d,e)}catch(Na){return Y("Module.instantiateWasm callback failed with error: "+Na),!1}(function(){if(da||"function"!==typeof WebAssembly.instantiateStreaming||va(U)||"function"!==typeof fetch)return b(c);fetch(U, 30 | {credentials:"same-origin"}).then(function(a){return WebAssembly.instantiateStreaming(a,d).then(c,function(a){Y("wasm streaming compile failed: "+a);Y("falling back to ArrayBuffer instantiation");b(c)})})})();return{}}();a.asm=La;var hb=a.___wasm_call_ctors=function(){return a.asm.__wasm_call_ctors.apply(null,arguments)},jb=a._emscripten_bind_Status_code_0=function(){return a.asm.emscripten_bind_Status_code_0.apply(null,arguments)},kb=a._emscripten_bind_Status_ok_0=function(){return a.asm.emscripten_bind_Status_ok_0.apply(null, 31 | arguments)},lb=a._emscripten_bind_Status_error_msg_0=function(){return a.asm.emscripten_bind_Status_error_msg_0.apply(null,arguments)},mb=a._emscripten_bind_Status___destroy___0=function(){return a.asm.emscripten_bind_Status___destroy___0.apply(null,arguments)},Oa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return a.asm.emscripten_bind_DracoUInt16Array_DracoUInt16Array_0.apply(null,arguments)},nb=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoUInt16Array_GetValue_1.apply(null, 32 | arguments)},ob=a._emscripten_bind_DracoUInt16Array_size_0=function(){return a.asm.emscripten_bind_DracoUInt16Array_size_0.apply(null,arguments)},pb=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return a.asm.emscripten_bind_DracoUInt16Array___destroy___0.apply(null,arguments)},Pa=a._emscripten_bind_PointCloud_PointCloud_0=function(){return a.asm.emscripten_bind_PointCloud_PointCloud_0.apply(null,arguments)},qb=a._emscripten_bind_PointCloud_num_attributes_0=function(){return a.asm.emscripten_bind_PointCloud_num_attributes_0.apply(null, 33 | arguments)},rb=a._emscripten_bind_PointCloud_num_points_0=function(){return a.asm.emscripten_bind_PointCloud_num_points_0.apply(null,arguments)},sb=a._emscripten_bind_PointCloud___destroy___0=function(){return a.asm.emscripten_bind_PointCloud___destroy___0.apply(null,arguments)},Qa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return a.asm.emscripten_bind_DracoUInt8Array_DracoUInt8Array_0.apply(null,arguments)},tb=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoUInt8Array_GetValue_1.apply(null, 34 | arguments)},ub=a._emscripten_bind_DracoUInt8Array_size_0=function(){return a.asm.emscripten_bind_DracoUInt8Array_size_0.apply(null,arguments)},vb=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return a.asm.emscripten_bind_DracoUInt8Array___destroy___0.apply(null,arguments)},Ra=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return a.asm.emscripten_bind_DracoUInt32Array_DracoUInt32Array_0.apply(null,arguments)},wb=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoUInt32Array_GetValue_1.apply(null, 35 | arguments)},xb=a._emscripten_bind_DracoUInt32Array_size_0=function(){return a.asm.emscripten_bind_DracoUInt32Array_size_0.apply(null,arguments)},yb=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return a.asm.emscripten_bind_DracoUInt32Array___destroy___0.apply(null,arguments)},Sa=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return a.asm.emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0.apply(null,arguments)},zb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1= 36 | function(){return a.asm.emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1.apply(null,arguments)},Ab=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return a.asm.emscripten_bind_AttributeOctahedronTransform_quantization_bits_0.apply(null,arguments)},Bb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return a.asm.emscripten_bind_AttributeOctahedronTransform___destroy___0.apply(null,arguments)},Ta=a._emscripten_bind_PointAttribute_PointAttribute_0= 37 | function(){return a.asm.emscripten_bind_PointAttribute_PointAttribute_0.apply(null,arguments)},Cb=a._emscripten_bind_PointAttribute_size_0=function(){return a.asm.emscripten_bind_PointAttribute_size_0.apply(null,arguments)},Db=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return a.asm.emscripten_bind_PointAttribute_GetAttributeTransformData_0.apply(null,arguments)},Eb=a._emscripten_bind_PointAttribute_attribute_type_0=function(){return a.asm.emscripten_bind_PointAttribute_attribute_type_0.apply(null, 38 | arguments)},Fb=a._emscripten_bind_PointAttribute_data_type_0=function(){return a.asm.emscripten_bind_PointAttribute_data_type_0.apply(null,arguments)},Gb=a._emscripten_bind_PointAttribute_num_components_0=function(){return a.asm.emscripten_bind_PointAttribute_num_components_0.apply(null,arguments)},Hb=a._emscripten_bind_PointAttribute_normalized_0=function(){return a.asm.emscripten_bind_PointAttribute_normalized_0.apply(null,arguments)},Ib=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return a.asm.emscripten_bind_PointAttribute_byte_stride_0.apply(null, 39 | arguments)},Jb=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return a.asm.emscripten_bind_PointAttribute_byte_offset_0.apply(null,arguments)},Kb=a._emscripten_bind_PointAttribute_unique_id_0=function(){return a.asm.emscripten_bind_PointAttribute_unique_id_0.apply(null,arguments)},Lb=a._emscripten_bind_PointAttribute___destroy___0=function(){return a.asm.emscripten_bind_PointAttribute___destroy___0.apply(null,arguments)},Ua=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0= 40 | function(){return a.asm.emscripten_bind_AttributeTransformData_AttributeTransformData_0.apply(null,arguments)},Mb=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return a.asm.emscripten_bind_AttributeTransformData_transform_type_0.apply(null,arguments)},Nb=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return a.asm.emscripten_bind_AttributeTransformData___destroy___0.apply(null,arguments)},Va=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0= 41 | function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0.apply(null,arguments)},Ob=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1.apply(null,arguments)},Pb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_quantization_bits_0.apply(null,arguments)}, 42 | Qb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_min_value_1.apply(null,arguments)},Rb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform_range_0.apply(null,arguments)},Sb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return a.asm.emscripten_bind_AttributeQuantizationTransform___destroy___0.apply(null,arguments)}, 43 | Wa=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return a.asm.emscripten_bind_DracoInt8Array_DracoInt8Array_0.apply(null,arguments)},Tb=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoInt8Array_GetValue_1.apply(null,arguments)},Ub=a._emscripten_bind_DracoInt8Array_size_0=function(){return a.asm.emscripten_bind_DracoInt8Array_size_0.apply(null,arguments)},Vb=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return a.asm.emscripten_bind_DracoInt8Array___destroy___0.apply(null, 44 | arguments)},Xa=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return a.asm.emscripten_bind_MetadataQuerier_MetadataQuerier_0.apply(null,arguments)},Wb=a._emscripten_bind_MetadataQuerier_HasEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_HasEntry_2.apply(null,arguments)},Xb=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetIntEntry_2.apply(null,arguments)},Yb=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3= 45 | function(){return a.asm.emscripten_bind_MetadataQuerier_GetIntEntryArray_3.apply(null,arguments)},Zb=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetDoubleEntry_2.apply(null,arguments)},$b=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetStringEntry_2.apply(null,arguments)},ac=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return a.asm.emscripten_bind_MetadataQuerier_NumEntries_1.apply(null, 46 | arguments)},bc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return a.asm.emscripten_bind_MetadataQuerier_GetEntryName_2.apply(null,arguments)},cc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return a.asm.emscripten_bind_MetadataQuerier___destroy___0.apply(null,arguments)},Ya=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return a.asm.emscripten_bind_DracoInt16Array_DracoInt16Array_0.apply(null,arguments)},dc=a._emscripten_bind_DracoInt16Array_GetValue_1= 47 | function(){return a.asm.emscripten_bind_DracoInt16Array_GetValue_1.apply(null,arguments)},ec=a._emscripten_bind_DracoInt16Array_size_0=function(){return a.asm.emscripten_bind_DracoInt16Array_size_0.apply(null,arguments)},fc=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return a.asm.emscripten_bind_DracoInt16Array___destroy___0.apply(null,arguments)},Za=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return a.asm.emscripten_bind_DracoFloat32Array_DracoFloat32Array_0.apply(null, 48 | arguments)},gc=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoFloat32Array_GetValue_1.apply(null,arguments)},hc=a._emscripten_bind_DracoFloat32Array_size_0=function(){return a.asm.emscripten_bind_DracoFloat32Array_size_0.apply(null,arguments)},ic=a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return a.asm.emscripten_bind_DracoFloat32Array___destroy___0.apply(null,arguments)},$a=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return a.asm.emscripten_bind_GeometryAttribute_GeometryAttribute_0.apply(null, 49 | arguments)},jc=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return a.asm.emscripten_bind_GeometryAttribute___destroy___0.apply(null,arguments)},ab=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return a.asm.emscripten_bind_DecoderBuffer_DecoderBuffer_0.apply(null,arguments)},kc=a._emscripten_bind_DecoderBuffer_Init_2=function(){return a.asm.emscripten_bind_DecoderBuffer_Init_2.apply(null,arguments)},lc=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return a.asm.emscripten_bind_DecoderBuffer___destroy___0.apply(null, 50 | arguments)},bb=a._emscripten_bind_Decoder_Decoder_0=function(){return a.asm.emscripten_bind_Decoder_Decoder_0.apply(null,arguments)},mc=a._emscripten_bind_Decoder_GetEncodedGeometryType_1=function(){return a.asm.emscripten_bind_Decoder_GetEncodedGeometryType_1.apply(null,arguments)},nc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return a.asm.emscripten_bind_Decoder_DecodeBufferToPointCloud_2.apply(null,arguments)},oc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return a.asm.emscripten_bind_Decoder_DecodeBufferToMesh_2.apply(null, 51 | arguments)},pc=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeId_2.apply(null,arguments)},qc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeIdByName_2.apply(null,arguments)},rc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3.apply(null,arguments)},sc=a._emscripten_bind_Decoder_GetAttribute_2= 52 | function(){return a.asm.emscripten_bind_Decoder_GetAttribute_2.apply(null,arguments)},tc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeByUniqueId_2.apply(null,arguments)},uc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return a.asm.emscripten_bind_Decoder_GetMetadata_1.apply(null,arguments)},vc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return a.asm.emscripten_bind_Decoder_GetAttributeMetadata_2.apply(null, 53 | arguments)},wc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return a.asm.emscripten_bind_Decoder_GetFaceFromMesh_3.apply(null,arguments)},xc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return a.asm.emscripten_bind_Decoder_GetTriangleStripsFromMesh_2.apply(null,arguments)},yc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=function(){return a.asm.emscripten_bind_Decoder_GetTrianglesUInt16Array_3.apply(null,arguments)},zc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3= 54 | function(){return a.asm.emscripten_bind_Decoder_GetTrianglesUInt32Array_3.apply(null,arguments)},Ac=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeFloat_3.apply(null,arguments)},Bc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3.apply(null,arguments)},Cc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeIntForAllPoints_3.apply(null, 55 | arguments)},Dc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3.apply(null,arguments)},Ec=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3.apply(null,arguments)},Fc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3.apply(null,arguments)}, 56 | Gc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3.apply(null,arguments)},Hc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3.apply(null,arguments)},Ic=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return a.asm.emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3.apply(null,arguments)},Jc= 57 | a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=function(){return a.asm.emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5.apply(null,arguments)},Kc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return a.asm.emscripten_bind_Decoder_SkipAttributeTransform_1.apply(null,arguments)},Lc=a._emscripten_bind_Decoder___destroy___0=function(){return a.asm.emscripten_bind_Decoder___destroy___0.apply(null,arguments)},cb=a._emscripten_bind_Mesh_Mesh_0=function(){return a.asm.emscripten_bind_Mesh_Mesh_0.apply(null, 58 | arguments)},Mc=a._emscripten_bind_Mesh_num_faces_0=function(){return a.asm.emscripten_bind_Mesh_num_faces_0.apply(null,arguments)},Nc=a._emscripten_bind_Mesh_num_attributes_0=function(){return a.asm.emscripten_bind_Mesh_num_attributes_0.apply(null,arguments)},Oc=a._emscripten_bind_Mesh_num_points_0=function(){return a.asm.emscripten_bind_Mesh_num_points_0.apply(null,arguments)},Pc=a._emscripten_bind_Mesh___destroy___0=function(){return a.asm.emscripten_bind_Mesh___destroy___0.apply(null,arguments)}, 59 | Qc=a._emscripten_bind_VoidPtr___destroy___0=function(){return a.asm.emscripten_bind_VoidPtr___destroy___0.apply(null,arguments)},db=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return a.asm.emscripten_bind_DracoInt32Array_DracoInt32Array_0.apply(null,arguments)},Rc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return a.asm.emscripten_bind_DracoInt32Array_GetValue_1.apply(null,arguments)},Sc=a._emscripten_bind_DracoInt32Array_size_0=function(){return a.asm.emscripten_bind_DracoInt32Array_size_0.apply(null, 60 | arguments)},Tc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return a.asm.emscripten_bind_DracoInt32Array___destroy___0.apply(null,arguments)},eb=a._emscripten_bind_Metadata_Metadata_0=function(){return a.asm.emscripten_bind_Metadata_Metadata_0.apply(null,arguments)},Uc=a._emscripten_bind_Metadata___destroy___0=function(){return a.asm.emscripten_bind_Metadata___destroy___0.apply(null,arguments)},Vc=a._emscripten_enum_draco_StatusCode_OK=function(){return a.asm.emscripten_enum_draco_StatusCode_OK.apply(null, 61 | arguments)},Wc=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=function(){return a.asm.emscripten_enum_draco_StatusCode_DRACO_ERROR.apply(null,arguments)},Xc=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return a.asm.emscripten_enum_draco_StatusCode_IO_ERROR.apply(null,arguments)},Yc=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return a.asm.emscripten_enum_draco_StatusCode_INVALID_PARAMETER.apply(null,arguments)},Zc=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION= 62 | function(){return a.asm.emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION.apply(null,arguments)},$c=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return a.asm.emscripten_enum_draco_StatusCode_UNKNOWN_VERSION.apply(null,arguments)},ad=a._emscripten_enum_draco_DataType_DT_INVALID=function(){return a.asm.emscripten_enum_draco_DataType_DT_INVALID.apply(null,arguments)},bd=a._emscripten_enum_draco_DataType_DT_INT8=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT8.apply(null, 63 | arguments)},cd=a._emscripten_enum_draco_DataType_DT_UINT8=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT8.apply(null,arguments)},dd=a._emscripten_enum_draco_DataType_DT_INT16=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT16.apply(null,arguments)},ed=a._emscripten_enum_draco_DataType_DT_UINT16=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT16.apply(null,arguments)},fd=a._emscripten_enum_draco_DataType_DT_INT32=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT32.apply(null, 64 | arguments)},gd=a._emscripten_enum_draco_DataType_DT_UINT32=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT32.apply(null,arguments)},hd=a._emscripten_enum_draco_DataType_DT_INT64=function(){return a.asm.emscripten_enum_draco_DataType_DT_INT64.apply(null,arguments)},id=a._emscripten_enum_draco_DataType_DT_UINT64=function(){return a.asm.emscripten_enum_draco_DataType_DT_UINT64.apply(null,arguments)},jd=a._emscripten_enum_draco_DataType_DT_FLOAT32=function(){return a.asm.emscripten_enum_draco_DataType_DT_FLOAT32.apply(null, 65 | arguments)},kd=a._emscripten_enum_draco_DataType_DT_FLOAT64=function(){return a.asm.emscripten_enum_draco_DataType_DT_FLOAT64.apply(null,arguments)},ld=a._emscripten_enum_draco_DataType_DT_BOOL=function(){return a.asm.emscripten_enum_draco_DataType_DT_BOOL.apply(null,arguments)},md=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=function(){return a.asm.emscripten_enum_draco_DataType_DT_TYPES_COUNT.apply(null,arguments)},nd=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return a.asm.emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE.apply(null, 66 | arguments)},od=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return a.asm.emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD.apply(null,arguments)},pd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return a.asm.emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH.apply(null,arguments)},qd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM.apply(null, 67 | arguments)},rd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM.apply(null,arguments)},sd=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM.apply(null,arguments)},td=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=function(){return a.asm.emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM.apply(null, 68 | arguments)},ud=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_INVALID.apply(null,arguments)},vd=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_POSITION.apply(null,arguments)},wd=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_NORMAL.apply(null,arguments)},xd=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR= 69 | function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_COLOR.apply(null,arguments)},yd=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD.apply(null,arguments)},zd=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return a.asm.emscripten_enum_draco_GeometryAttribute_Type_GENERIC.apply(null,arguments)};a._setThrew=function(){return a.asm.setThrew.apply(null,arguments)};var ta=a.__ZSt18uncaught_exceptionv= 70 | function(){return a.asm._ZSt18uncaught_exceptionv.apply(null,arguments)};a._free=function(){return a.asm.free.apply(null,arguments)};var ib=a._malloc=function(){return a.asm.malloc.apply(null,arguments)};a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)};a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)};a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)};a.__growWasmMemory=function(){return a.asm.__growWasmMemory.apply(null,arguments)}; 71 | a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)};a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)};a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)};a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)};a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)};a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)};a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)}; 72 | a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)};a.dynCall_iiiiiii=function(){return a.asm.dynCall_iiiiiii.apply(null,arguments)};a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)};a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)};a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)};a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)};a.asm=La;var fa;a.then=function(e){if(fa)e(a); 73 | else{var c=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){c&&c();e(a)}}return a};ja=function c(){fa||ma();fa||(ja=c)};a.run=ma;if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0=n.size?(t(0>=1;break;case 4:d>>=2;break;case 8:d>>=3}for(var c=0;c 'Hello World' 2 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | mode: 'jit', 3 | content: [ 4 | './components/**/*.{vue,js}', 5 | './layouts/**/*.vue', 6 | './pages/**/*.vue', 7 | './plugins/**/*.{js,ts}', 8 | // './nuxt.config.{js,ts}', 9 | ], 10 | theme: { 11 | extend: {}, 12 | fontFamily: { 13 | sans: ['Poppins', 'sans-serif'], 14 | }, 15 | }, 16 | plugins: [], 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.nuxt/tsconfig.json", 3 | "compilerOptions": { 4 | "suppressImplicitAnyIndexErrors": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /types/index.d.ts: -------------------------------------------------------------------------------- 1 | import WebGL from '@/class/three/WebGL' 2 | 3 | export {} 4 | 5 | declare global { 6 | interface Window { 7 | webGL: WebGL 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /vue-shim.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.glb' { 2 | const content: string 3 | export default content 4 | } 5 | 6 | declare module '*.glsl' { 7 | const content: string 8 | export default content 9 | } 10 | 11 | declare module '*.vert' { 12 | const content: string 13 | export default content 14 | } 15 | 16 | declare module '*.frag' { 17 | const content: string 18 | export default content 19 | } 20 | 21 | declare module '*.json' 22 | 23 | declare module '*.png' 24 | declare module '*.jpg' 25 | declare module '*.jpeg' 26 | declare module '*.svg' 27 | declare module '*.mp3' 28 | --------------------------------------------------------------------------------