├── .gitignore ├── lesson_1 ├── index.html └── script.js ├── lesson_2 ├── index.html └── script.js ├── three.min.js └── threejs_main ├── .gitignore ├── bundler ├── webpack.common.js ├── webpack.dev.js └── webpack.prod.js ├── package-lock.json ├── package.json ├── src ├── index.html ├── script.js └── style.css └── static ├── models ├── Duck │ ├── Duck.gltf │ ├── Duck0.bin │ └── DuckCM.png └── fox │ ├── Fox.bin │ ├── Fox.gltf │ └── Texture.png └── textures ├── checkerboard-1024x1024.png ├── checkerboard-8x8.png ├── door ├── alpha.jpg ├── ambientOcclusion.jpg ├── color.jpg ├── height.jpg ├── metalness.jpg ├── normal.jpg └── roughness.jpg ├── lava ├── ambientOcclusion.jpg ├── basecolor.jpg ├── emissive.jpg ├── height.png ├── normal.jpg └── roughness.jpg └── minecraft.png /.gitignore: -------------------------------------------------------------------------------- 1 | # ---- VisualStudioCode ---- 2 | .vscode/* 3 | .vscode 4 | !.vscode/settings.json 5 | !.vscode/tasks.json 6 | !.vscode/launch.json 7 | !.vscode/extensions.json 8 | !.vscode/*.code-snippets 9 | 10 | # Local History for Visual Studio Code 11 | .history/ 12 | 13 | # Built Visual Studio Code Extensions 14 | *.vsix 15 | 16 | # ---- macOS ---- 17 | # General 18 | .DS_Store 19 | .AppleDouble 20 | .LSOverride 21 | 22 | # Icon must end with two \r 23 | Icon 24 | 25 | 26 | # Thumbnails 27 | ._* 28 | 29 | # Files that might appear in the root of a volume 30 | .DocumentRevisions-V100 31 | .fseventsd 32 | .Spotlight-V100 33 | .TemporaryItems 34 | .Trashes 35 | .VolumeIcon.icns 36 | .com.apple.timemachine.donotpresent 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | 45 | # ---- Node ---- 46 | # Logs 47 | logs 48 | *.log 49 | npm-debug.log* 50 | yarn-debug.log* 51 | yarn-error.log* 52 | lerna-debug.log* 53 | .pnpm-debug.log* 54 | 55 | # Diagnostic reports (https://nodejs.org/api/report.html) 56 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 57 | 58 | # Runtime data 59 | pids 60 | *.pid 61 | *.seed 62 | *.pid.lock 63 | 64 | # Directory for instrumented libs generated by jscoverage/JSCover 65 | lib-cov 66 | 67 | # Coverage directory used by tools like istanbul 68 | coverage 69 | *.lcov 70 | 71 | # nyc test coverage 72 | .nyc_output 73 | 74 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 75 | .grunt 76 | 77 | # Bower dependency directory (https://bower.io/) 78 | bower_components 79 | 80 | # node-waf configuration 81 | .lock-wscript 82 | 83 | # Compiled binary addons (https://nodejs.org/api/addons.html) 84 | build/Release 85 | 86 | # Dependency directories 87 | node_modules/ 88 | jspm_packages/ 89 | 90 | # Snowpack dependency directory (https://snowpack.dev/) 91 | web_modules/ 92 | 93 | # TypeScript cache 94 | *.tsbuildinfo 95 | 96 | # Optional npm cache directory 97 | .npm 98 | 99 | # Optional eslint cache 100 | .eslintcache 101 | 102 | # Optional stylelint cache 103 | .stylelintcache 104 | 105 | # Microbundle cache 106 | .rpt2_cache/ 107 | .rts2_cache_cjs/ 108 | .rts2_cache_es/ 109 | .rts2_cache_umd/ 110 | 111 | # Optional REPL history 112 | .node_repl_history 113 | 114 | # Output of 'npm pack' 115 | *.tgz 116 | 117 | # Yarn Integrity file 118 | .yarn-integrity 119 | 120 | # dotenv environment variable files 121 | .env 122 | .env.development.local 123 | .env.test.local 124 | .env.production.local 125 | .env.local 126 | 127 | # parcel-bundler cache (https://parceljs.org/) 128 | .cache 129 | .parcel-cache 130 | 131 | # Next.js build output 132 | .next 133 | out 134 | 135 | # Nuxt.js build / generate output 136 | .nuxt 137 | dist 138 | 139 | # Gatsby files 140 | .cache/ 141 | # Comment in the public line in if your project uses Gatsby and not Next.js 142 | # https://nextjs.org/blog/next-9-1#public-directory-support 143 | # public 144 | 145 | # vuepress build output 146 | .vuepress/dist 147 | 148 | # vuepress v2.x temp and cache directory 149 | .temp 150 | .cache 151 | 152 | # Docusaurus cache and generated files 153 | .docusaurus 154 | 155 | # Serverless directories 156 | .serverless/ 157 | 158 | # FuseBox cache 159 | .fusebox/ 160 | 161 | # DynamoDB Local files 162 | .dynamodb/ 163 | 164 | # TernJS port file 165 | .tern-port 166 | 167 | # Stores VSCode versions used for testing VSCode extensions 168 | .vscode-test 169 | 170 | # yarn v2 171 | .yarn/cache 172 | .yarn/unplugged 173 | .yarn/build-state.yml 174 | .yarn/install-state.gz 175 | .pnp.* 176 | -------------------------------------------------------------------------------- /lesson_1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Курс three.js 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /lesson_1/script.js: -------------------------------------------------------------------------------- 1 | const camera = new THREE.PerspectiveCamera( 2 | 70, 3 | window.innerWidth / window.innerHeight, 4 | 0.01, 5 | 10 6 | ); 7 | camera.position.z = 1; 8 | 9 | const scene = new THREE.Scene(); 10 | 11 | const geometry = new THREE.BoxGeometry(0.2, 0.2, 0.2); 12 | const material = new THREE.MeshNormalMaterial(); 13 | 14 | const mesh = new THREE.Mesh(geometry, material); 15 | scene.add(mesh); 16 | 17 | const renderer = new THREE.WebGLRenderer({ antialias: true }); 18 | renderer.setSize(window.innerWidth, window.innerHeight); 19 | renderer.setAnimationLoop(animation); 20 | document.body.appendChild(renderer.domElement); 21 | 22 | // animation 23 | 24 | function animation(time) { 25 | mesh.rotation.x = time / 2000; 26 | mesh.rotation.y = time / 1000; 27 | 28 | renderer.render(scene, camera); 29 | } 30 | 31 | console.log(THREE); 32 | -------------------------------------------------------------------------------- /lesson_2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Курс three.js 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /lesson_2/script.js: -------------------------------------------------------------------------------- 1 | // Сцена 2 | const scene = new THREE.Scene(); 3 | 4 | // Объект 5 | const geometry = new THREE.BoxGeometry(1, 1, 1); 6 | const material = new THREE.MeshBasicMaterial({ color: 'purple' }); 7 | const mesh = new THREE.Mesh(geometry, material); 8 | 9 | scene.add(mesh); 10 | 11 | // Камера 12 | const sizes = { 13 | width: 600, 14 | height: 600, 15 | }; 16 | const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height); 17 | camera.position.z = 3; 18 | camera.position.y = 1; 19 | 20 | scene.add(camera); 21 | 22 | const canvas = document.querySelector('.canvas'); 23 | 24 | const renderer = new THREE.WebGLRenderer({ canvas }); 25 | 26 | renderer.setSize(sizes.width, sizes.height); 27 | 28 | renderer.render(scene, camera); 29 | -------------------------------------------------------------------------------- /threejs_main/.gitignore: -------------------------------------------------------------------------------- 1 | # ---- macOS ---- 2 | # General 3 | .DS_Store 4 | .AppleDouble 5 | .LSOverride 6 | 7 | # Icon must end with two \r 8 | Icon 9 | 10 | 11 | # Thumbnails 12 | ._* 13 | 14 | # Files that might appear in the root of a volume 15 | .DocumentRevisions-V100 16 | .fseventsd 17 | .Spotlight-V100 18 | .TemporaryItems 19 | .Trashes 20 | .VolumeIcon.icns 21 | .com.apple.timemachine.donotpresent 22 | 23 | # Directories potentially created on remote AFP share 24 | .AppleDB 25 | .AppleDesktop 26 | Network Trash Folder 27 | Temporary Items 28 | .apdisk 29 | 30 | # ---- Node ---- 31 | # Logs 32 | logs 33 | *.log 34 | npm-debug.log* 35 | yarn-debug.log* 36 | yarn-error.log* 37 | lerna-debug.log* 38 | .pnpm-debug.log* 39 | 40 | # Diagnostic reports (https://nodejs.org/api/report.html) 41 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 42 | 43 | # Runtime data 44 | pids 45 | *.pid 46 | *.seed 47 | *.pid.lock 48 | 49 | # Directory for instrumented libs generated by jscoverage/JSCover 50 | lib-cov 51 | 52 | # Coverage directory used by tools like istanbul 53 | coverage 54 | *.lcov 55 | 56 | # nyc test coverage 57 | .nyc_output 58 | 59 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 60 | .grunt 61 | 62 | # Bower dependency directory (https://bower.io/) 63 | bower_components 64 | 65 | # node-waf configuration 66 | .lock-wscript 67 | 68 | # Compiled binary addons (https://nodejs.org/api/addons.html) 69 | build/Release 70 | 71 | # Dependency directories 72 | node_modules/ 73 | jspm_packages/ 74 | 75 | # Snowpack dependency directory (https://snowpack.dev/) 76 | web_modules/ 77 | 78 | # TypeScript cache 79 | *.tsbuildinfo 80 | 81 | # Optional npm cache directory 82 | .npm 83 | 84 | # Optional eslint cache 85 | .eslintcache 86 | 87 | # Optional stylelint cache 88 | .stylelintcache 89 | 90 | # Microbundle cache 91 | .rpt2_cache/ 92 | .rts2_cache_cjs/ 93 | .rts2_cache_es/ 94 | .rts2_cache_umd/ 95 | 96 | # Optional REPL history 97 | .node_repl_history 98 | 99 | # Output of 'npm pack' 100 | *.tgz 101 | 102 | # Yarn Integrity file 103 | .yarn-integrity 104 | 105 | # dotenv environment variable files 106 | .env 107 | .env.development.local 108 | .env.test.local 109 | .env.production.local 110 | .env.local 111 | 112 | # parcel-bundler cache (https://parceljs.org/) 113 | .cache 114 | .parcel-cache 115 | 116 | # Next.js build output 117 | .next 118 | out 119 | 120 | # Nuxt.js build / generate output 121 | .nuxt 122 | dist 123 | 124 | # Gatsby files 125 | .cache/ 126 | # Comment in the public line in if your project uses Gatsby and not Next.js 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | # public 129 | 130 | # vuepress build output 131 | .vuepress/dist 132 | 133 | # vuepress v2.x temp and cache directory 134 | .temp 135 | .cache 136 | 137 | # Docusaurus cache and generated files 138 | .docusaurus 139 | 140 | # Serverless directories 141 | .serverless/ 142 | 143 | # FuseBox cache 144 | .fusebox/ 145 | 146 | # DynamoDB Local files 147 | .dynamodb/ 148 | 149 | # TernJS port file 150 | .tern-port 151 | 152 | # Stores VSCode versions used for testing VSCode extensions 153 | .vscode-test 154 | 155 | # yarn v2 156 | .yarn/cache 157 | .yarn/unplugged 158 | .yarn/build-state.yml 159 | .yarn/install-state.gz 160 | .pnp.* 161 | -------------------------------------------------------------------------------- /threejs_main/bundler/webpack.common.js: -------------------------------------------------------------------------------- 1 | const CopyWebpackPlugin = require('copy-webpack-plugin'); 2 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 3 | const MiniCSSExtractPlugin = require('mini-css-extract-plugin'); 4 | const path = require('path'); 5 | 6 | module.exports = { 7 | entry: path.resolve(__dirname, '../src/script.js'), 8 | output: 9 | { 10 | hashFunction: 'xxhash64', 11 | filename: 'bundle.[contenthash].js', 12 | path: path.resolve(__dirname, '../dist') 13 | }, 14 | devtool: 'source-map', 15 | plugins: 16 | [ 17 | new CopyWebpackPlugin({ 18 | patterns: [ 19 | { 20 | from: path.resolve(__dirname, '../static'), 21 | noErrorOnMissing: true 22 | } 23 | ] 24 | }), 25 | new HtmlWebpackPlugin({ 26 | template: path.resolve(__dirname, '../src/index.html'), 27 | minify: true 28 | }), 29 | new MiniCSSExtractPlugin() 30 | ], 31 | module: 32 | { 33 | rules: 34 | [ 35 | { 36 | test: /\.(html)$/, 37 | use: 38 | [ 39 | 'html-loader' 40 | ] 41 | }, 42 | { 43 | test: /\.js$/, 44 | exclude: /node_modules/, 45 | use: 46 | [ 47 | 'babel-loader' 48 | ] 49 | }, 50 | { 51 | test: /\.css$/, 52 | use: 53 | [ 54 | MiniCSSExtractPlugin.loader, 55 | 'css-loader' 56 | ] 57 | }, 58 | { 59 | test: /\.(jpg|png|gif|svg)$/, 60 | type: 'asset/resource', 61 | generator: 62 | { 63 | filename: 'assets/images/[hash][ext]' 64 | } 65 | }, 66 | { 67 | test: /\.(ttf|eot|woff|woff2)$/, 68 | type: 'asset/resource', 69 | generator: 70 | { 71 | filename: 'assets/fonts/[hash][ext]' 72 | } 73 | } 74 | ] 75 | } 76 | }; -------------------------------------------------------------------------------- /threejs_main/bundler/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { merge } = require('webpack-merge'); 3 | const commonConfiguration = require('./webpack.common.js'); 4 | const ip = require('ip'); 5 | 6 | const infoColor = (message) => 7 | `\u001b[1m\u001b[34m${message}\u001b[39m\u001b[22m`; 8 | 9 | module.exports = merge(commonConfiguration, { 10 | stats: 'errors-warnings', 11 | mode: 'development', 12 | infrastructureLogging: { 13 | level: 'warn', 14 | }, 15 | devServer: { 16 | host: 'localhost', 17 | port: 3000, 18 | open: true, 19 | https: false, 20 | allowedHosts: 'all', 21 | hot: true, 22 | watchFiles: ['src/**', 'static/**'], 23 | static: { 24 | watch: true, 25 | directory: path.join(__dirname, '../static'), 26 | }, 27 | client: { 28 | logging: 'none', 29 | overlay: true, 30 | progress: false, 31 | }, 32 | onAfterSetupMiddleware: function (devServer) { 33 | const port = devServer.options.port; 34 | const https = devServer.options.https ? 's' : ''; 35 | const localIp = ip.address(); 36 | const domain1 = `http${https}://${localIp}:${port}`; 37 | const domain2 = `http${https}://localhost:${port}`; 38 | 39 | console.log( 40 | `Проект запущен на:\n - ${infoColor(domain1)}\n - ${infoColor( 41 | domain2 42 | )}` 43 | ); 44 | }, 45 | }, 46 | }); 47 | -------------------------------------------------------------------------------- /threejs_main/bundler/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const { merge } = require('webpack-merge'); 2 | const commonConfiguration = require('./webpack.common.js'); 3 | const { CleanWebpackPlugin } = require('clean-webpack-plugin'); 4 | 5 | module.exports = merge(commonConfiguration, { 6 | mode: 'production', 7 | plugins: [new CleanWebpackPlugin()], 8 | }); 9 | -------------------------------------------------------------------------------- /threejs_main/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "threejs_main", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "webpack --config ./bundler/webpack.prod.js", 8 | "start": "webpack serve --config ./bundler/webpack.dev.js", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "@babel/core": "^7.22.1", 16 | "@babel/preset-env": "^7.22.4", 17 | "babel-loader": "^9.1.2", 18 | "clean-webpack-plugin": "^4.0.0", 19 | "copy-webpack-plugin": "^11.0.0", 20 | "css-loader": "^6.8.1", 21 | "file-loader": "^6.2.0", 22 | "html-loader": "^4.2.0", 23 | "html-webpack-plugin": "^5.5.1", 24 | "ip": "^1.1.8", 25 | "mini-css-extract-plugin": "^2.7.6", 26 | "portfinder-sync": "^0.0.2", 27 | "raw-loader": "^4.0.2", 28 | "style-loader": "^3.3.3", 29 | "webpack": "^5.86.0", 30 | "webpack-cli": "^5.1.4", 31 | "webpack-dev-server": "^4.15.0", 32 | "webpack-merge": "^5.9.0" 33 | }, 34 | "dependencies": { 35 | "lil-gui": "^0.18.2", 36 | "stats.js": "^0.17.0", 37 | "three": "^0.153.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /threejs_main/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Курс three.js 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /threejs_main/src/script.js: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three'; 2 | import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; 3 | import Stats from 'stats.js'; 4 | import * as dat from 'lil-gui'; 5 | import './style.css'; 6 | 7 | const scene = new THREE.Scene(); 8 | const canvas = document.querySelector('.canvas'); 9 | 10 | const stats = new Stats(); 11 | stats.showPanel(0); 12 | document.body.appendChild(stats.dom); 13 | 14 | const sizes = { 15 | width: window.innerWidth, 16 | height: window.innerHeight, 17 | }; 18 | 19 | const cursor = { 20 | x: 0, 21 | y: 0, 22 | }; 23 | 24 | const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height); 25 | camera.position.z = 5; 26 | camera.position.y = 0.8; 27 | 28 | const controls = new OrbitControls(camera, canvas); 29 | controls.enableDamping = true; 30 | 31 | scene.add(camera); 32 | 33 | const gui = new dat.GUI({ closeFolders: true, width: 200 }); 34 | 35 | const textureLoader = new THREE.TextureLoader(); 36 | const color = textureLoader.load('/textures/lava/basecolor.jpg'); 37 | const roughness = textureLoader.load('/textures/lava/roughness.jpg'); 38 | const norm = textureLoader.load('/textures/lava/normal.jpg'); 39 | const ao = textureLoader.load('/textures/lava/ambientOcclusion.jpg'); 40 | const emissive = textureLoader.load('/textures/lava/emissive.jpg'); 41 | const height = textureLoader.load('/textures/lava/height.png'); 42 | 43 | const geometry = new THREE.SphereGeometry(2, 100, 100); 44 | const material = new THREE.MeshStandardMaterial({ 45 | map: color, 46 | roughnessMap: roughness, 47 | normalMap: norm, 48 | aoMap: ao, 49 | emissive: emissive, 50 | displacementMap: height, 51 | displacementScale: 0.3 52 | }); 53 | const mesh = new THREE.Mesh(geometry, material); 54 | scene.add(mesh); 55 | 56 | gui.add(mesh.material, 'roughness').min(0).max(1); 57 | gui.add(mesh.material, 'aoMapIntensity').min(0).max(1); 58 | gui.add(mesh.material, 'displacementScale').min(0).max(1.5); 59 | gui.add(mesh.material.normalScale, 'x').min(0).max(5); 60 | gui.add(mesh.material.normalScale, 'y').min(0).max(5); 61 | 62 | 63 | const light = new THREE.AmbientLight(0xefefef, 1.5); 64 | const pointLight = new THREE.PointLight(0xff9000, 3); 65 | pointLight.position.set(3, 3, 3); 66 | const pointLight2 = new THREE.PointLight(0x000000, 6); 67 | pointLight2.position.set(-3, -3, 3); 68 | 69 | scene.add(light); 70 | scene.add(pointLight); 71 | scene.add(pointLight2) 72 | 73 | const renderer = new THREE.WebGLRenderer({ canvas }); 74 | renderer.setSize(sizes.width, sizes.height); 75 | renderer.render(scene, camera); 76 | 77 | const clock = new THREE.Clock(); 78 | const tick = () => { 79 | stats.begin(); 80 | const delta = clock.getDelta(); 81 | mesh.rotation.y += delta * 0.2; 82 | 83 | controls.update(); 84 | renderer.render(scene, camera); 85 | 86 | stats.end(); 87 | window.requestAnimationFrame(tick); 88 | }; 89 | 90 | tick(); 91 | 92 | window.addEventListener('resize', () => { 93 | // Обновляем размеры 94 | sizes.width = window.innerWidth; 95 | sizes.height = window.innerHeight; 96 | 97 | // Обновляем соотношение сторон камеры 98 | camera.aspect = sizes.width / sizes.height; 99 | camera.updateProjectionMatrix(); 100 | 101 | // Обновляем renderer 102 | renderer.setSize(sizes.width, sizes.height); 103 | renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); 104 | renderer.render(scene, camera); 105 | }); 106 | 107 | -------------------------------------------------------------------------------- /threejs_main/src/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | html, 7 | body { 8 | overflow: hidden; 9 | } 10 | 11 | .canvas { 12 | position: fixed; 13 | top: 0; 14 | left: 0; 15 | outline: none; 16 | } 17 | -------------------------------------------------------------------------------- /threejs_main/static/models/Duck/Duck.gltf: -------------------------------------------------------------------------------- 1 | { 2 | "asset": { 3 | "generator": "COLLADA2GLTF", 4 | "version": "2.0" 5 | }, 6 | "scene": 0, 7 | "scenes": [ 8 | { 9 | "nodes": [ 10 | 0 11 | ] 12 | } 13 | ], 14 | "nodes": [ 15 | { 16 | "children": [ 17 | 2, 18 | 1 19 | ], 20 | "matrix": [ 21 | 0.009999999776482582, 22 | 0.0, 23 | 0.0, 24 | 0.0, 25 | 0.0, 26 | 0.009999999776482582, 27 | 0.0, 28 | 0.0, 29 | 0.0, 30 | 0.0, 31 | 0.009999999776482582, 32 | 0.0, 33 | 0.0, 34 | 0.0, 35 | 0.0, 36 | 1.0 37 | ] 38 | }, 39 | { 40 | "matrix": [ 41 | -0.7289686799049377, 42 | 0.0, 43 | -0.6845470666885376, 44 | 0.0, 45 | -0.4252049028873444, 46 | 0.7836934328079224, 47 | 0.4527972936630249, 48 | 0.0, 49 | 0.5364750623703003, 50 | 0.6211478114128113, 51 | -0.571287989616394, 52 | 0.0, 53 | 400.1130065917969, 54 | 463.2640075683594, 55 | -431.0780334472656, 56 | 1.0 57 | ], 58 | "camera": 0 59 | }, 60 | { 61 | "mesh": 0 62 | } 63 | ], 64 | "cameras": [ 65 | { 66 | "perspective": { 67 | "aspectRatio": 1.5, 68 | "yfov": 0.6605925559997559, 69 | "zfar": 10000.0, 70 | "znear": 1.0 71 | }, 72 | "type": "perspective" 73 | } 74 | ], 75 | "meshes": [ 76 | { 77 | "primitives": [ 78 | { 79 | "attributes": { 80 | "NORMAL": 1, 81 | "POSITION": 2, 82 | "TEXCOORD_0": 3 83 | }, 84 | "indices": 0, 85 | "mode": 4, 86 | "material": 0 87 | } 88 | ], 89 | "name": "LOD3spShape" 90 | } 91 | ], 92 | "accessors": [ 93 | { 94 | "bufferView": 0, 95 | "byteOffset": 0, 96 | "componentType": 5123, 97 | "count": 12636, 98 | "max": [ 99 | 2398 100 | ], 101 | "min": [ 102 | 0 103 | ], 104 | "type": "SCALAR" 105 | }, 106 | { 107 | "bufferView": 1, 108 | "byteOffset": 0, 109 | "componentType": 5126, 110 | "count": 2399, 111 | "max": [ 112 | 0.9995989799499512, 113 | 0.999580979347229, 114 | 0.9984359741210938 115 | ], 116 | "min": [ 117 | -0.9990839958190918, 118 | -1.0, 119 | -0.9998319745063782 120 | ], 121 | "type": "VEC3" 122 | }, 123 | { 124 | "bufferView": 1, 125 | "byteOffset": 28788, 126 | "componentType": 5126, 127 | "count": 2399, 128 | "max": [ 129 | 96.17990112304688, 130 | 163.97000122070313, 131 | 53.92519760131836 132 | ], 133 | "min": [ 134 | -69.29850006103516, 135 | 9.929369926452637, 136 | -61.32819747924805 137 | ], 138 | "type": "VEC3" 139 | }, 140 | { 141 | "bufferView": 2, 142 | "byteOffset": 0, 143 | "componentType": 5126, 144 | "count": 2399, 145 | "max": [ 146 | 0.9833459854125976, 147 | 0.9800369739532472 148 | ], 149 | "min": [ 150 | 0.026409000158309938, 151 | 0.01996302604675293 152 | ], 153 | "type": "VEC2" 154 | } 155 | ], 156 | "materials": [ 157 | { 158 | "pbrMetallicRoughness": { 159 | "baseColorTexture": { 160 | "index": 0 161 | }, 162 | "metallicFactor": 0.0 163 | }, 164 | "emissiveFactor": [ 165 | 0.0, 166 | 0.0, 167 | 0.0 168 | ], 169 | "name": "blinn3-fx" 170 | } 171 | ], 172 | "textures": [ 173 | { 174 | "sampler": 0, 175 | "source": 0 176 | } 177 | ], 178 | "images": [ 179 | { 180 | "uri": "DuckCM.png" 181 | } 182 | ], 183 | "samplers": [ 184 | { 185 | "magFilter": 9729, 186 | "minFilter": 9986, 187 | "wrapS": 10497, 188 | "wrapT": 10497 189 | } 190 | ], 191 | "bufferViews": [ 192 | { 193 | "buffer": 0, 194 | "byteOffset": 76768, 195 | "byteLength": 25272, 196 | "target": 34963 197 | }, 198 | { 199 | "buffer": 0, 200 | "byteOffset": 0, 201 | "byteLength": 57576, 202 | "byteStride": 12, 203 | "target": 34962 204 | }, 205 | { 206 | "buffer": 0, 207 | "byteOffset": 57576, 208 | "byteLength": 19192, 209 | "byteStride": 8, 210 | "target": 34962 211 | } 212 | ], 213 | "buffers": [ 214 | { 215 | "byteLength": 102040, 216 | "uri": "Duck0.bin" 217 | } 218 | ] 219 | } 220 | -------------------------------------------------------------------------------- /threejs_main/static/models/Duck/Duck0.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/models/Duck/Duck0.bin -------------------------------------------------------------------------------- /threejs_main/static/models/Duck/DuckCM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/models/Duck/DuckCM.png -------------------------------------------------------------------------------- /threejs_main/static/models/fox/Fox.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/models/fox/Fox.bin -------------------------------------------------------------------------------- /threejs_main/static/models/fox/Fox.gltf: -------------------------------------------------------------------------------- 1 | { 2 | "asset": { 3 | "copyright": "CC-BY 4.0 Model by PixelMannen https://opengameart.org/content/fox-and-shiba and @tomkranis https://sketchfab.com/3d-models/low-poly-fox-by-pixelmannen-animated-371dea88d7e04a76af5763f2a36866bc and @AsoboStudio with @scurest https://github.com/KhronosGroup/glTF-Sample-Models/pull/150#issuecomment-406300118", 4 | "version": "2.0" 5 | }, 6 | "accessors": [ 7 | { 8 | "bufferView": 0, 9 | "componentType": 5126, 10 | "count": 1728, 11 | "type": "VEC3", 12 | "byteOffset": 0, 13 | "min": [ 14 | -12.592718124389648, 15 | -0.12174476683139801, 16 | -88.09500122070312 17 | ], 18 | "max": [ 19 | 12.592718124389648, 20 | 78.90718841552734, 21 | 66.62486267089844 22 | ] 23 | }, 24 | { 25 | "bufferView": 1, 26 | "componentType": 5126, 27 | "count": 1728, 28 | "type": "VEC2", 29 | "byteOffset": 0 30 | }, 31 | { 32 | "bufferView": 1, 33 | "componentType": 5123, 34 | "count": 1728, 35 | "type": "VEC4", 36 | "byteOffset": 13824 37 | }, 38 | { 39 | "bufferView": 2, 40 | "byteOffset": 0, 41 | "componentType": 5126, 42 | "count": 1728, 43 | "type": "VEC4" 44 | }, 45 | { 46 | "bufferView": 3, 47 | "byteOffset": 0, 48 | "componentType": 5126, 49 | "count": 24, 50 | "type": "MAT4" 51 | }, 52 | { 53 | "bufferView": 4, 54 | "byteOffset": 0, 55 | "componentType": 5126, 56 | "count": 83, 57 | "type": "SCALAR", 58 | "min": [ 59 | 0.0 60 | ], 61 | "max": [ 62 | 3.4166667461395264 63 | ] 64 | }, 65 | { 66 | "bufferView": 5, 67 | "byteOffset": 0, 68 | "componentType": 5126, 69 | "count": 83, 70 | "type": "VEC4" 71 | }, 72 | { 73 | "bufferView": 5, 74 | "byteOffset": 1328, 75 | "componentType": 5126, 76 | "count": 83, 77 | "type": "VEC4" 78 | }, 79 | { 80 | "bufferView": 5, 81 | "byteOffset": 2656, 82 | "componentType": 5126, 83 | "count": 83, 84 | "type": "VEC4" 85 | }, 86 | { 87 | "bufferView": 5, 88 | "byteOffset": 3984, 89 | "componentType": 5126, 90 | "count": 83, 91 | "type": "VEC4" 92 | }, 93 | { 94 | "bufferView": 5, 95 | "byteOffset": 5312, 96 | "componentType": 5126, 97 | "count": 83, 98 | "type": "VEC4" 99 | }, 100 | { 101 | "bufferView": 5, 102 | "byteOffset": 6640, 103 | "componentType": 5126, 104 | "count": 83, 105 | "type": "VEC4" 106 | }, 107 | { 108 | "bufferView": 5, 109 | "byteOffset": 7968, 110 | "componentType": 5126, 111 | "count": 83, 112 | "type": "VEC4" 113 | }, 114 | { 115 | "bufferView": 5, 116 | "byteOffset": 9296, 117 | "componentType": 5126, 118 | "count": 83, 119 | "type": "VEC4" 120 | }, 121 | { 122 | "bufferView": 5, 123 | "byteOffset": 10624, 124 | "componentType": 5126, 125 | "count": 83, 126 | "type": "VEC4" 127 | }, 128 | { 129 | "bufferView": 5, 130 | "byteOffset": 11952, 131 | "componentType": 5126, 132 | "count": 83, 133 | "type": "VEC4" 134 | }, 135 | { 136 | "bufferView": 5, 137 | "byteOffset": 13280, 138 | "componentType": 5126, 139 | "count": 83, 140 | "type": "VEC4" 141 | }, 142 | { 143 | "bufferView": 5, 144 | "byteOffset": 14608, 145 | "componentType": 5126, 146 | "count": 83, 147 | "type": "VEC4" 148 | }, 149 | { 150 | "bufferView": 5, 151 | "byteOffset": 15936, 152 | "componentType": 5126, 153 | "count": 83, 154 | "type": "VEC4" 155 | }, 156 | { 157 | "bufferView": 5, 158 | "byteOffset": 17264, 159 | "componentType": 5126, 160 | "count": 83, 161 | "type": "VEC4" 162 | }, 163 | { 164 | "bufferView": 5, 165 | "byteOffset": 18592, 166 | "componentType": 5126, 167 | "count": 83, 168 | "type": "VEC4" 169 | }, 170 | { 171 | "bufferView": 5, 172 | "byteOffset": 19920, 173 | "componentType": 5126, 174 | "count": 83, 175 | "type": "VEC4" 176 | }, 177 | { 178 | "bufferView": 5, 179 | "byteOffset": 21248, 180 | "componentType": 5126, 181 | "count": 83, 182 | "type": "VEC4" 183 | }, 184 | { 185 | "bufferView": 5, 186 | "byteOffset": 22576, 187 | "componentType": 5126, 188 | "count": 83, 189 | "type": "VEC4" 190 | }, 191 | { 192 | "bufferView": 5, 193 | "byteOffset": 23904, 194 | "componentType": 5126, 195 | "count": 83, 196 | "type": "VEC4" 197 | }, 198 | { 199 | "bufferView": 6, 200 | "byteOffset": 0, 201 | "componentType": 5126, 202 | "count": 83, 203 | "type": "VEC3" 204 | }, 205 | { 206 | "bufferView": 5, 207 | "byteOffset": 25232, 208 | "componentType": 5126, 209 | "count": 83, 210 | "type": "VEC4" 211 | }, 212 | { 213 | "bufferView": 4, 214 | "byteOffset": 332, 215 | "componentType": 5126, 216 | "count": 18, 217 | "type": "SCALAR", 218 | "min": [ 219 | 0.0 220 | ], 221 | "max": [ 222 | 0.7083333134651184 223 | ] 224 | }, 225 | { 226 | "bufferView": 5, 227 | "byteOffset": 26560, 228 | "componentType": 5126, 229 | "count": 18, 230 | "type": "VEC4" 231 | }, 232 | { 233 | "bufferView": 5, 234 | "byteOffset": 26848, 235 | "componentType": 5126, 236 | "count": 18, 237 | "type": "VEC4" 238 | }, 239 | { 240 | "bufferView": 5, 241 | "byteOffset": 27136, 242 | "componentType": 5126, 243 | "count": 18, 244 | "type": "VEC4" 245 | }, 246 | { 247 | "bufferView": 5, 248 | "byteOffset": 27424, 249 | "componentType": 5126, 250 | "count": 18, 251 | "type": "VEC4" 252 | }, 253 | { 254 | "bufferView": 5, 255 | "byteOffset": 27712, 256 | "componentType": 5126, 257 | "count": 18, 258 | "type": "VEC4" 259 | }, 260 | { 261 | "bufferView": 5, 262 | "byteOffset": 28000, 263 | "componentType": 5126, 264 | "count": 18, 265 | "type": "VEC4" 266 | }, 267 | { 268 | "bufferView": 5, 269 | "byteOffset": 28288, 270 | "componentType": 5126, 271 | "count": 18, 272 | "type": "VEC4" 273 | }, 274 | { 275 | "bufferView": 5, 276 | "byteOffset": 28576, 277 | "componentType": 5126, 278 | "count": 18, 279 | "type": "VEC4" 280 | }, 281 | { 282 | "bufferView": 5, 283 | "byteOffset": 28864, 284 | "componentType": 5126, 285 | "count": 18, 286 | "type": "VEC4" 287 | }, 288 | { 289 | "bufferView": 5, 290 | "byteOffset": 29152, 291 | "componentType": 5126, 292 | "count": 18, 293 | "type": "VEC4" 294 | }, 295 | { 296 | "bufferView": 5, 297 | "byteOffset": 29440, 298 | "componentType": 5126, 299 | "count": 18, 300 | "type": "VEC4" 301 | }, 302 | { 303 | "bufferView": 5, 304 | "byteOffset": 29728, 305 | "componentType": 5126, 306 | "count": 18, 307 | "type": "VEC4" 308 | }, 309 | { 310 | "bufferView": 5, 311 | "byteOffset": 30016, 312 | "componentType": 5126, 313 | "count": 18, 314 | "type": "VEC4" 315 | }, 316 | { 317 | "bufferView": 5, 318 | "byteOffset": 30304, 319 | "componentType": 5126, 320 | "count": 18, 321 | "type": "VEC4" 322 | }, 323 | { 324 | "bufferView": 5, 325 | "byteOffset": 30592, 326 | "componentType": 5126, 327 | "count": 18, 328 | "type": "VEC4" 329 | }, 330 | { 331 | "bufferView": 5, 332 | "byteOffset": 30880, 333 | "componentType": 5126, 334 | "count": 18, 335 | "type": "VEC4" 336 | }, 337 | { 338 | "bufferView": 5, 339 | "byteOffset": 31168, 340 | "componentType": 5126, 341 | "count": 18, 342 | "type": "VEC4" 343 | }, 344 | { 345 | "bufferView": 5, 346 | "byteOffset": 31456, 347 | "componentType": 5126, 348 | "count": 18, 349 | "type": "VEC4" 350 | }, 351 | { 352 | "bufferView": 5, 353 | "byteOffset": 31744, 354 | "componentType": 5126, 355 | "count": 18, 356 | "type": "VEC4" 357 | }, 358 | { 359 | "bufferView": 6, 360 | "byteOffset": 996, 361 | "componentType": 5126, 362 | "count": 18, 363 | "type": "VEC3" 364 | }, 365 | { 366 | "bufferView": 5, 367 | "byteOffset": 32032, 368 | "componentType": 5126, 369 | "count": 18, 370 | "type": "VEC4" 371 | }, 372 | { 373 | "bufferView": 4, 374 | "byteOffset": 404, 375 | "componentType": 5126, 376 | "count": 25, 377 | "type": "SCALAR", 378 | "min": [ 379 | 0.0 380 | ], 381 | "max": [ 382 | 1.1583333015441895 383 | ] 384 | }, 385 | { 386 | "bufferView": 5, 387 | "byteOffset": 32320, 388 | "componentType": 5126, 389 | "count": 25, 390 | "type": "VEC4" 391 | }, 392 | { 393 | "bufferView": 5, 394 | "byteOffset": 32720, 395 | "componentType": 5126, 396 | "count": 25, 397 | "type": "VEC4" 398 | }, 399 | { 400 | "bufferView": 5, 401 | "byteOffset": 33120, 402 | "componentType": 5126, 403 | "count": 25, 404 | "type": "VEC4" 405 | }, 406 | { 407 | "bufferView": 5, 408 | "byteOffset": 33520, 409 | "componentType": 5126, 410 | "count": 25, 411 | "type": "VEC4" 412 | }, 413 | { 414 | "bufferView": 5, 415 | "byteOffset": 33920, 416 | "componentType": 5126, 417 | "count": 25, 418 | "type": "VEC4" 419 | }, 420 | { 421 | "bufferView": 5, 422 | "byteOffset": 34320, 423 | "componentType": 5126, 424 | "count": 25, 425 | "type": "VEC4" 426 | }, 427 | { 428 | "bufferView": 5, 429 | "byteOffset": 34720, 430 | "componentType": 5126, 431 | "count": 25, 432 | "type": "VEC4" 433 | }, 434 | { 435 | "bufferView": 5, 436 | "byteOffset": 35120, 437 | "componentType": 5126, 438 | "count": 25, 439 | "type": "VEC4" 440 | }, 441 | { 442 | "bufferView": 5, 443 | "byteOffset": 35520, 444 | "componentType": 5126, 445 | "count": 25, 446 | "type": "VEC4" 447 | }, 448 | { 449 | "bufferView": 5, 450 | "byteOffset": 35920, 451 | "componentType": 5126, 452 | "count": 25, 453 | "type": "VEC4" 454 | }, 455 | { 456 | "bufferView": 5, 457 | "byteOffset": 36320, 458 | "componentType": 5126, 459 | "count": 25, 460 | "type": "VEC4" 461 | }, 462 | { 463 | "bufferView": 5, 464 | "byteOffset": 36720, 465 | "componentType": 5126, 466 | "count": 25, 467 | "type": "VEC4" 468 | }, 469 | { 470 | "bufferView": 5, 471 | "byteOffset": 37120, 472 | "componentType": 5126, 473 | "count": 25, 474 | "type": "VEC4" 475 | }, 476 | { 477 | "bufferView": 5, 478 | "byteOffset": 37520, 479 | "componentType": 5126, 480 | "count": 25, 481 | "type": "VEC4" 482 | }, 483 | { 484 | "bufferView": 5, 485 | "byteOffset": 37920, 486 | "componentType": 5126, 487 | "count": 25, 488 | "type": "VEC4" 489 | }, 490 | { 491 | "bufferView": 5, 492 | "byteOffset": 38320, 493 | "componentType": 5126, 494 | "count": 25, 495 | "type": "VEC4" 496 | }, 497 | { 498 | "bufferView": 5, 499 | "byteOffset": 38720, 500 | "componentType": 5126, 501 | "count": 25, 502 | "type": "VEC4" 503 | }, 504 | { 505 | "bufferView": 5, 506 | "byteOffset": 39120, 507 | "componentType": 5126, 508 | "count": 25, 509 | "type": "VEC4" 510 | }, 511 | { 512 | "bufferView": 5, 513 | "byteOffset": 39520, 514 | "componentType": 5126, 515 | "count": 25, 516 | "type": "VEC4" 517 | }, 518 | { 519 | "bufferView": 6, 520 | "byteOffset": 1212, 521 | "componentType": 5126, 522 | "count": 25, 523 | "type": "VEC3" 524 | }, 525 | { 526 | "bufferView": 5, 527 | "byteOffset": 39920, 528 | "componentType": 5126, 529 | "count": 25, 530 | "type": "VEC4" 531 | } 532 | ], 533 | "animations": [ 534 | { 535 | "channels": [ 536 | { 537 | "sampler": 0, 538 | "target": { 539 | "node": 8, 540 | "path": "rotation" 541 | } 542 | }, 543 | { 544 | "sampler": 1, 545 | "target": { 546 | "node": 7, 547 | "path": "rotation" 548 | } 549 | }, 550 | { 551 | "sampler": 2, 552 | "target": { 553 | "node": 11, 554 | "path": "rotation" 555 | } 556 | }, 557 | { 558 | "sampler": 3, 559 | "target": { 560 | "node": 10, 561 | "path": "rotation" 562 | } 563 | }, 564 | { 565 | "sampler": 4, 566 | "target": { 567 | "node": 9, 568 | "path": "rotation" 569 | } 570 | }, 571 | { 572 | "sampler": 5, 573 | "target": { 574 | "node": 14, 575 | "path": "rotation" 576 | } 577 | }, 578 | { 579 | "sampler": 6, 580 | "target": { 581 | "node": 13, 582 | "path": "rotation" 583 | } 584 | }, 585 | { 586 | "sampler": 7, 587 | "target": { 588 | "node": 12, 589 | "path": "rotation" 590 | } 591 | }, 592 | { 593 | "sampler": 8, 594 | "target": { 595 | "node": 6, 596 | "path": "rotation" 597 | } 598 | }, 599 | { 600 | "sampler": 9, 601 | "target": { 602 | "node": 5, 603 | "path": "rotation" 604 | } 605 | }, 606 | { 607 | "sampler": 10, 608 | "target": { 609 | "node": 17, 610 | "path": "rotation" 611 | } 612 | }, 613 | { 614 | "sampler": 11, 615 | "target": { 616 | "node": 16, 617 | "path": "rotation" 618 | } 619 | }, 620 | { 621 | "sampler": 12, 622 | "target": { 623 | "node": 15, 624 | "path": "rotation" 625 | } 626 | }, 627 | { 628 | "sampler": 13, 629 | "target": { 630 | "node": 20, 631 | "path": "rotation" 632 | } 633 | }, 634 | { 635 | "sampler": 14, 636 | "target": { 637 | "node": 19, 638 | "path": "rotation" 639 | } 640 | }, 641 | { 642 | "sampler": 15, 643 | "target": { 644 | "node": 18, 645 | "path": "rotation" 646 | } 647 | }, 648 | { 649 | "sampler": 16, 650 | "target": { 651 | "node": 24, 652 | "path": "rotation" 653 | } 654 | }, 655 | { 656 | "sampler": 17, 657 | "target": { 658 | "node": 23, 659 | "path": "rotation" 660 | } 661 | }, 662 | { 663 | "sampler": 18, 664 | "target": { 665 | "node": 22, 666 | "path": "rotation" 667 | } 668 | }, 669 | { 670 | "sampler": 19, 671 | "target": { 672 | "node": 4, 673 | "path": "translation" 674 | } 675 | }, 676 | { 677 | "sampler": 20, 678 | "target": { 679 | "node": 4, 680 | "path": "rotation" 681 | } 682 | } 683 | ], 684 | "samplers": [ 685 | { 686 | "input": 5, 687 | "output": 6 688 | }, 689 | { 690 | "input": 5, 691 | "output": 7 692 | }, 693 | { 694 | "input": 5, 695 | "output": 8 696 | }, 697 | { 698 | "input": 5, 699 | "output": 9 700 | }, 701 | { 702 | "input": 5, 703 | "output": 10 704 | }, 705 | { 706 | "input": 5, 707 | "output": 11 708 | }, 709 | { 710 | "input": 5, 711 | "output": 12 712 | }, 713 | { 714 | "input": 5, 715 | "output": 13 716 | }, 717 | { 718 | "input": 5, 719 | "output": 14 720 | }, 721 | { 722 | "input": 5, 723 | "output": 15 724 | }, 725 | { 726 | "input": 5, 727 | "output": 16 728 | }, 729 | { 730 | "input": 5, 731 | "output": 17 732 | }, 733 | { 734 | "input": 5, 735 | "output": 18 736 | }, 737 | { 738 | "input": 5, 739 | "output": 19 740 | }, 741 | { 742 | "input": 5, 743 | "output": 20 744 | }, 745 | { 746 | "input": 5, 747 | "output": 21 748 | }, 749 | { 750 | "input": 5, 751 | "output": 22 752 | }, 753 | { 754 | "input": 5, 755 | "output": 23 756 | }, 757 | { 758 | "input": 5, 759 | "output": 24 760 | }, 761 | { 762 | "input": 5, 763 | "output": 25 764 | }, 765 | { 766 | "input": 5, 767 | "output": 26 768 | } 769 | ], 770 | "name": "Survey" 771 | }, 772 | { 773 | "channels": [ 774 | { 775 | "sampler": 0, 776 | "target": { 777 | "node": 8, 778 | "path": "rotation" 779 | } 780 | }, 781 | { 782 | "sampler": 1, 783 | "target": { 784 | "node": 7, 785 | "path": "rotation" 786 | } 787 | }, 788 | { 789 | "sampler": 2, 790 | "target": { 791 | "node": 11, 792 | "path": "rotation" 793 | } 794 | }, 795 | { 796 | "sampler": 3, 797 | "target": { 798 | "node": 10, 799 | "path": "rotation" 800 | } 801 | }, 802 | { 803 | "sampler": 4, 804 | "target": { 805 | "node": 9, 806 | "path": "rotation" 807 | } 808 | }, 809 | { 810 | "sampler": 5, 811 | "target": { 812 | "node": 14, 813 | "path": "rotation" 814 | } 815 | }, 816 | { 817 | "sampler": 6, 818 | "target": { 819 | "node": 13, 820 | "path": "rotation" 821 | } 822 | }, 823 | { 824 | "sampler": 7, 825 | "target": { 826 | "node": 12, 827 | "path": "rotation" 828 | } 829 | }, 830 | { 831 | "sampler": 8, 832 | "target": { 833 | "node": 6, 834 | "path": "rotation" 835 | } 836 | }, 837 | { 838 | "sampler": 9, 839 | "target": { 840 | "node": 5, 841 | "path": "rotation" 842 | } 843 | }, 844 | { 845 | "sampler": 10, 846 | "target": { 847 | "node": 17, 848 | "path": "rotation" 849 | } 850 | }, 851 | { 852 | "sampler": 11, 853 | "target": { 854 | "node": 16, 855 | "path": "rotation" 856 | } 857 | }, 858 | { 859 | "sampler": 12, 860 | "target": { 861 | "node": 15, 862 | "path": "rotation" 863 | } 864 | }, 865 | { 866 | "sampler": 13, 867 | "target": { 868 | "node": 20, 869 | "path": "rotation" 870 | } 871 | }, 872 | { 873 | "sampler": 14, 874 | "target": { 875 | "node": 19, 876 | "path": "rotation" 877 | } 878 | }, 879 | { 880 | "sampler": 15, 881 | "target": { 882 | "node": 18, 883 | "path": "rotation" 884 | } 885 | }, 886 | { 887 | "sampler": 16, 888 | "target": { 889 | "node": 24, 890 | "path": "rotation" 891 | } 892 | }, 893 | { 894 | "sampler": 17, 895 | "target": { 896 | "node": 23, 897 | "path": "rotation" 898 | } 899 | }, 900 | { 901 | "sampler": 18, 902 | "target": { 903 | "node": 22, 904 | "path": "rotation" 905 | } 906 | }, 907 | { 908 | "sampler": 19, 909 | "target": { 910 | "node": 4, 911 | "path": "translation" 912 | } 913 | }, 914 | { 915 | "sampler": 20, 916 | "target": { 917 | "node": 4, 918 | "path": "rotation" 919 | } 920 | } 921 | ], 922 | "samplers": [ 923 | { 924 | "input": 27, 925 | "output": 28 926 | }, 927 | { 928 | "input": 27, 929 | "output": 29 930 | }, 931 | { 932 | "input": 27, 933 | "output": 30 934 | }, 935 | { 936 | "input": 27, 937 | "output": 31 938 | }, 939 | { 940 | "input": 27, 941 | "output": 32 942 | }, 943 | { 944 | "input": 27, 945 | "output": 33 946 | }, 947 | { 948 | "input": 27, 949 | "output": 34 950 | }, 951 | { 952 | "input": 27, 953 | "output": 35 954 | }, 955 | { 956 | "input": 27, 957 | "output": 36 958 | }, 959 | { 960 | "input": 27, 961 | "output": 37 962 | }, 963 | { 964 | "input": 27, 965 | "output": 38 966 | }, 967 | { 968 | "input": 27, 969 | "output": 39 970 | }, 971 | { 972 | "input": 27, 973 | "output": 40 974 | }, 975 | { 976 | "input": 27, 977 | "output": 41 978 | }, 979 | { 980 | "input": 27, 981 | "output": 42 982 | }, 983 | { 984 | "input": 27, 985 | "output": 43 986 | }, 987 | { 988 | "input": 27, 989 | "output": 44 990 | }, 991 | { 992 | "input": 27, 993 | "output": 45 994 | }, 995 | { 996 | "input": 27, 997 | "output": 46 998 | }, 999 | { 1000 | "input": 27, 1001 | "output": 47 1002 | }, 1003 | { 1004 | "input": 27, 1005 | "output": 48 1006 | } 1007 | ], 1008 | "name": "Walk" 1009 | }, 1010 | { 1011 | "channels": [ 1012 | { 1013 | "sampler": 0, 1014 | "target": { 1015 | "node": 8, 1016 | "path": "rotation" 1017 | } 1018 | }, 1019 | { 1020 | "sampler": 1, 1021 | "target": { 1022 | "node": 7, 1023 | "path": "rotation" 1024 | } 1025 | }, 1026 | { 1027 | "sampler": 2, 1028 | "target": { 1029 | "node": 11, 1030 | "path": "rotation" 1031 | } 1032 | }, 1033 | { 1034 | "sampler": 3, 1035 | "target": { 1036 | "node": 10, 1037 | "path": "rotation" 1038 | } 1039 | }, 1040 | { 1041 | "sampler": 4, 1042 | "target": { 1043 | "node": 9, 1044 | "path": "rotation" 1045 | } 1046 | }, 1047 | { 1048 | "sampler": 5, 1049 | "target": { 1050 | "node": 14, 1051 | "path": "rotation" 1052 | } 1053 | }, 1054 | { 1055 | "sampler": 6, 1056 | "target": { 1057 | "node": 13, 1058 | "path": "rotation" 1059 | } 1060 | }, 1061 | { 1062 | "sampler": 7, 1063 | "target": { 1064 | "node": 12, 1065 | "path": "rotation" 1066 | } 1067 | }, 1068 | { 1069 | "sampler": 8, 1070 | "target": { 1071 | "node": 6, 1072 | "path": "rotation" 1073 | } 1074 | }, 1075 | { 1076 | "sampler": 9, 1077 | "target": { 1078 | "node": 5, 1079 | "path": "rotation" 1080 | } 1081 | }, 1082 | { 1083 | "sampler": 10, 1084 | "target": { 1085 | "node": 17, 1086 | "path": "rotation" 1087 | } 1088 | }, 1089 | { 1090 | "sampler": 11, 1091 | "target": { 1092 | "node": 16, 1093 | "path": "rotation" 1094 | } 1095 | }, 1096 | { 1097 | "sampler": 12, 1098 | "target": { 1099 | "node": 15, 1100 | "path": "rotation" 1101 | } 1102 | }, 1103 | { 1104 | "sampler": 13, 1105 | "target": { 1106 | "node": 20, 1107 | "path": "rotation" 1108 | } 1109 | }, 1110 | { 1111 | "sampler": 14, 1112 | "target": { 1113 | "node": 19, 1114 | "path": "rotation" 1115 | } 1116 | }, 1117 | { 1118 | "sampler": 15, 1119 | "target": { 1120 | "node": 18, 1121 | "path": "rotation" 1122 | } 1123 | }, 1124 | { 1125 | "sampler": 16, 1126 | "target": { 1127 | "node": 24, 1128 | "path": "rotation" 1129 | } 1130 | }, 1131 | { 1132 | "sampler": 17, 1133 | "target": { 1134 | "node": 23, 1135 | "path": "rotation" 1136 | } 1137 | }, 1138 | { 1139 | "sampler": 18, 1140 | "target": { 1141 | "node": 22, 1142 | "path": "rotation" 1143 | } 1144 | }, 1145 | { 1146 | "sampler": 19, 1147 | "target": { 1148 | "node": 4, 1149 | "path": "translation" 1150 | } 1151 | }, 1152 | { 1153 | "sampler": 20, 1154 | "target": { 1155 | "node": 4, 1156 | "path": "rotation" 1157 | } 1158 | } 1159 | ], 1160 | "samplers": [ 1161 | { 1162 | "input": 49, 1163 | "output": 50 1164 | }, 1165 | { 1166 | "input": 49, 1167 | "output": 51 1168 | }, 1169 | { 1170 | "input": 49, 1171 | "output": 52 1172 | }, 1173 | { 1174 | "input": 49, 1175 | "output": 53 1176 | }, 1177 | { 1178 | "input": 49, 1179 | "output": 54 1180 | }, 1181 | { 1182 | "input": 49, 1183 | "output": 55 1184 | }, 1185 | { 1186 | "input": 49, 1187 | "output": 56 1188 | }, 1189 | { 1190 | "input": 49, 1191 | "output": 57 1192 | }, 1193 | { 1194 | "input": 49, 1195 | "output": 58 1196 | }, 1197 | { 1198 | "input": 49, 1199 | "output": 59 1200 | }, 1201 | { 1202 | "input": 49, 1203 | "output": 60 1204 | }, 1205 | { 1206 | "input": 49, 1207 | "output": 61 1208 | }, 1209 | { 1210 | "input": 49, 1211 | "output": 62 1212 | }, 1213 | { 1214 | "input": 49, 1215 | "output": 63 1216 | }, 1217 | { 1218 | "input": 49, 1219 | "output": 64 1220 | }, 1221 | { 1222 | "input": 49, 1223 | "output": 65 1224 | }, 1225 | { 1226 | "input": 49, 1227 | "output": 66 1228 | }, 1229 | { 1230 | "input": 49, 1231 | "output": 67 1232 | }, 1233 | { 1234 | "input": 49, 1235 | "output": 68 1236 | }, 1237 | { 1238 | "input": 49, 1239 | "output": 69 1240 | }, 1241 | { 1242 | "input": 49, 1243 | "output": 70 1244 | } 1245 | ], 1246 | "name": "Run" 1247 | } 1248 | ], 1249 | "bufferViews": [ 1250 | { 1251 | "buffer": 0, 1252 | "byteOffset": 0, 1253 | "byteLength": 20736, 1254 | "byteStride": 12, 1255 | "target": 34962 1256 | }, 1257 | { 1258 | "buffer": 0, 1259 | "byteOffset": 20736, 1260 | "byteLength": 27648, 1261 | "byteStride": 8, 1262 | "target": 34962 1263 | }, 1264 | { 1265 | "buffer": 0, 1266 | "byteOffset": 48384, 1267 | "byteLength": 27648, 1268 | "byteStride": 16, 1269 | "target": 34962 1270 | }, 1271 | { 1272 | "buffer": 0, 1273 | "byteOffset": 76032, 1274 | "byteLength": 1536 1275 | }, 1276 | { 1277 | "buffer": 0, 1278 | "byteOffset": 77568, 1279 | "byteLength": 504 1280 | }, 1281 | { 1282 | "buffer": 0, 1283 | "byteOffset": 78072, 1284 | "byteLength": 40320 1285 | }, 1286 | { 1287 | "buffer": 0, 1288 | "byteOffset": 118392, 1289 | "byteLength": 1512 1290 | } 1291 | ], 1292 | "buffers": [ 1293 | { 1294 | "uri": "Fox.bin", 1295 | "byteLength": 119904 1296 | } 1297 | ], 1298 | "images": [ 1299 | { 1300 | "uri": "Texture.png", 1301 | "mimeType": "image/png" 1302 | } 1303 | ], 1304 | "materials": [ 1305 | { 1306 | "name": "fox_material", 1307 | "pbrMetallicRoughness": { 1308 | "baseColorTexture": { 1309 | "index": 0 1310 | }, 1311 | "metallicFactor": 0, 1312 | "roughnessFactor": 0.58 1313 | } 1314 | } 1315 | ], 1316 | "meshes": [ 1317 | { 1318 | "name": "fox1", 1319 | "primitives": [ 1320 | { 1321 | "attributes": { 1322 | "POSITION": 0, 1323 | "TEXCOORD_0": 1, 1324 | "JOINTS_0": 2, 1325 | "WEIGHTS_0": 3 1326 | }, 1327 | "material": 0 1328 | } 1329 | ] 1330 | } 1331 | ], 1332 | "nodes": [ 1333 | { 1334 | "children": [ 1335 | 2 1336 | ], 1337 | "name": "root" 1338 | }, 1339 | { 1340 | "name": "fox", 1341 | "mesh": 0, 1342 | "skin": 0 1343 | }, 1344 | { 1345 | "children": [ 1346 | 3 1347 | ], 1348 | "name": "_rootJoint" 1349 | }, 1350 | { 1351 | "children": [ 1352 | 4 1353 | ], 1354 | "name": "b_Root_00", 1355 | "rotation": [ 1356 | -0.7071080924875391, 1357 | 0.0, 1358 | 0.0, 1359 | 0.7071054698831242 1360 | ] 1361 | }, 1362 | { 1363 | "children": [ 1364 | 5, 1365 | 15, 1366 | 18, 1367 | 22 1368 | ], 1369 | "name": "b_Hip_01", 1370 | "rotation": [ 1371 | 0.12769094176175547, 1372 | -0.6954820192393762, 1373 | -0.12769022650601444, 1374 | 0.695481840425441 1375 | ], 1376 | "translation": [ 1377 | 0, 1378 | 26.748403549194336, 1379 | 42.93817138671875 1380 | ] 1381 | }, 1382 | { 1383 | "children": [ 1384 | 6 1385 | ], 1386 | "name": "b_Spine01_02", 1387 | "rotation": [ 1388 | 0.0, 1389 | 0.0, 1390 | -0.5904157638238317, 1391 | 0.8070992664030376 1392 | ], 1393 | "translation": [ 1394 | 12.850601196289062, 1395 | 0, 1396 | 0 1397 | ] 1398 | }, 1399 | { 1400 | "children": [ 1401 | 7, 1402 | 9, 1403 | 12 1404 | ], 1405 | "name": "b_Spine02_03", 1406 | "rotation": [ 1407 | 0.0, 1408 | 0.0, 1409 | 0.017411952404281082, 1410 | 0.9998484004655261 1411 | ], 1412 | "translation": [ 1413 | 21.65575408935547, 1414 | -0.000118255615234375, 1415 | 0 1416 | ] 1417 | }, 1418 | { 1419 | "children": [ 1420 | 8 1421 | ], 1422 | "name": "b_Neck_04", 1423 | "rotation": [ 1424 | 0.0, 1425 | 0.0, 1426 | 0.30337914028264346, 1427 | 0.9528699267168443 1428 | ], 1429 | "translation": [ 1430 | 25.64914321899414, 1431 | 0, 1432 | 0 1433 | ] 1434 | }, 1435 | { 1436 | "name": "b_Head_05", 1437 | "rotation": [ 1438 | 0.0, 1439 | 0.0, 1440 | -0.4002854151487349, 1441 | 0.9163905206947555 1442 | ], 1443 | "translation": [ 1444 | 13.376960754394531, 1445 | 0, 1446 | 0 1447 | ] 1448 | }, 1449 | { 1450 | "children": [ 1451 | 10 1452 | ], 1453 | "name": "b_RightUpperArm_06", 1454 | "rotation": [ 1455 | 0.0004673273262011562, 1456 | -0.0004461484692255928, 1457 | -0.7121792881110691, 1458 | 0.7019973248825985 1459 | ], 1460 | "translation": [ 1461 | 18.677913665771484, 1462 | -4.297340393066406, 1463 | 6.9675750732421875 1464 | ] 1465 | }, 1466 | { 1467 | "children": [ 1468 | 11 1469 | ], 1470 | "name": "b_RightForeArm_07", 1471 | "rotation": [ 1472 | 0.0, 1473 | 0.0, 1474 | 0.03712589977348744, 1475 | 0.9993105961441663 1476 | ], 1477 | "translation": [ 1478 | 23.04512596130371, 1479 | 0, 1480 | 0 1481 | ] 1482 | }, 1483 | { 1484 | "name": "b_RightHand_08", 1485 | "rotation": [ 1486 | -0.012037406914797018, 1487 | -0.00782221012465276, 1488 | 0.4605623277185148, 1489 | 0.8875112709988741 1490 | ], 1491 | "translation": [ 1492 | 19.350055694580078, 1493 | -0.14598655700683594, 1494 | 0 1495 | ] 1496 | }, 1497 | { 1498 | "children": [ 1499 | 13 1500 | ], 1501 | "name": "b_LeftUpperArm_09", 1502 | "rotation": [ 1503 | 0.0004972619220940174, 1504 | -0.0008821923166442875, 1505 | -0.7120874929914663, 1506 | 0.7020900061903927 1507 | ], 1508 | "translation": [ 1509 | 18.67791748046875, 1510 | -4.297344207763672, 1511 | -6.967987060546875 1512 | ] 1513 | }, 1514 | { 1515 | "children": [ 1516 | 14 1517 | ], 1518 | "name": "b_LeftForeArm_010", 1519 | "rotation": [ 1520 | 0.0, 1521 | 0.0, 1522 | 0.03712589977348744, 1523 | 0.9993105961441663 1524 | ], 1525 | "translation": [ 1526 | 23.045124053955078, 1527 | 0, 1528 | 0 1529 | ] 1530 | }, 1531 | { 1532 | "name": "b_LeftHand_011", 1533 | "rotation": [ 1534 | 0.01651791440721507, 1535 | 0.014013739873997781, 1536 | 0.46007557521271, 1537 | 0.8876154790736099 1538 | ], 1539 | "translation": [ 1540 | 19.350051879882812, 1541 | -0.14599037170410156, 1542 | 0 1543 | ] 1544 | }, 1545 | { 1546 | "children": [ 1547 | 16 1548 | ], 1549 | "name": "b_Tail01_012", 1550 | "rotation": [ 1551 | 0.0, 1552 | 0.0, 1553 | 0.9818928940656295, 1554 | 0.1894369145214904 1555 | ], 1556 | "translation": [ 1557 | 4.2603759765625, 1558 | 15.958770751953125, 1559 | 0 1560 | ] 1561 | }, 1562 | { 1563 | "children": [ 1564 | 17 1565 | ], 1566 | "name": "b_Tail02_013", 1567 | "rotation": [ 1568 | 0.0, 1569 | 0.0, 1570 | -0.0696171663387466, 1571 | 0.9975737818081244 1572 | ], 1573 | "translation": [ 1574 | 12.411918640136719, 1575 | 0, 1576 | 0 1577 | ] 1578 | }, 1579 | { 1580 | "name": "b_Tail03_014", 1581 | "rotation": [ 1582 | 0.0, 1583 | 0.0, 1584 | -0.05383274484207684, 1585 | 0.9985499664927979 1586 | ], 1587 | "translation": [ 1588 | 24.24032211303711, 1589 | 0, 1590 | 0 1591 | ] 1592 | }, 1593 | { 1594 | "children": [ 1595 | 19 1596 | ], 1597 | "name": "b_LeftLeg01_015", 1598 | "rotation": [ 1599 | 0.0, 1600 | -0.0001717522536559936, 1601 | 0.9700158834020681, 1602 | -0.2430414706359161 1603 | ], 1604 | "translation": [ 1605 | 4.813770294189453, 1606 | 5.154018402099609, 1607 | -6.968006134033203 1608 | ] 1609 | }, 1610 | { 1611 | "children": [ 1612 | 20 1613 | ], 1614 | "name": "b_LeftLeg02_016", 1615 | "rotation": [ 1616 | 0.0, 1617 | 0.0, 1618 | -0.36804378855511655, 1619 | 0.9298084586117706 1620 | ], 1621 | "translation": [ 1622 | 18.944175720214844, 1623 | 0, 1624 | 0 1625 | ] 1626 | }, 1627 | { 1628 | "children": [ 1629 | 21 1630 | ], 1631 | "name": "b_LeftFoot01_017", 1632 | "rotation": [ 1633 | 0.0002484105929664666, 1634 | 0.0, 1635 | 0.4584841122585099, 1636 | 0.888702569535333 1637 | ], 1638 | "translation": [ 1639 | 17.942811965942383, 1640 | 0, 1641 | 0 1642 | ] 1643 | }, 1644 | { 1645 | "name": "b_LeftFoot02_018", 1646 | "rotation": [ 1647 | 0.0, 1648 | 0.0, 1649 | 0.5472882949090243, 1650 | 0.8369441571906533 1651 | ], 1652 | "translation": [ 1653 | 15.779938697814941, 1654 | 0, 1655 | 0 1656 | ] 1657 | }, 1658 | { 1659 | "children": [ 1660 | 23 1661 | ], 1662 | "name": "b_RightLeg01_019", 1663 | "rotation": [ 1664 | 0.0, 1665 | 0.0, 1666 | 0.9699585942054535, 1667 | -0.24327006705918533 1668 | ], 1669 | "translation": [ 1670 | 4.813777923583984, 1671 | 5.154026031494141, 1672 | 6.967563629150391 1673 | ] 1674 | }, 1675 | { 1676 | "children": [ 1677 | 24 1678 | ], 1679 | "name": "b_RightLeg02_020", 1680 | "rotation": [ 1681 | 0.0, 1682 | 0.0, 1683 | -0.36804381432052885, 1684 | 0.9298084484131106 1685 | ], 1686 | "translation": [ 1687 | 18.944183349609375, 1688 | 0, 1689 | 0 1690 | ] 1691 | }, 1692 | { 1693 | "children": [ 1694 | 25 1695 | ], 1696 | "name": "b_RightFoot01_021", 1697 | "rotation": [ 1698 | -0.00015345455876803163, 1699 | 0.0, 1700 | 0.4579093746168346, 1701 | 0.888998864504178 1702 | ], 1703 | "translation": [ 1704 | 17.94281005859375, 1705 | 0, 1706 | 0 1707 | ] 1708 | }, 1709 | { 1710 | "name": "b_RightFoot02_022", 1711 | "rotation": [ 1712 | 0.0, 1713 | 0.0, 1714 | 0.5472882949090243, 1715 | 0.8369441571906533 1716 | ], 1717 | "translation": [ 1718 | 15.779935836791992, 1719 | 0, 1720 | 0 1721 | ] 1722 | } 1723 | ], 1724 | "samplers": [ 1725 | { 1726 | "magFilter": 9729, 1727 | "minFilter": 9987 1728 | } 1729 | ], 1730 | "scene": 0, 1731 | "scenes": [ 1732 | { 1733 | "nodes": [ 1734 | 0, 1735 | 1 1736 | ] 1737 | } 1738 | ], 1739 | "skins": [ 1740 | { 1741 | "inverseBindMatrices": 4, 1742 | "joints": [ 1743 | 2, 1744 | 3, 1745 | 4, 1746 | 5, 1747 | 6, 1748 | 7, 1749 | 8, 1750 | 9, 1751 | 10, 1752 | 11, 1753 | 12, 1754 | 13, 1755 | 14, 1756 | 15, 1757 | 16, 1758 | 17, 1759 | 18, 1760 | 19, 1761 | 20, 1762 | 21, 1763 | 22, 1764 | 23, 1765 | 24, 1766 | 25 1767 | ], 1768 | "skeleton": 2 1769 | } 1770 | ], 1771 | "textures": [ 1772 | { 1773 | "sampler": 0, 1774 | "source": 0 1775 | } 1776 | ] 1777 | } 1778 | -------------------------------------------------------------------------------- /threejs_main/static/models/fox/Texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/models/fox/Texture.png -------------------------------------------------------------------------------- /threejs_main/static/textures/checkerboard-1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/checkerboard-1024x1024.png -------------------------------------------------------------------------------- /threejs_main/static/textures/checkerboard-8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/checkerboard-8x8.png -------------------------------------------------------------------------------- /threejs_main/static/textures/door/alpha.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/door/alpha.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/door/ambientOcclusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/door/ambientOcclusion.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/door/color.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/door/color.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/door/height.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/door/height.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/door/metalness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/door/metalness.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/door/normal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/door/normal.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/door/roughness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/door/roughness.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/lava/ambientOcclusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/lava/ambientOcclusion.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/lava/basecolor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/lava/basecolor.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/lava/emissive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/lava/emissive.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/lava/height.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/lava/height.png -------------------------------------------------------------------------------- /threejs_main/static/textures/lava/normal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/lava/normal.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/lava/roughness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/lava/roughness.jpg -------------------------------------------------------------------------------- /threejs_main/static/textures/minecraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuVictory/threejs-course/ecf68db82f06f28e845ba210d7361886ac2b2c4f/threejs_main/static/textures/minecraft.png --------------------------------------------------------------------------------