├── .gitignore ├── Experience ├── Camera.js ├── Experience.js ├── Preloader.js ├── Renderer.js ├── Theme.js ├── Utils │ ├── Resources.js │ ├── Sizes.js │ ├── Time.js │ ├── assets.js │ └── covertDivsToSpans.js └── World │ ├── Controls.js │ ├── Environment.js │ ├── Floor.js │ ├── Room.js │ └── World.js ├── LEARN.md ├── LICENSE.md ├── README.md ├── favicon.svg ├── index.html ├── main.js ├── package-lock.json ├── package.json ├── public ├── 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 │ ├── Finale Version 16.glb │ └── New Boko.glb ├── social │ ├── credly.jpg │ ├── credly.pdf │ └── screenshot.png └── textures │ └── kda.mp4 └── style.css /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Experience/Camera.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import Experience from "./Experience.js"; 3 | import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; 4 | 5 | export default class Camera { 6 | constructor() { 7 | this.experience = new Experience(); 8 | this.sizes = this.experience.sizes; 9 | this.scene = this.experience.scene; 10 | this.canvas = this.experience.canvas; 11 | 12 | this.createPerspectiveCamera(); 13 | this.createOrthographicCamera(); 14 | this.setOrbitControls(); 15 | } 16 | 17 | createPerspectiveCamera() { 18 | this.perspectiveCamera = new THREE.PerspectiveCamera( 19 | 35, 20 | this.sizes.aspect, 21 | 0.1, 22 | 1000 23 | ); 24 | this.scene.add(this.perspectiveCamera); 25 | this.perspectiveCamera.position.x = 29; 26 | this.perspectiveCamera.position.y = 14; 27 | this.perspectiveCamera.position.z = 12; 28 | } 29 | 30 | createOrthographicCamera() { 31 | this.orthographicCamera = new THREE.OrthographicCamera( 32 | (-this.sizes.aspect * this.sizes.frustrum) / 2, 33 | (this.sizes.aspect * this.sizes.frustrum) / 2, 34 | this.sizes.frustrum / 2, 35 | -this.sizes.frustrum / 2, 36 | -50, 37 | 50 38 | ); 39 | 40 | // 6.5 41 | this.orthographicCamera.position.y = 5.65; 42 | this.orthographicCamera.position.z = 10; 43 | this.orthographicCamera.rotation.x = -Math.PI / 6; 44 | 45 | this.scene.add(this.orthographicCamera); 46 | 47 | // this.helper = new THREE.CameraHelper(this.orthographicCamera); 48 | // this.scene.add(this.helper); 49 | 50 | const size = 20; 51 | const divisions = 20; 52 | 53 | // const gridHelper = new THREE.GridHelper(size, divisions); 54 | // this.scene.add(gridHelper); 55 | 56 | // const axesHelper = new THREE.AxesHelper(10); 57 | // this.scene.add(axesHelper); 58 | } 59 | 60 | setOrbitControls() { 61 | this.controls = new OrbitControls(this.perspectiveCamera, this.canvas); 62 | this.controls.enableDamping = true; 63 | this.controls.enableZoom = false; 64 | } 65 | 66 | resize() { 67 | // Updating Perspective Camera on Resize 68 | this.perspectiveCamera.aspect = this.sizes.aspect; 69 | this.perspectiveCamera.updateProjectionMatrix(); 70 | 71 | // Updating Orthographic Camera on Resize 72 | this.orthographicCamera.left = 73 | (-this.sizes.aspect * this.sizes.frustrum) / 2; 74 | this.orthographicCamera.right = 75 | (this.sizes.aspect * this.sizes.frustrum) / 2; 76 | this.orthographicCamera.top = this.sizes.frustrum / 2; 77 | this.orthographicCamera.bottom = -this.sizes.frustrum / 2; 78 | this.orthographicCamera.updateProjectionMatrix(); 79 | } 80 | 81 | update() { 82 | // console.log(this.perspectiveCamera.position); 83 | this.controls.update(); 84 | 85 | // this.helper.matrixWorldNeedsUpdate = true; 86 | // this.helper.update(); 87 | // this.helper.position.copy(this.orthographicCamera.position); 88 | // this.helper.rotation.copy(this.orthographicCamera.rotation); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /Experience/Experience.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | 3 | import Sizes from "./Utils/Sizes.js"; 4 | import Time from "./Utils/Time.js"; 5 | import Resources from "./Utils/Resources.js"; 6 | import assets from "./Utils/assets.js"; 7 | 8 | import Camera from "./Camera.js"; 9 | import Theme from "./Theme.js"; 10 | import Renderer from "./Renderer.js"; 11 | import Preloader from "./Preloader.js"; 12 | 13 | import World from "./World/World.js"; 14 | import Controls from "./World/Controls.js"; 15 | 16 | export default class Experience { 17 | static instance; 18 | constructor(canvas) { 19 | if (Experience.instance) { 20 | return Experience.instance; 21 | } 22 | Experience.instance = this; 23 | this.canvas = canvas; 24 | this.scene = new THREE.Scene(); 25 | this.time = new Time(); 26 | this.sizes = new Sizes(); 27 | this.camera = new Camera(); 28 | this.renderer = new Renderer(); 29 | this.resources = new Resources(assets); 30 | this.theme = new Theme(); 31 | this.world = new World(); 32 | this.preloader = new Preloader(); 33 | 34 | this.preloader.on("enablecontrols", () => { 35 | this.controls = new Controls(); 36 | }); 37 | 38 | this.sizes.on("resize", () => { 39 | this.resize(); 40 | }); 41 | this.time.on("update", () => { 42 | this.update(); 43 | }); 44 | } 45 | 46 | resize() { 47 | this.camera.resize(); 48 | this.world.resize(); 49 | this.renderer.resize(); 50 | } 51 | 52 | update() { 53 | this.preloader.update(); 54 | this.camera.update(); 55 | this.world.update(); 56 | this.renderer.update(); 57 | if (this.controls) { 58 | this.controls.update(); 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Experience/Preloader.js: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from "events"; 2 | import Experience from "./Experience.js"; 3 | import GSAP from "gsap"; 4 | import convert from "./Utils/covertDivsToSpans.js"; 5 | 6 | export default class Preloader extends EventEmitter { 7 | constructor() { 8 | super(); 9 | this.experience = new Experience(); 10 | this.scene = this.experience.scene; 11 | this.sizes = this.experience.sizes; 12 | this.resources = this.experience.resources; 13 | this.camera = this.experience.camera; 14 | this.world = this.experience.world; 15 | this.device = this.sizes.device; 16 | 17 | this.sizes.on("switchdevice", (device) => { 18 | this.device = device; 19 | }); 20 | 21 | this.world.on("worldready", () => { 22 | this.setAssets(); 23 | this.playIntro(); 24 | }); 25 | } 26 | 27 | setAssets() { 28 | convert(document.querySelector(".intro-text")); 29 | convert(document.querySelector(".hero-main-title")); 30 | convert(document.querySelector(".hero-main-description")); 31 | convert(document.querySelector(".hero-second-subheading")); 32 | convert(document.querySelector(".second-sub")); 33 | 34 | this.room = this.experience.world.room.actualRoom; 35 | this.roomChildren = this.experience.world.room.roomChildren; 36 | console.log(this.roomChildren); 37 | } 38 | 39 | firstIntro() { 40 | return new Promise((resolve) => { 41 | this.timeline = new GSAP.timeline(); 42 | this.timeline.set(".animatedis", { y: 0, yPercent: 100 }); 43 | this.timeline.to(".preloader", { 44 | opacity: 0, 45 | delay: 1, 46 | onComplete: () => { 47 | document 48 | .querySelector(".preloader") 49 | .classList.add("hidden"); 50 | }, 51 | }); 52 | if (this.device === "desktop") { 53 | this.timeline 54 | .to(this.roomChildren.cube.scale, { 55 | x: 1.4, 56 | y: 1.4, 57 | z: 1.4, 58 | ease: "back.out(2.5)", 59 | duration: 0.7, 60 | }) 61 | .to(this.room.position, { 62 | x: -1, 63 | ease: "power1.out", 64 | duration: 0.7, 65 | }); 66 | } else { 67 | this.timeline 68 | .to(this.roomChildren.cube.scale, { 69 | x: 1.4, 70 | y: 1.4, 71 | z: 1.4, 72 | ease: "back.out(2.5)", 73 | duration: 0.7, 74 | }) 75 | .to(this.room.position, { 76 | z: -1, 77 | ease: "power1.out", 78 | duration: 0.7, 79 | }); 80 | } 81 | this.timeline 82 | .to(".intro-text .animatedis", { 83 | yPercent: 0, 84 | stagger: 0.05, 85 | ease: "back.out(1.7)", 86 | }) 87 | .to( 88 | ".arrow-svg-wrapper", 89 | { 90 | opacity: 1, 91 | }, 92 | "same" 93 | ) 94 | .to( 95 | ".toggle-bar", 96 | { 97 | opacity: 1, 98 | onComplete: resolve, 99 | }, 100 | "same" 101 | ); 102 | }); 103 | } 104 | 105 | secondIntro() { 106 | return new Promise((resolve) => { 107 | this.secondTimeline = new GSAP.timeline(); 108 | 109 | this.secondTimeline 110 | .to( 111 | ".intro-text .animatedis", 112 | { 113 | yPercent: 100, 114 | stagger: 0.05, 115 | ease: "back.in(1.7)", 116 | }, 117 | "fadeout" 118 | ) 119 | .to( 120 | ".arrow-svg-wrapper", 121 | { 122 | opacity: 0, 123 | }, 124 | "fadeout" 125 | ) 126 | .to( 127 | this.room.position, 128 | { 129 | x: 0, 130 | y: 0, 131 | z: 0, 132 | ease: "power1.out", 133 | }, 134 | "same" 135 | ) 136 | .to( 137 | this.roomChildren.cube.rotation, 138 | { 139 | y: 2 * Math.PI + Math.PI / 4, 140 | }, 141 | "same" 142 | ) 143 | .to( 144 | this.roomChildren.cube.scale, 145 | { 146 | x: 10, 147 | y: 10, 148 | z: 10, 149 | }, 150 | "same" 151 | ) 152 | .to( 153 | this.camera.orthographicCamera.position, 154 | { 155 | y: 6.5, 156 | }, 157 | "same" 158 | ) 159 | .to( 160 | this.roomChildren.cube.position, 161 | { 162 | x: 0.638711, 163 | y: 8.5618, 164 | z: 1.3243, 165 | }, 166 | "same" 167 | ) 168 | .set(this.roomChildren.body.scale, { 169 | x: 1, 170 | y: 1, 171 | z: 1, 172 | }) 173 | .to( 174 | this.roomChildren.cube.scale, 175 | { 176 | x: 0, 177 | y: 0, 178 | z: 0, 179 | duration: 1, 180 | }, 181 | "introtext" 182 | ) 183 | .to( 184 | ".hero-main-title .animatedis", 185 | { 186 | yPercent: 0, 187 | stagger: 0.07, 188 | ease: "back.out(1.7)", 189 | }, 190 | "introtext" 191 | ) 192 | .to( 193 | ".hero-main-description .animatedis", 194 | { 195 | yPercent: 0, 196 | stagger: 0.07, 197 | ease: "back.out(1.7)", 198 | }, 199 | "introtext" 200 | ) 201 | .to( 202 | ".first-sub .animatedis", 203 | { 204 | yPercent: 0, 205 | stagger: 0.07, 206 | ease: "back.out(1.7)", 207 | }, 208 | "introtext" 209 | ) 210 | .to( 211 | ".second-sub .animatedis", 212 | { 213 | yPercent: 0, 214 | stagger: 0.07, 215 | ease: "back.out(1.7)", 216 | }, 217 | "introtext" 218 | ) 219 | .to( 220 | this.roomChildren.aquarium.scale, 221 | { 222 | x: 1, 223 | y: 1, 224 | z: 1, 225 | ease: "back.out(2.2)", 226 | duration: 0.5, 227 | }, 228 | ">-0.5" 229 | ) 230 | .to( 231 | this.roomChildren.clock.scale, 232 | { 233 | x: 1, 234 | y: 1, 235 | z: 1, 236 | ease: "back.out(2.2)", 237 | duration: 0.5, 238 | }, 239 | ">-0.4" 240 | ) 241 | .to( 242 | this.roomChildren.shelves.scale, 243 | { 244 | x: 1, 245 | y: 1, 246 | z: 1, 247 | ease: "back.out(2.2)", 248 | duration: 0.5, 249 | }, 250 | ">-0.3" 251 | ) 252 | .to( 253 | this.roomChildren.floor_items.scale, 254 | { 255 | x: 1, 256 | y: 1, 257 | z: 1, 258 | ease: "back.out(2.2)", 259 | duration: 0.5, 260 | }, 261 | ">-0.2" 262 | ) 263 | .to( 264 | this.roomChildren.desks.scale, 265 | { 266 | x: 1, 267 | y: 1, 268 | z: 1, 269 | ease: "back.out(2.2)", 270 | duration: 0.5, 271 | }, 272 | ">-0.1" 273 | ) 274 | .to( 275 | this.roomChildren.table_stuff.scale, 276 | { 277 | x: 1, 278 | y: 1, 279 | z: 1, 280 | ease: "back.out(2.2)", 281 | duration: 0.5, 282 | }, 283 | ">-0.1" 284 | ) 285 | .to(this.roomChildren.computer.scale, { 286 | x: 1, 287 | y: 1, 288 | z: 1, 289 | ease: "back.out(2.2)", 290 | duration: 0.5, 291 | }) 292 | .set(this.roomChildren.mini_floor.scale, { 293 | x: 1, 294 | y: 1, 295 | z: 1, 296 | }) 297 | .to( 298 | this.roomChildren.chair.scale, 299 | { 300 | x: 1, 301 | y: 1, 302 | z: 1, 303 | ease: "back.out(2.2)", 304 | duration: 0.5, 305 | }, 306 | "chair" 307 | ) 308 | .to( 309 | this.roomChildren.fish.scale, 310 | { 311 | x: 1, 312 | y: 1, 313 | z: 1, 314 | ease: "back.out(2.2)", 315 | duration: 0.5, 316 | }, 317 | "chair" 318 | ) 319 | .to( 320 | this.roomChildren.chair.rotation, 321 | { 322 | y: 4 * Math.PI + Math.PI / 4, 323 | ease: "power2.out", 324 | duration: 1, 325 | }, 326 | "chair" 327 | ) 328 | .to(".arrow-svg-wrapper", { 329 | opacity: 1, 330 | onComplete: resolve, 331 | }); 332 | }); 333 | } 334 | 335 | onScroll(e) { 336 | if (e.deltaY > 0) { 337 | this.removeEventListeners(); 338 | this.playSecondIntro(); 339 | } 340 | } 341 | 342 | onTouch(e) { 343 | this.initalY = e.touches[0].clientY; 344 | } 345 | 346 | onTouchMove(e) { 347 | let currentY = e.touches[0].clientY; 348 | let difference = this.initalY - currentY; 349 | if (difference > 0) { 350 | console.log("swipped up"); 351 | this.removeEventListeners(); 352 | this.playSecondIntro(); 353 | } 354 | this.intialY = null; 355 | } 356 | 357 | removeEventListeners() { 358 | window.removeEventListener("wheel", this.scrollOnceEvent); 359 | window.removeEventListener("touchstart", this.touchStart); 360 | window.removeEventListener("touchmove", this.touchMove); 361 | } 362 | 363 | async playIntro() { 364 | this.scaleFlag = true; 365 | await this.firstIntro(); 366 | this.moveFlag = true; 367 | this.scrollOnceEvent = this.onScroll.bind(this); 368 | this.touchStart = this.onTouch.bind(this); 369 | this.touchMove = this.onTouchMove.bind(this); 370 | window.addEventListener("wheel", this.scrollOnceEvent); 371 | window.addEventListener("touchstart", this.touchStart); 372 | window.addEventListener("touchmove", this.touchMove); 373 | } 374 | async playSecondIntro() { 375 | this.moveFlag = false; 376 | await this.secondIntro(); 377 | this.scaleFlag = false; 378 | this.emit("enablecontrols"); 379 | } 380 | 381 | move() { 382 | if (this.device === "desktop") { 383 | this.room.position.set(-1, 0, 0); 384 | } else { 385 | this.room.position.set(0, 0, -1); 386 | } 387 | } 388 | 389 | scale() { 390 | this.roomChildren.rectLight.width = 0; 391 | this.roomChildren.rectLight.height = 0; 392 | 393 | if (this.device === "desktop") { 394 | this.room.scale.set(0.11, 0.11, 0.11); 395 | } else { 396 | this.room.scale.set(0.07, 0.07, 0.07); 397 | } 398 | } 399 | 400 | update() { 401 | if (this.moveFlag) { 402 | this.move(); 403 | } 404 | 405 | if (this.scaleFlag) { 406 | this.scale(); 407 | } 408 | } 409 | } 410 | -------------------------------------------------------------------------------- /Experience/Renderer.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import Experience from "./Experience.js"; 3 | 4 | export default class Renderer { 5 | constructor() { 6 | this.experience = new Experience(); 7 | this.sizes = this.experience.sizes; 8 | this.scene = this.experience.scene; 9 | this.canvas = this.experience.canvas; 10 | this.camera = this.experience.camera; 11 | 12 | this.setRenderer(); 13 | } 14 | 15 | setRenderer() { 16 | this.renderer = new THREE.WebGLRenderer({ 17 | canvas: this.canvas, 18 | antialias: true, 19 | }); 20 | 21 | this.renderer.physicallyCorrectLights = true; 22 | this.renderer.outputEncoding = THREE.sRGBEncoding; 23 | this.renderer.toneMapping = THREE.CineonToneMapping; 24 | this.renderer.toneMappingExposure = 1.75; 25 | this.renderer.shadowMap.enabled = true; 26 | this.renderer.shadowMap.type = THREE.PCFSoftShadowMap; 27 | this.renderer.setSize(this.sizes.width, this.sizes.height); 28 | this.renderer.setPixelRatio(this.sizes.pixelRatio); 29 | } 30 | 31 | resize() { 32 | this.renderer.setSize(this.sizes.width, this.sizes.height); 33 | this.renderer.setPixelRatio(this.sizes.pixelRatio); 34 | } 35 | 36 | update() { 37 | // this.renderer.setViewport(0, 0, this.sizes.width, this.sizes.height); 38 | this.renderer.render(this.scene, this.camera.orthographicCamera); 39 | // Second Screen 40 | // this.renderer.setScissorTest(true); 41 | // this.renderer.setViewport( 42 | // this.sizes.width - this.sizes.width / 3, 43 | // this.sizes.height - this.sizes.height / 3, 44 | // this.sizes.width / 3, 45 | // this.sizes.height / 3 46 | // ); 47 | 48 | // this.renderer.setScissor( 49 | // this.sizes.width - this.sizes.width / 3, 50 | // this.sizes.height - this.sizes.height / 3, 51 | // this.sizes.width / 3, 52 | // this.sizes.height / 3 53 | // ); 54 | 55 | // this.renderer.render(this.scene, this.camera.perspectiveCamera); 56 | 57 | // this.renderer.setScissorTest(false); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Experience/Theme.js: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from "events"; 2 | 3 | export default class Theme extends EventEmitter { 4 | constructor() { 5 | super(); 6 | 7 | this.theme = "light"; 8 | 9 | this.toggleButton = document.querySelector(".toggle-button"); 10 | this.toggleCircle = document.querySelector(".toggle-circle"); 11 | 12 | this.setEventListeners(); 13 | } 14 | 15 | setEventListeners() { 16 | this.toggleButton.addEventListener("click", () => { 17 | this.toggleCircle.classList.toggle("slide"); 18 | this.theme = this.theme === "light" ? "dark" : "light"; 19 | document.body.classList.toggle("dark-theme"); 20 | document.body.classList.toggle("light-theme"); 21 | // console.log(this.theme); 22 | 23 | this.emit("switch", this.theme); 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Experience/Utils/Resources.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | 3 | import { EventEmitter } from "events"; 4 | import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; 5 | import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader.js"; 6 | import Experience from "../Experience.js"; 7 | 8 | export default class Resources extends EventEmitter { 9 | constructor(assets) { 10 | super(); 11 | this.experience = new Experience(); 12 | this.renderer = this.experience.renderer; 13 | 14 | this.assets = assets; 15 | 16 | this.items = {}; 17 | this.queue = this.assets.length; 18 | this.loaded = 0; 19 | 20 | this.setLoaders(); 21 | this.startLoading(); 22 | } 23 | 24 | setLoaders() { 25 | this.loaders = {}; 26 | this.loaders.gltfLoader = new GLTFLoader(); 27 | this.loaders.dracoLoader = new DRACOLoader(); 28 | this.loaders.dracoLoader.setDecoderPath("/draco/"); 29 | this.loaders.gltfLoader.setDRACOLoader(this.loaders.dracoLoader); 30 | } 31 | startLoading() { 32 | for (const asset of this.assets) { 33 | if (asset.type === "glbModel") { 34 | this.loaders.gltfLoader.load(asset.path, (file) => { 35 | this.singleAssetLoaded(asset, file); 36 | }); 37 | } else if (asset.type === "videoTexture") { 38 | this.video = {}; 39 | this.videoTexture = {}; 40 | 41 | this.video[asset.name] = document.createElement("video"); 42 | this.video[asset.name].src = asset.path; 43 | this.video[asset.name].muted = true; 44 | this.video[asset.name].playsInline = true; 45 | this.video[asset.name].autoplay = true; 46 | this.video[asset.name].loop = true; 47 | this.video[asset.name].play(); 48 | 49 | this.videoTexture[asset.name] = new THREE.VideoTexture( 50 | this.video[asset.name] 51 | ); 52 | // this.videoTexture[asset.name].flipY = false; 53 | this.videoTexture[asset.name].minFilter = THREE.NearestFilter; 54 | this.videoTexture[asset.name].magFilter = THREE.NearestFilter; 55 | this.videoTexture[asset.name].generateMipmaps = false; 56 | this.videoTexture[asset.name].encoding = THREE.sRGBEncoding; 57 | 58 | this.singleAssetLoaded(asset, this.videoTexture[asset.name]); 59 | } 60 | } 61 | } 62 | 63 | singleAssetLoaded(asset, file) { 64 | this.items[asset.name] = file; 65 | this.loaded++; 66 | 67 | if (this.loaded === this.queue) { 68 | this.emit("ready"); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Experience/Utils/Sizes.js: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from "events"; 2 | 3 | export default class Sizes extends EventEmitter { 4 | constructor() { 5 | super(); 6 | this.width = window.innerWidth; 7 | this.height = window.innerHeight; 8 | this.aspect = this.width / this.height; 9 | this.pixelRatio = Math.min(window.devicePixelRatio, 2); 10 | this.frustrum = 5; 11 | if (this.width < 968) { 12 | this.device = "mobile"; 13 | } else { 14 | this.device = "desktop"; 15 | } 16 | 17 | window.addEventListener("resize", () => { 18 | this.width = window.innerWidth; 19 | this.height = window.innerHeight; 20 | this.aspect = this.width / this.height; 21 | this.pixelRatio = Math.min(window.devicePixelRatio, 2); 22 | this.emit("resize"); 23 | 24 | if (this.width < 968 && this.device !== "mobile") { 25 | this.device = "mobile"; 26 | this.emit("switchdevice", this.device); 27 | } else if (this.width >= 968 && this.device !== "desktop") { 28 | this.device = "desktop"; 29 | this.emit("switchdevice", this.device); 30 | } 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Experience/Utils/Time.js: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from "events"; 2 | 3 | export default class Time extends EventEmitter { 4 | constructor() { 5 | super(); 6 | this.start = Date.now(); 7 | this.current = this.start; 8 | this.elapsed = 0; 9 | this.delta = 16; 10 | 11 | this.update(); 12 | } 13 | 14 | update() { 15 | const currentTime = Date.now(); 16 | this.delta = currentTime - this.current; 17 | this.current = currentTime; 18 | this.elapsed = this.current - this.start; 19 | 20 | this.emit("update"); 21 | window.requestAnimationFrame(() => this.update()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Experience/Utils/assets.js: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | name: "room", 4 | type: "glbModel", 5 | path: "/models/Finale Version 16.glb", 6 | }, 7 | { 8 | name: "screen", 9 | type: "videoTexture", 10 | path: "/textures/kda.mp4", 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /Experience/Utils/covertDivsToSpans.js: -------------------------------------------------------------------------------- 1 | export default function (element) { 2 | element.style.overflow = "hidden"; 3 | element.innerHTML = element.innerText 4 | .split("") 5 | .map((char) => { 6 | if (char === " ") { 7 | return ` `; 8 | } 9 | return `${char}`; 10 | }) 11 | .join(""); 12 | 13 | return element; 14 | } 15 | -------------------------------------------------------------------------------- /Experience/World/Controls.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import Experience from "../Experience.js"; 3 | import GSAP from "gsap"; 4 | import { ScrollTrigger } from "gsap/ScrollTrigger.js"; 5 | import ASScroll from "@ashthornton/asscroll"; 6 | 7 | export default class Controls { 8 | constructor() { 9 | this.experience = new Experience(); 10 | this.scene = this.experience.scene; 11 | this.sizes = this.experience.sizes; 12 | this.resources = this.experience.resources; 13 | this.time = this.experience.time; 14 | this.camera = this.experience.camera; 15 | this.room = this.experience.world.room.actualRoom; 16 | this.room.children.forEach((child) => { 17 | if (child.type === "RectAreaLight") { 18 | this.rectLight = child; 19 | } 20 | }); 21 | this.circleFirst = this.experience.world.floor.circleFirst; 22 | this.circleSecond = this.experience.world.floor.circleSecond; 23 | this.circleThird = this.experience.world.floor.circleThird; 24 | 25 | GSAP.registerPlugin(ScrollTrigger); 26 | 27 | document.querySelector(".page").style.overflow = "visible"; 28 | 29 | if ( 30 | !/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( 31 | navigator.userAgent 32 | ) 33 | ) { 34 | this.setSmoothScroll(); 35 | } 36 | this.setScrollTrigger(); 37 | } 38 | 39 | setupASScroll() { 40 | // https://github.com/ashthornton/asscroll 41 | const asscroll = new ASScroll({ 42 | ease: 0.1, 43 | disableRaf: true, 44 | }); 45 | 46 | GSAP.ticker.add(asscroll.update); 47 | 48 | ScrollTrigger.defaults({ 49 | scroller: asscroll.containerElement, 50 | }); 51 | 52 | ScrollTrigger.scrollerProxy(asscroll.containerElement, { 53 | scrollTop(value) { 54 | if (arguments.length) { 55 | asscroll.currentPos = value; 56 | return; 57 | } 58 | return asscroll.currentPos; 59 | }, 60 | getBoundingClientRect() { 61 | return { 62 | top: 0, 63 | left: 0, 64 | width: window.innerWidth, 65 | height: window.innerHeight, 66 | }; 67 | }, 68 | fixedMarkers: true, 69 | }); 70 | 71 | asscroll.on("update", ScrollTrigger.update); 72 | ScrollTrigger.addEventListener("refresh", asscroll.resize); 73 | 74 | requestAnimationFrame(() => { 75 | asscroll.enable({ 76 | newScrollElements: document.querySelectorAll( 77 | ".gsap-marker-start, .gsap-marker-end, [asscroll]" 78 | ), 79 | }); 80 | }); 81 | return asscroll; 82 | } 83 | 84 | setSmoothScroll() { 85 | this.asscroll = this.setupASScroll(); 86 | } 87 | 88 | setScrollTrigger() { 89 | ScrollTrigger.matchMedia({ 90 | //Desktop 91 | "(min-width: 969px)": () => { 92 | // console.log("fired desktop"); 93 | 94 | this.room.scale.set(0.11, 0.11, 0.11); 95 | this.rectLight.width = 0.5; 96 | this.rectLight.height = 0.7; 97 | this.camera.orthographicCamera.position.set(0, 6.5, 10); 98 | this.room.position.set(0, 0, 0); 99 | // First section ----------------------------------------- 100 | this.firstMoveTimeline = new GSAP.timeline({ 101 | scrollTrigger: { 102 | trigger: ".first-move", 103 | start: "top top", 104 | end: "bottom bottom", 105 | scrub: 0.6, 106 | // markers: true, 107 | invalidateOnRefresh: true, 108 | }, 109 | }); 110 | this.firstMoveTimeline.fromTo( 111 | this.room.position, 112 | { x: 0, y: 0, z: 0 }, 113 | { 114 | x: () => { 115 | return this.sizes.width * 0.0014; 116 | }, 117 | } 118 | ); 119 | 120 | // Second section ----------------------------------------- 121 | this.secondMoveTimeline = new GSAP.timeline({ 122 | scrollTrigger: { 123 | trigger: ".second-move", 124 | start: "top top", 125 | end: "bottom bottom", 126 | scrub: 0.6, 127 | invalidateOnRefresh: true, 128 | }, 129 | }) 130 | .to( 131 | this.room.position, 132 | { 133 | x: () => { 134 | return 1; 135 | }, 136 | z: () => { 137 | return this.sizes.height * 0.0032; 138 | }, 139 | }, 140 | "same" 141 | ) 142 | .to( 143 | this.room.scale, 144 | { 145 | x: 0.4, 146 | y: 0.4, 147 | z: 0.4, 148 | }, 149 | "same" 150 | ) 151 | .to( 152 | this.rectLight, 153 | { 154 | width: 0.5 * 4, 155 | height: 0.7 * 4, 156 | }, 157 | "same" 158 | ); 159 | 160 | // Third section ----------------------------------------- 161 | this.thirdMoveTimeline = new GSAP.timeline({ 162 | scrollTrigger: { 163 | trigger: ".third-move", 164 | start: "top top", 165 | end: "bottom bottom", 166 | scrub: 0.6, 167 | invalidateOnRefresh: true, 168 | }, 169 | }).to(this.camera.orthographicCamera.position, { 170 | y: 1.5, 171 | x: -4.1, 172 | }); 173 | }, 174 | 175 | // Mobile 176 | "(max-width: 968px)": () => { 177 | // console.log("fired mobile"); 178 | 179 | // Resets 180 | this.room.scale.set(0.07, 0.07, 0.07); 181 | this.room.position.set(0, 0, 0); 182 | this.rectLight.width = 0.3; 183 | this.rectLight.height = 0.4; 184 | this.camera.orthographicCamera.position.set(0, 6.5, 10); 185 | 186 | // First section ----------------------------------------- 187 | this.firstMoveTimeline = new GSAP.timeline({ 188 | scrollTrigger: { 189 | trigger: ".first-move", 190 | start: "top top", 191 | end: "bottom bottom", 192 | scrub: 0.6, 193 | // invalidateOnRefresh: true, 194 | }, 195 | }).to(this.room.scale, { 196 | x: 0.1, 197 | y: 0.1, 198 | z: 0.1, 199 | }); 200 | 201 | // Second section ----------------------------------------- 202 | this.secondMoveTimeline = new GSAP.timeline({ 203 | scrollTrigger: { 204 | trigger: ".second-move", 205 | start: "top top", 206 | end: "bottom bottom", 207 | scrub: 0.6, 208 | invalidateOnRefresh: true, 209 | }, 210 | }) 211 | .to( 212 | this.room.scale, 213 | { 214 | x: 0.25, 215 | y: 0.25, 216 | z: 0.25, 217 | }, 218 | "same" 219 | ) 220 | .to( 221 | this.rectLight, 222 | { 223 | width: 0.3 * 3.4, 224 | height: 0.4 * 3.4, 225 | }, 226 | "same" 227 | ) 228 | .to( 229 | this.room.position, 230 | { 231 | x: 1.5, 232 | }, 233 | "same" 234 | ); 235 | 236 | // Third section ----------------------------------------- 237 | this.thirdMoveTimeline = new GSAP.timeline({ 238 | scrollTrigger: { 239 | trigger: ".third-move", 240 | start: "top top", 241 | end: "bottom bottom", 242 | scrub: 0.6, 243 | invalidateOnRefresh: true, 244 | }, 245 | }).to(this.room.position, { 246 | z: -4.5, 247 | }); 248 | }, 249 | 250 | // all 251 | all: () => { 252 | this.sections = document.querySelectorAll(".section"); 253 | this.sections.forEach((section) => { 254 | this.progressWrapper = 255 | section.querySelector(".progress-wrapper"); 256 | this.progressBar = section.querySelector(".progress-bar"); 257 | 258 | if (section.classList.contains("right")) { 259 | GSAP.to(section, { 260 | borderTopLeftRadius: 10, 261 | scrollTrigger: { 262 | trigger: section, 263 | start: "top bottom", 264 | end: "top top", 265 | scrub: 0.6, 266 | }, 267 | }); 268 | GSAP.to(section, { 269 | borderBottomLeftRadius: 700, 270 | scrollTrigger: { 271 | trigger: section, 272 | start: "bottom bottom", 273 | end: "bottom top", 274 | scrub: 0.6, 275 | }, 276 | }); 277 | } else { 278 | GSAP.to(section, { 279 | borderTopRightRadius: 10, 280 | scrollTrigger: { 281 | trigger: section, 282 | start: "top bottom", 283 | end: "top top", 284 | scrub: 0.6, 285 | }, 286 | }); 287 | GSAP.to(section, { 288 | borderBottomRightRadius: 700, 289 | scrollTrigger: { 290 | trigger: section, 291 | start: "bottom bottom", 292 | end: "bottom top", 293 | scrub: 0.6, 294 | }, 295 | }); 296 | } 297 | GSAP.from(this.progressBar, { 298 | scaleY: 0, 299 | scrollTrigger: { 300 | trigger: section, 301 | start: "top top", 302 | end: "bottom bottom", 303 | scrub: 0.4, 304 | pin: this.progressWrapper, 305 | pinSpacing: false, 306 | }, 307 | }); 308 | }); 309 | 310 | // All animations 311 | // First section ----------------------------------------- 312 | this.firstCircle = new GSAP.timeline({ 313 | scrollTrigger: { 314 | trigger: ".first-move", 315 | start: "top top", 316 | end: "bottom bottom", 317 | scrub: 0.6, 318 | }, 319 | }).to(this.circleFirst.scale, { 320 | x: 3, 321 | y: 3, 322 | z: 3, 323 | }); 324 | 325 | // Second section ----------------------------------------- 326 | this.secondCircle = new GSAP.timeline({ 327 | scrollTrigger: { 328 | trigger: ".second-move", 329 | start: "top top", 330 | end: "bottom bottom", 331 | scrub: 0.6, 332 | }, 333 | }) 334 | .to( 335 | this.circleSecond.scale, 336 | { 337 | x: 3, 338 | y: 3, 339 | z: 3, 340 | }, 341 | "same" 342 | ) 343 | .to( 344 | this.room.position, 345 | { 346 | y: 0.7, 347 | }, 348 | "same" 349 | ); 350 | 351 | // Third section ----------------------------------------- 352 | this.thirdCircle = new GSAP.timeline({ 353 | scrollTrigger: { 354 | trigger: ".third-move", 355 | start: "top top", 356 | end: "bottom bottom", 357 | scrub: 0.6, 358 | }, 359 | }).to(this.circleThird.scale, { 360 | x: 3, 361 | y: 3, 362 | z: 3, 363 | }); 364 | 365 | // Mini Platform Animations 366 | this.secondPartTimeline = new GSAP.timeline({ 367 | scrollTrigger: { 368 | trigger: ".third-move", 369 | start: "center center", 370 | }, 371 | }); 372 | 373 | this.room.children.forEach((child) => { 374 | if (child.name === "Mini_Floor") { 375 | this.first = GSAP.to(child.position, { 376 | x: -5.44055, 377 | z: 13.6135, 378 | duration: 0.3, 379 | }); 380 | } 381 | if (child.name === "Mailbox") { 382 | this.second = GSAP.to(child.scale, { 383 | x: 1, 384 | y: 1, 385 | z: 1, 386 | duration: 0.3, 387 | }); 388 | } 389 | if (child.name === "Lamp") { 390 | this.third = GSAP.to(child.scale, { 391 | x: 1, 392 | y: 1, 393 | z: 1, 394 | ease: "back.out(2)", 395 | duration: 0.3, 396 | }); 397 | } 398 | if (child.name === "FloorFirst") { 399 | this.fourth = GSAP.to(child.scale, { 400 | x: 1, 401 | y: 1, 402 | z: 1, 403 | ease: "back.out(2)", 404 | duration: 0.3, 405 | }); 406 | } 407 | if (child.name === "FloorSecond") { 408 | this.fifth = GSAP.to(child.scale, { 409 | x: 1, 410 | y: 1, 411 | z: 1, 412 | duration: 0.3, 413 | }); 414 | } 415 | if (child.name === "FloorThird") { 416 | this.sixth = GSAP.to(child.scale, { 417 | x: 1, 418 | y: 1, 419 | z: 1, 420 | ease: "back.out(2)", 421 | duration: 0.3, 422 | }); 423 | } 424 | if (child.name === "Dirt") { 425 | this.seventh = GSAP.to(child.scale, { 426 | x: 1, 427 | y: 1, 428 | z: 1, 429 | ease: "back.out(2)", 430 | duration: 0.3, 431 | }); 432 | } 433 | if (child.name === "Flower1") { 434 | this.eighth = GSAP.to(child.scale, { 435 | x: 1, 436 | y: 1, 437 | z: 1, 438 | ease: "back.out(2)", 439 | duration: 0.3, 440 | }); 441 | } 442 | if (child.name === "Flower2") { 443 | this.ninth = GSAP.to(child.scale, { 444 | x: 1, 445 | y: 1, 446 | z: 1, 447 | ease: "back.out(2)", 448 | duration: 0.3, 449 | }); 450 | } 451 | }); 452 | this.secondPartTimeline.add(this.first); 453 | this.secondPartTimeline.add(this.second); 454 | this.secondPartTimeline.add(this.third); 455 | this.secondPartTimeline.add(this.fourth, "-=0.2"); 456 | this.secondPartTimeline.add(this.fifth, "-=0.2"); 457 | this.secondPartTimeline.add(this.sixth, "-=0.2"); 458 | this.secondPartTimeline.add(this.seventh, "-=0.2"); 459 | this.secondPartTimeline.add(this.eighth); 460 | this.secondPartTimeline.add(this.ninth, "-=0.1"); 461 | }, 462 | }); 463 | } 464 | resize() {} 465 | 466 | update() {} 467 | } 468 | -------------------------------------------------------------------------------- /Experience/World/Environment.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import Experience from "../Experience.js"; 3 | import GSAP from "gsap"; 4 | import GUI from "lil-gui"; 5 | 6 | export default class Environment { 7 | constructor() { 8 | this.experience = new Experience(); 9 | this.scene = this.experience.scene; 10 | 11 | // this.gui = new GUI({ container: document.querySelector(".hero-main") }); 12 | this.obj = { 13 | colorObj: { r: 0, g: 0, b: 0 }, 14 | intensity: 3, 15 | }; 16 | 17 | this.setSunlight(); 18 | // this.setGUI(); 19 | } 20 | 21 | setGUI() { 22 | this.gui.addColor(this.obj, "colorObj").onChange(() => { 23 | this.sunLight.color.copy(this.obj.colorObj); 24 | this.ambientLight.color.copy(this.obj.colorObj); 25 | console.log(this.obj.colorObj); 26 | }); 27 | this.gui.add(this.obj, "intensity", 0, 10).onChange(() => { 28 | this.sunLight.intensity = this.obj.intensity; 29 | this.sunLight.ambientLight = this.obj.intensity; 30 | }); 31 | } 32 | 33 | setSunlight() { 34 | this.sunLight = new THREE.DirectionalLight("#ffffff", 3); 35 | this.sunLight.castShadow = true; 36 | this.sunLight.shadow.camera.far = 20; 37 | this.sunLight.shadow.mapSize.set(2048, 2048); 38 | this.sunLight.shadow.normalBias = 0.05; 39 | // const helper = new THREE.CameraHelper(this.sunLight.shadow.camera); 40 | // this.scene.add(helper); 41 | 42 | this.sunLight.position.set(-1.5, 7, 3); 43 | this.scene.add(this.sunLight); 44 | 45 | this.ambientLight = new THREE.AmbientLight("#ffffff", 1); 46 | this.scene.add(this.ambientLight); 47 | } 48 | 49 | switchTheme(theme) { 50 | // console.log(this.sunLight); 51 | if (theme === "dark") { 52 | GSAP.to(this.sunLight.color, { 53 | r: 0.17254901960784313, 54 | g: 0.23137254901960785, 55 | b: 0.6862745098039216, 56 | }); 57 | GSAP.to(this.ambientLight.color, { 58 | r: 0.17254901960784313, 59 | g: 0.23137254901960785, 60 | b: 0.6862745098039216, 61 | }); 62 | GSAP.to(this.sunLight, { 63 | intensity: 0.78, 64 | }); 65 | GSAP.to(this.ambientLight, { 66 | intensity: 0.78, 67 | }); 68 | } else { 69 | GSAP.to(this.sunLight.color, { 70 | r: 255 / 255, 71 | g: 255 / 255, 72 | b: 255 / 255, 73 | }); 74 | GSAP.to(this.ambientLight.color, { 75 | r: 255 / 255, 76 | g: 255 / 255, 77 | b: 255 / 255, 78 | }); 79 | GSAP.to(this.sunLight, { 80 | intensity: 3, 81 | }); 82 | GSAP.to(this.ambientLight, { 83 | intensity: 1, 84 | }); 85 | } 86 | } 87 | 88 | resize() {} 89 | 90 | update() {} 91 | } 92 | -------------------------------------------------------------------------------- /Experience/World/Floor.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import Experience from "../Experience.js"; 3 | 4 | export default class Floor { 5 | constructor() { 6 | this.experience = new Experience(); 7 | this.scene = this.experience.scene; 8 | 9 | this.setFloor(); 10 | this.setCircles(); 11 | } 12 | 13 | setFloor() { 14 | this.geometry = new THREE.PlaneGeometry(100, 100); 15 | this.material = new THREE.MeshStandardMaterial({ 16 | color: 0xffe6a2, 17 | side: THREE.BackSide, 18 | }); 19 | this.plane = new THREE.Mesh(this.geometry, this.material); 20 | this.scene.add(this.plane); 21 | this.plane.rotation.x = Math.PI / 2; 22 | this.plane.position.y = -0.3; 23 | this.plane.receiveShadow = true; 24 | } 25 | 26 | setCircles() { 27 | const geometry = new THREE.CircleGeometry(5, 64); 28 | const material = new THREE.MeshStandardMaterial({ color: 0xe5a1aa }); 29 | const material2 = new THREE.MeshStandardMaterial({ color: 0x8395cd }); 30 | const material3 = new THREE.MeshStandardMaterial({ color: 0x7ad0ac }); 31 | 32 | this.circleFirst = new THREE.Mesh(geometry, material); 33 | this.circleSecond = new THREE.Mesh(geometry, material2); 34 | this.circleThird = new THREE.Mesh(geometry, material3); 35 | 36 | this.circleFirst.position.y = -0.29; 37 | 38 | this.circleSecond.position.y = -0.28; 39 | this.circleSecond.position.x = 2; 40 | 41 | this.circleThird.position.y = -0.27; 42 | 43 | this.circleFirst.scale.set(0, 0, 0); 44 | this.circleSecond.scale.set(0, 0, 0); 45 | this.circleThird.scale.set(0, 0, 0); 46 | 47 | this.circleFirst.rotation.x = 48 | this.circleSecond.rotation.x = 49 | this.circleThird.rotation.x = 50 | -Math.PI / 2; 51 | 52 | this.circleFirst.receiveShadow = 53 | this.circleSecond.receiveShadow = 54 | this.circleThird.receiveShadow = 55 | true; 56 | 57 | this.scene.add(this.circleFirst); 58 | this.scene.add(this.circleSecond); 59 | this.scene.add(this.circleThird); 60 | } 61 | 62 | resize() {} 63 | 64 | update() {} 65 | } 66 | -------------------------------------------------------------------------------- /Experience/World/Room.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import Experience from "../Experience.js"; 3 | import GSAP from "gsap"; 4 | import { RectAreaLightHelper } from "three/examples/jsm/helpers/RectAreaLightHelper.js"; 5 | 6 | export default class Room { 7 | constructor() { 8 | this.experience = new Experience(); 9 | this.scene = this.experience.scene; 10 | this.resources = this.experience.resources; 11 | this.time = this.experience.time; 12 | this.room = this.resources.items.room; 13 | this.actualRoom = this.room.scene; 14 | this.roomChildren = {}; 15 | 16 | this.lerp = { 17 | current: 0, 18 | target: 0, 19 | ease: 0.1, 20 | }; 21 | 22 | this.setModel(); 23 | this.setAnimation(); 24 | this.onMouseMove(); 25 | } 26 | 27 | setModel() { 28 | this.actualRoom.children.forEach((child) => { 29 | child.castShadow = true; 30 | child.receiveShadow = true; 31 | 32 | if (child instanceof THREE.Group) { 33 | child.children.forEach((groupchild) => { 34 | console.log(groupchild.material); 35 | groupchild.castShadow = true; 36 | groupchild.receiveShadow = true; 37 | }); 38 | } 39 | 40 | // console.log(child); 41 | 42 | if (child.name === "Aquarium") { 43 | // console.log(child); 44 | child.children[0].material = new THREE.MeshPhysicalMaterial(); 45 | child.children[0].material.roughness = 0; 46 | child.children[0].material.color.set(0x549dd2); 47 | child.children[0].material.ior = 3; 48 | child.children[0].material.transmission = 1; 49 | child.children[0].material.opacity = 1; 50 | child.children[0].material.depthWrite = false; 51 | child.children[0].material.depthTest = false; 52 | } 53 | 54 | if (child.name === "Computer") { 55 | child.children[1].material = new THREE.MeshBasicMaterial({ 56 | map: this.resources.items.screen, 57 | }); 58 | } 59 | 60 | if (child.name === "Mini_Floor") { 61 | child.position.x = -0.289521; 62 | child.position.z = 8.83572; 63 | } 64 | 65 | // if ( 66 | // child.name === "Mailbox" || 67 | // child.name === "Lamp" || 68 | // child.name === "FloorFirst" || 69 | // child.name === "FloorSecond" || 70 | // child.name === "FloorThird" || 71 | // child.name === "Dirt" || 72 | // child.name === "Flower1" || 73 | // child.name === "Flower2" 74 | // ) { 75 | // child.scale.set(0, 0, 0); 76 | // } 77 | 78 | child.scale.set(0, 0, 0); 79 | if (child.name === "Cube") { 80 | // child.scale.set(1, 1, 1); 81 | child.position.set(0, -1, 0); 82 | child.rotation.y = Math.PI / 4; 83 | } 84 | 85 | this.roomChildren[child.name.toLowerCase()] = child; 86 | }); 87 | 88 | const width = 0.5; 89 | const height = 0.7; 90 | const intensity = 1; 91 | const rectLight = new THREE.RectAreaLight( 92 | 0xffffff, 93 | intensity, 94 | width, 95 | height 96 | ); 97 | rectLight.position.set(7.68244, 7, 0.5); 98 | rectLight.rotation.x = -Math.PI / 2; 99 | rectLight.rotation.z = Math.PI / 4; 100 | this.actualRoom.add(rectLight); 101 | 102 | this.roomChildren["rectLight"] = rectLight; 103 | 104 | // const rectLightHelper = new RectAreaLightHelper(rectLight); 105 | // rectLight.add(rectLightHelper); 106 | // console.log(this.room); 107 | 108 | this.scene.add(this.actualRoom); 109 | this.actualRoom.scale.set(0.11, 0.11, 0.11); 110 | } 111 | 112 | setAnimation() { 113 | this.mixer = new THREE.AnimationMixer(this.actualRoom); 114 | this.swim = this.mixer.clipAction(this.room.animations[0]); 115 | this.swim.play(); 116 | } 117 | 118 | onMouseMove() { 119 | window.addEventListener("mousemove", (e) => { 120 | this.rotation = 121 | ((e.clientX - window.innerWidth / 2) * 2) / window.innerWidth; 122 | this.lerp.target = this.rotation * 0.05; 123 | }); 124 | } 125 | 126 | resize() {} 127 | 128 | update() { 129 | this.lerp.current = GSAP.utils.interpolate( 130 | this.lerp.current, 131 | this.lerp.target, 132 | this.lerp.ease 133 | ); 134 | 135 | this.actualRoom.rotation.y = this.lerp.current; 136 | 137 | this.mixer.update(this.time.delta * 0.0009); 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /Experience/World/World.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import Experience from "../Experience.js"; 3 | 4 | import Room from "./Room.js"; 5 | import Floor from "./Floor.js"; 6 | import Controls from "./Controls.js"; 7 | import Environment from "./Environment.js"; 8 | import { EventEmitter } from "events"; 9 | 10 | export default class World extends EventEmitter { 11 | constructor() { 12 | super(); 13 | this.experience = new Experience(); 14 | this.sizes = this.experience.sizes; 15 | this.scene = this.experience.scene; 16 | this.canvas = this.experience.canvas; 17 | this.camera = this.experience.camera; 18 | this.resources = this.experience.resources; 19 | this.theme = this.experience.theme; 20 | 21 | this.resources.on("ready", () => { 22 | this.environment = new Environment(); 23 | this.floor = new Floor(); 24 | this.room = new Room(); 25 | // this.controls = new Controls(); 26 | this.emit("worldready"); 27 | }); 28 | 29 | this.theme.on("switch", (theme) => { 30 | this.switchTheme(theme); 31 | }); 32 | 33 | // this.sizes.on("switchdevice", (device) => { 34 | // this.switchDevice(device); 35 | // }); 36 | } 37 | 38 | switchTheme(theme) { 39 | if (this.environment) { 40 | this.environment.switchTheme(theme); 41 | } 42 | } 43 | 44 | // switchDevice(device) { 45 | // if (this.controls) { 46 | // this.controls.switchDevice(device); 47 | // } 48 | // } 49 | 50 | resize() {} 51 | 52 | update() { 53 | if (this.room) { 54 | this.room.update(); 55 | } 56 | if (this.controls) { 57 | this.controls.update(); 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /LEARN.md: -------------------------------------------------------------------------------- 1 | # 3D PORTFOLIO 2 | 3 | **[Live demo](https://mdamiruddin-3dportfolio.vercel.app)** 4 | 5 | This is the modification of **[Bokoko33's Portfolio](https://bokoko33.me/)** Website Code. 6 | 7 | ![Home page screenshot](public/social/screenshot.png?raw=true "Home page screenshot") 8 | 9 | ## For Setup 10 | 11 | ``` 12 | npm install 13 | npm run dev 14 | ``` 15 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Md Amiruddin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 3D PORTFOLIO 2 | 3 | **[Live demo](https://mdamiruddin-3dportfolio.vercel.app)** 4 | 5 | This is the modification of **[Bokoko33's Portfolio](https://bokoko33.me/)** Website Code. Please do not use this exact idea, 6 | but feel free to use it as a starting point/inspiration. 7 | 8 | ![Home page screenshot](public/social/screenshot.png?raw=true "Home page screenshot") 9 | 10 | ## For Setup 11 | 12 | ``` 13 | npm install 14 | npm run dev 15 | ``` 16 | 17 | 18 | -------------------------------------------------------------------------------- /favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Md Amiruddin 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 |
19 | 20 | 21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | 31 |
32 | 33 |
34 |
35 | 36 |
37 | 40 |
41 | 42 |
43 |
44 | 45 |
46 |
47 |
48 | 49 | 50 |
Welcome to my portfolio!
51 |
52 | 53 |
54 | 55 |
56 |

Md Amiruddin

57 |

Cyber Security Student

58 |
59 | 60 |
61 |

Md Amiruddin

62 |

Portfolio

63 |
64 | 65 |
66 |
67 | 68 |
69 | 70 |
71 |
72 |
73 |
74 | 75 |
76 |

77 | About Me 78 |
79 |
80 |
81 |

82 | 01 83 |
84 | 85 | 86 |
87 | 88 |

My name is Md Amiruddin and I'm currently learning from Hack the Box & TryHackMe. My passion lies in identifying, preventing, and resolving computer security issues and I am actively seeking internships or entry-level positions within the field.

89 |

I have a deep foundational understanding of Web application penetration testing, classic encryption and cryptography, as well as operating system and network security such as intrusion detection/prevention systems. I am well-versed in not only the application of modern defense solutions, but also the development and testing of custom security protocols.

90 |

I am always looking for an opportunity to demonstrate my knowledge of cyber security and to collaborate with others in the field. I am eager to make a contribution to any computer security initiatives, and I believe my technical expertise combined with my willingness to learn and act quickly make me an excellent candidate for any cyber-security related positions.

91 |

I love creating CTF Machines and love doing Machines From HackTheBox!✌️.

92 |
93 |
94 |
95 |
96 |
97 |
98 |

EDUCATION

99 |
100 |
101 |
102 |

Government College of Engineering and Leather Technology Graphic

103 |
104 |
105 |

Government College of Engineering and Leather Technology

106 |
107 |
108 |

Bachelor of Technology In Leather Technology

109 |
110 |
111 |

CGPA - 9.0

112 |
113 |

[ 2020 - 2024 ]

114 |
115 |
116 | 117 |
118 | 119 |
120 |
121 |
122 |
123 | 124 |
125 |

126 | My Projects 127 |
128 |
129 |
130 |

131 | 02 132 |
133 | 134 |
135 |

CTF BLOG WRITEUP

136 |

This project is a website dedicated to CTF (Capture The Flag) writeups. The website was designed with the goal of providing detailed and comprehensive analysis on the various challenges from a wide variety of CTF events.

137 |

The website consists of a landing page which contains a list of all the CTF events with links to the write-ups. Each write-up contains a detailed review and explanation of the challenge, an overview of the techniques used to solve it, and a list of key points that were learned throughout the experience.

138 |
139 |

140 |
141 |

See ProjectExternal link

142 | 143 | 144 |

Website Vulnerability Analyzer

145 |

This project is a web vulnerability analyzer written in Python. It aims to scan websites for potential security flaws and report them to the user. The program will first assess the target site for missing patches and outdated software, and then proceed to analyze any links associated with the page for malicious content.

146 |

Once this task is complete, the program will then alert the user of any discovered vulnerabilities in a detailed report. The report will provide information on the discovered vulnerabilities, and suggest remedies to address the issue. Additionally, the program will allow users to set specific parameters and customize their security scans.

147 |
148 |

See ProjectExternal link

149 | 150 |

WhatsApp Automation bot

151 |

This project is about the development of an automated chatbot for Whatsapp that can be used to manage appointments and orders for any store or service. The chatbot will be able to handle incoming messages, notify customers about availability, confirm and schedule appointments, take orders, process and keep track of issues.

152 |

This powerful tool improves productivity and communication with customers and frees up business owners’ time to focus on other areas. The bot will be integrated with WhatsApp, allowing businesses to easily reach their customers and provide a superior customer experience. You can also add custom features to the bot for unique business needs.

153 |
154 | 157 |
158 |
159 |

See ProjectExternal link

160 |

CTF - Valentine Special Challenge

161 |

In this project, I create a Capture The Flag (CTF) challenge based on cryptography and hash cracking.

162 |

I implemented a multitude of cryptography algorithms such as AES256-CBC, BASE-256, which had to be cracked or decrypted in order to reveal the flag. The challenge required the user to gain enough background knowledge on cryptography and hash cracking principles in order to solve the Flag.

163 |
164 | 165 |
166 |
167 |

See ProjectExternal link

168 |

CTF Machine - Crypton

169 |

In this project, I created a Capture the Flag (CTF) challenge based on cryptography. The challenge involved a series of cryptography-related puzzles that had to be solved by players. The puzzles were designed to test the players’ understanding of core cryptographic concepts, such as hashing, symmetric and asymmetric encryption, digital signatures, and more.

170 |

Additionally, the puzzles featured a variety of hash-cracking activities, including brute-force and dictionary attacks. The challenge was designed to increase players' familiarity with the fundamentals of cryptography. The puzzle-solving challenges were designed to be both fun and educational, so that players can learn cryptography by putting their skills to the test in a simulated CTF setting.

171 |
172 | 173 |
174 |
175 |

See ProjectExternal link

176 |
177 |
178 | 179 |
180 | 181 |
182 |
183 |
184 |
185 | 186 |
187 |

188 | Work Experience 189 |
190 |
191 |
192 |

193 | 03 194 |
195 | 196 |
197 |

Cyber Intelligence Solutions Graphic

198 |
199 |
200 |

Cyber Intelligence Solutions

201 |
202 |

Ethical Hacker Intern [ Oct 2022 - Dec 2022 ]

203 |

Junior Cybersecurity Trainee [ Jan 2023 - Present ]

204 |
205 |

• Performing Web Application Penetration Testing.
• Conducting Seminar at Colleges.
• Performing Black box, Grey box & White box Pentests.
• Creating reports, detailing assessment findings & blog writing.

206 |
207 |
208 | 209 | 210 | 211 |
212 |
213 |
214 |
215 |
216 |

Recommendation Letter

217 |
218 |
219 |

220 | 221 |
222 |
223 | 224 | 225 |
226 | 227 |
228 |
229 |
230 |
231 | 232 |
233 |

234 | CONTACT 235 |
236 |
237 |
238 |

239 | 04 240 |
241 | 242 |
243 |

Linkedin

244 |

If you'd like to get in touch, please feel free to connect with me on LinkedIn. On LinkedIn, I am active in discussions about network security, data privacy, and vulnerability management. I am available for interviews and I look forward to connecting with other professionals in the cybersecurity field.

245 |
246 |

LinkedIn

247 |

Github

248 |

I am an aspiring cybersecurity student and avid tech enthusiast. I can be found on Github, where I participate in the open source community. I am always searching for different ways to learn and share knowledge pertaining to cyber security. I stay up to date with the newest technology, vulnerabilities, trends, and cyber security advancements. If you are looking to collaborate with someone who has a passion for learning and innovation, then you've come to the right place!

249 |
250 |

Medium

251 |

Medium

252 |

I'm a cybersecurity enthusiast who enjoys writing CTF writeups on Medium. I share my experience, insights and lessons to help others learn. As I continue to work in this field, I aim to help build a global community where enthusiasts join forces and engage in meaningful conversations.

253 |
254 |

Medium

255 |

CTF Profiles

256 |
257 |

HackTheBox

258 |
259 |
260 |

TryHackMe

261 |
262 |
263 |
264 | Copyright © 2023 - Md Amiruddin 265 |


266 | 267 | 268 | 269 | 270 | 271 |
272 |
273 | 274 | 275 | 276 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | import "./style.css"; 2 | import Experience from "./Experience/Experience.js"; 3 | 4 | const experience = new Experience(document.querySelector(".experience-canvas")); 5 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "boko-tutorial", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "boko-tutorial", 9 | "version": "0.0.0", 10 | "devDependencies": { 11 | "@ashthornton/asscroll": "^2.0.7", 12 | "events": "^3.3.0", 13 | "gsap": "^3.10.4", 14 | "lil-gui": "^0.16.1", 15 | "three": "^0.141.0", 16 | "vite": "^2.9.9" 17 | } 18 | }, 19 | "node_modules/@ashthornton/asscroll": { 20 | "version": "2.0.7", 21 | "resolved": "https://registry.npmjs.org/@ashthornton/asscroll/-/asscroll-2.0.7.tgz", 22 | "integrity": "sha512-8OcuNdd7B1Edi2ERpWR9f6jy6ScpmZWIpKBVt4FyeGmK3ojQBpQ+oU7cDxn11aGAzGp7ULQnMb518gtodII7jQ==", 23 | "dev": true, 24 | "dependencies": { 25 | "@unseenco/e": "^2.2.2" 26 | } 27 | }, 28 | "node_modules/@unseenco/e": { 29 | "version": "2.2.2", 30 | "resolved": "https://registry.npmjs.org/@unseenco/e/-/e-2.2.2.tgz", 31 | "integrity": "sha512-7d+CKXw5rJDz1zkKiAQQGBLOUZ1JqV+c9pTTERSKwfwjjq6sJkoDbo+L0usmu7kDzIUxJKWOtm1JoCTrYNHIZw==", 32 | "dev": true, 33 | "dependencies": { 34 | "selector-set": "^1.1.5" 35 | } 36 | }, 37 | "node_modules/esbuild": { 38 | "version": "0.14.43", 39 | "integrity": "sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA==", 40 | "dev": true, 41 | "hasInstallScript": true, 42 | "bin": { 43 | "esbuild": "bin/esbuild" 44 | }, 45 | "engines": { 46 | "node": ">=12" 47 | }, 48 | "optionalDependencies": { 49 | "esbuild-android-64": "0.14.43", 50 | "esbuild-android-arm64": "0.14.43", 51 | "esbuild-darwin-64": "0.14.43", 52 | "esbuild-darwin-arm64": "0.14.43", 53 | "esbuild-freebsd-64": "0.14.43", 54 | "esbuild-freebsd-arm64": "0.14.43", 55 | "esbuild-linux-32": "0.14.43", 56 | "esbuild-linux-64": "0.14.43", 57 | "esbuild-linux-arm": "0.14.43", 58 | "esbuild-linux-arm64": "0.14.43", 59 | "esbuild-linux-mips64le": "0.14.43", 60 | "esbuild-linux-ppc64le": "0.14.43", 61 | "esbuild-linux-riscv64": "0.14.43", 62 | "esbuild-linux-s390x": "0.14.43", 63 | "esbuild-netbsd-64": "0.14.43", 64 | "esbuild-openbsd-64": "0.14.43", 65 | "esbuild-sunos-64": "0.14.43", 66 | "esbuild-windows-32": "0.14.43", 67 | "esbuild-windows-64": "0.14.43", 68 | "esbuild-windows-arm64": "0.14.43" 69 | } 70 | }, 71 | "node_modules/esbuild-windows-64": { 72 | "version": "0.14.43", 73 | "integrity": "sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw==", 74 | "cpu": [ 75 | "x64" 76 | ], 77 | "dev": true, 78 | "optional": true, 79 | "os": [ 80 | "win32" 81 | ], 82 | "engines": { 83 | "node": ">=12" 84 | } 85 | }, 86 | "node_modules/events": { 87 | "version": "3.3.0", 88 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 89 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 90 | "dev": true, 91 | "engines": { 92 | "node": ">=0.8.x" 93 | } 94 | }, 95 | "node_modules/function-bind": { 96 | "version": "1.1.1", 97 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 98 | "dev": true 99 | }, 100 | "node_modules/gsap": { 101 | "version": "3.10.4", 102 | "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.10.4.tgz", 103 | "integrity": "sha512-6QatdkKxXCMfvCW4rM++0RqyLQAzFX5nwl3yHS0XPgkZBkiSEY3VZVbMltrdtsbER/xZonLtyHt684wRp4erlQ==", 104 | "dev": true 105 | }, 106 | "node_modules/has": { 107 | "version": "1.0.3", 108 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 109 | "dev": true, 110 | "dependencies": { 111 | "function-bind": "^1.1.1" 112 | }, 113 | "engines": { 114 | "node": ">= 0.4.0" 115 | } 116 | }, 117 | "node_modules/is-core-module": { 118 | "version": "2.9.0", 119 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 120 | "dev": true, 121 | "dependencies": { 122 | "has": "^1.0.3" 123 | }, 124 | "funding": { 125 | "url": "https://github.com/sponsors/ljharb" 126 | } 127 | }, 128 | "node_modules/lil-gui": { 129 | "version": "0.16.1", 130 | "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.16.1.tgz", 131 | "integrity": "sha512-6wnnfBvQxJYRhdLyIA+w5b8utwbuVxNmtpTXElm36OSgHa8lyKp00Xz/4AEx3kvodT0AJYgbfadCFWAM0Q8DgQ==", 132 | "dev": true 133 | }, 134 | "node_modules/nanoid": { 135 | "version": "3.3.4", 136 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 137 | "dev": true, 138 | "bin": { 139 | "nanoid": "bin/nanoid.cjs" 140 | }, 141 | "engines": { 142 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 143 | } 144 | }, 145 | "node_modules/path-parse": { 146 | "version": "1.0.7", 147 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 148 | "dev": true 149 | }, 150 | "node_modules/picocolors": { 151 | "version": "1.0.0", 152 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 153 | "dev": true 154 | }, 155 | "node_modules/postcss": { 156 | "version": "8.4.14", 157 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 158 | "dev": true, 159 | "funding": [ 160 | { 161 | "type": "opencollective", 162 | "url": "https://opencollective.com/postcss/" 163 | }, 164 | { 165 | "type": "tidelift", 166 | "url": "https://tidelift.com/funding/github/npm/postcss" 167 | } 168 | ], 169 | "dependencies": { 170 | "nanoid": "^3.3.4", 171 | "picocolors": "^1.0.0", 172 | "source-map-js": "^1.0.2" 173 | }, 174 | "engines": { 175 | "node": "^10 || ^12 || >=14" 176 | } 177 | }, 178 | "node_modules/resolve": { 179 | "version": "1.22.0", 180 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 181 | "dev": true, 182 | "dependencies": { 183 | "is-core-module": "^2.8.1", 184 | "path-parse": "^1.0.7", 185 | "supports-preserve-symlinks-flag": "^1.0.0" 186 | }, 187 | "bin": { 188 | "resolve": "bin/resolve" 189 | }, 190 | "funding": { 191 | "url": "https://github.com/sponsors/ljharb" 192 | } 193 | }, 194 | "node_modules/rollup": { 195 | "version": "2.75.6", 196 | "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", 197 | "dev": true, 198 | "bin": { 199 | "rollup": "dist/bin/rollup" 200 | }, 201 | "engines": { 202 | "node": ">=10.0.0" 203 | }, 204 | "optionalDependencies": { 205 | "fsevents": "~2.3.2" 206 | } 207 | }, 208 | "node_modules/selector-set": { 209 | "version": "1.1.5", 210 | "resolved": "https://registry.npmjs.org/selector-set/-/selector-set-1.1.5.tgz", 211 | "integrity": "sha512-6SQw6yMew5iOZ8/cDHDEnJWRM4ot2mxP6szZyF5ptrBogw4AcS4EXRj/8BUfgAMwVfdL84qpModlBMOl2NVrsQ==", 212 | "dev": true 213 | }, 214 | "node_modules/source-map-js": { 215 | "version": "1.0.2", 216 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 217 | "dev": true, 218 | "engines": { 219 | "node": ">=0.10.0" 220 | } 221 | }, 222 | "node_modules/supports-preserve-symlinks-flag": { 223 | "version": "1.0.0", 224 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 225 | "dev": true, 226 | "engines": { 227 | "node": ">= 0.4" 228 | }, 229 | "funding": { 230 | "url": "https://github.com/sponsors/ljharb" 231 | } 232 | }, 233 | "node_modules/three": { 234 | "version": "0.141.0", 235 | "integrity": "sha512-JaSDAPWuk4RTzG5BYRQm8YZbERUxTfTDVouWgHMisS2to4E5fotMS9F2zPFNOIJyEFTTQDDKPpsgZVThKU3pXA==", 236 | "dev": true 237 | }, 238 | "node_modules/vite": { 239 | "version": "2.9.10", 240 | "integrity": "sha512-TwZRuSMYjpTurLqXspct+HZE7ONiW9d+wSWgvADGxhDPPyoIcNywY+RX4ng+QpK30DCa1l/oZgi2PLZDibhzbQ==", 241 | "dev": true, 242 | "dependencies": { 243 | "esbuild": "^0.14.27", 244 | "postcss": "^8.4.13", 245 | "resolve": "^1.22.0", 246 | "rollup": "^2.59.0" 247 | }, 248 | "bin": { 249 | "vite": "bin/vite.js" 250 | }, 251 | "engines": { 252 | "node": ">=12.2.0" 253 | }, 254 | "optionalDependencies": { 255 | "fsevents": "~2.3.2" 256 | }, 257 | "peerDependencies": { 258 | "less": "*", 259 | "sass": "*", 260 | "stylus": "*" 261 | }, 262 | "peerDependenciesMeta": { 263 | "less": { 264 | "optional": true 265 | }, 266 | "sass": { 267 | "optional": true 268 | }, 269 | "stylus": { 270 | "optional": true 271 | } 272 | } 273 | } 274 | }, 275 | "dependencies": { 276 | "@ashthornton/asscroll": { 277 | "version": "2.0.7", 278 | "resolved": "https://registry.npmjs.org/@ashthornton/asscroll/-/asscroll-2.0.7.tgz", 279 | "integrity": "sha512-8OcuNdd7B1Edi2ERpWR9f6jy6ScpmZWIpKBVt4FyeGmK3ojQBpQ+oU7cDxn11aGAzGp7ULQnMb518gtodII7jQ==", 280 | "dev": true, 281 | "requires": { 282 | "@unseenco/e": "^2.2.2" 283 | } 284 | }, 285 | "@unseenco/e": { 286 | "version": "2.2.2", 287 | "resolved": "https://registry.npmjs.org/@unseenco/e/-/e-2.2.2.tgz", 288 | "integrity": "sha512-7d+CKXw5rJDz1zkKiAQQGBLOUZ1JqV+c9pTTERSKwfwjjq6sJkoDbo+L0usmu7kDzIUxJKWOtm1JoCTrYNHIZw==", 289 | "dev": true, 290 | "requires": { 291 | "selector-set": "^1.1.5" 292 | } 293 | }, 294 | "esbuild": { 295 | "version": "0.14.43", 296 | "integrity": "sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA==", 297 | "dev": true, 298 | "requires": { 299 | "esbuild-android-64": "0.14.43", 300 | "esbuild-android-arm64": "0.14.43", 301 | "esbuild-darwin-64": "0.14.43", 302 | "esbuild-darwin-arm64": "0.14.43", 303 | "esbuild-freebsd-64": "0.14.43", 304 | "esbuild-freebsd-arm64": "0.14.43", 305 | "esbuild-linux-32": "0.14.43", 306 | "esbuild-linux-64": "0.14.43", 307 | "esbuild-linux-arm": "0.14.43", 308 | "esbuild-linux-arm64": "0.14.43", 309 | "esbuild-linux-mips64le": "0.14.43", 310 | "esbuild-linux-ppc64le": "0.14.43", 311 | "esbuild-linux-riscv64": "0.14.43", 312 | "esbuild-linux-s390x": "0.14.43", 313 | "esbuild-netbsd-64": "0.14.43", 314 | "esbuild-openbsd-64": "0.14.43", 315 | "esbuild-sunos-64": "0.14.43", 316 | "esbuild-windows-32": "0.14.43", 317 | "esbuild-windows-64": "0.14.43", 318 | "esbuild-windows-arm64": "0.14.43" 319 | } 320 | }, 321 | "esbuild-windows-64": { 322 | "version": "0.14.43", 323 | "integrity": "sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw==", 324 | "dev": true, 325 | "optional": true 326 | }, 327 | "events": { 328 | "version": "3.3.0", 329 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 330 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 331 | "dev": true 332 | }, 333 | "function-bind": { 334 | "version": "1.1.1", 335 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 336 | "dev": true 337 | }, 338 | "gsap": { 339 | "version": "3.10.4", 340 | "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.10.4.tgz", 341 | "integrity": "sha512-6QatdkKxXCMfvCW4rM++0RqyLQAzFX5nwl3yHS0XPgkZBkiSEY3VZVbMltrdtsbER/xZonLtyHt684wRp4erlQ==", 342 | "dev": true 343 | }, 344 | "has": { 345 | "version": "1.0.3", 346 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 347 | "dev": true, 348 | "requires": { 349 | "function-bind": "^1.1.1" 350 | } 351 | }, 352 | "is-core-module": { 353 | "version": "2.9.0", 354 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 355 | "dev": true, 356 | "requires": { 357 | "has": "^1.0.3" 358 | } 359 | }, 360 | "lil-gui": { 361 | "version": "0.16.1", 362 | "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.16.1.tgz", 363 | "integrity": "sha512-6wnnfBvQxJYRhdLyIA+w5b8utwbuVxNmtpTXElm36OSgHa8lyKp00Xz/4AEx3kvodT0AJYgbfadCFWAM0Q8DgQ==", 364 | "dev": true 365 | }, 366 | "nanoid": { 367 | "version": "3.3.4", 368 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 369 | "dev": true 370 | }, 371 | "path-parse": { 372 | "version": "1.0.7", 373 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 374 | "dev": true 375 | }, 376 | "picocolors": { 377 | "version": "1.0.0", 378 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 379 | "dev": true 380 | }, 381 | "postcss": { 382 | "version": "8.4.14", 383 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 384 | "dev": true, 385 | "requires": { 386 | "nanoid": "^3.3.4", 387 | "picocolors": "^1.0.0", 388 | "source-map-js": "^1.0.2" 389 | } 390 | }, 391 | "resolve": { 392 | "version": "1.22.0", 393 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 394 | "dev": true, 395 | "requires": { 396 | "is-core-module": "^2.8.1", 397 | "path-parse": "^1.0.7", 398 | "supports-preserve-symlinks-flag": "^1.0.0" 399 | } 400 | }, 401 | "rollup": { 402 | "version": "2.75.6", 403 | "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", 404 | "dev": true, 405 | "requires": { 406 | "fsevents": "~2.3.2" 407 | } 408 | }, 409 | "selector-set": { 410 | "version": "1.1.5", 411 | "resolved": "https://registry.npmjs.org/selector-set/-/selector-set-1.1.5.tgz", 412 | "integrity": "sha512-6SQw6yMew5iOZ8/cDHDEnJWRM4ot2mxP6szZyF5ptrBogw4AcS4EXRj/8BUfgAMwVfdL84qpModlBMOl2NVrsQ==", 413 | "dev": true 414 | }, 415 | "source-map-js": { 416 | "version": "1.0.2", 417 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 418 | "dev": true 419 | }, 420 | "supports-preserve-symlinks-flag": { 421 | "version": "1.0.0", 422 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 423 | "dev": true 424 | }, 425 | "three": { 426 | "version": "0.141.0", 427 | "integrity": "sha512-JaSDAPWuk4RTzG5BYRQm8YZbERUxTfTDVouWgHMisS2to4E5fotMS9F2zPFNOIJyEFTTQDDKPpsgZVThKU3pXA==", 428 | "dev": true 429 | }, 430 | "vite": { 431 | "version": "2.9.10", 432 | "integrity": "sha512-TwZRuSMYjpTurLqXspct+HZE7ONiW9d+wSWgvADGxhDPPyoIcNywY+RX4ng+QpK30DCa1l/oZgi2PLZDibhzbQ==", 433 | "dev": true, 434 | "requires": { 435 | "esbuild": "^0.14.27", 436 | "fsevents": "~2.3.2", 437 | "postcss": "^8.4.13", 438 | "resolve": "^1.22.0", 439 | "rollup": "^2.59.0" 440 | } 441 | } 442 | } 443 | } 444 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "boko-tutorial", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite --host", 7 | "build": "vite build", 8 | "preview": "vite preview" 9 | }, 10 | "devDependencies": { 11 | "@ashthornton/asscroll": "^2.0.7", 12 | "events": "^3.3.0", 13 | "gsap": "^3.10.4", 14 | "lil-gui": "^0.16.1", 15 | "three": "^0.141.0", 16 | "vite": "^2.9.9" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /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/ProgrammeChef/mdamiruddin-3dportfolio/cb914f4dbe66f5f9561dcd8ac8ef9d3f8f42954d/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