├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public └── waves.jpg ├── src ├── index.html ├── index.js ├── shaders │ ├── object │ │ ├── fragment.js │ │ └── vertex.js │ ├── utils.js │ └── water │ │ ├── fragment.js │ │ └── vertex.js └── style.css └── vite.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Demo: https://waves-threejs-webgl.vercel.app 2 | 3 | Reference: https://twitter.com/cmzw_/status/1706988554856059307?s=12 4 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "waves", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "waves", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "dat.gui": "^0.7.9", 12 | "three": "^0.157.0" 13 | }, 14 | "devDependencies": { 15 | "vite": "^4.4.9" 16 | } 17 | }, 18 | "node_modules/@esbuild/android-arm": { 19 | "version": "0.18.20", 20 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 21 | "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 22 | "cpu": [ 23 | "arm" 24 | ], 25 | "dev": true, 26 | "optional": true, 27 | "os": [ 28 | "android" 29 | ], 30 | "engines": { 31 | "node": ">=12" 32 | } 33 | }, 34 | "node_modules/@esbuild/android-arm64": { 35 | "version": "0.18.20", 36 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 37 | "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 38 | "cpu": [ 39 | "arm64" 40 | ], 41 | "dev": true, 42 | "optional": true, 43 | "os": [ 44 | "android" 45 | ], 46 | "engines": { 47 | "node": ">=12" 48 | } 49 | }, 50 | "node_modules/@esbuild/android-x64": { 51 | "version": "0.18.20", 52 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 53 | "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 54 | "cpu": [ 55 | "x64" 56 | ], 57 | "dev": true, 58 | "optional": true, 59 | "os": [ 60 | "android" 61 | ], 62 | "engines": { 63 | "node": ">=12" 64 | } 65 | }, 66 | "node_modules/@esbuild/darwin-arm64": { 67 | "version": "0.18.20", 68 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 69 | "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 70 | "cpu": [ 71 | "arm64" 72 | ], 73 | "dev": true, 74 | "optional": true, 75 | "os": [ 76 | "darwin" 77 | ], 78 | "engines": { 79 | "node": ">=12" 80 | } 81 | }, 82 | "node_modules/@esbuild/darwin-x64": { 83 | "version": "0.18.20", 84 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 85 | "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 86 | "cpu": [ 87 | "x64" 88 | ], 89 | "dev": true, 90 | "optional": true, 91 | "os": [ 92 | "darwin" 93 | ], 94 | "engines": { 95 | "node": ">=12" 96 | } 97 | }, 98 | "node_modules/@esbuild/freebsd-arm64": { 99 | "version": "0.18.20", 100 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 101 | "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 102 | "cpu": [ 103 | "arm64" 104 | ], 105 | "dev": true, 106 | "optional": true, 107 | "os": [ 108 | "freebsd" 109 | ], 110 | "engines": { 111 | "node": ">=12" 112 | } 113 | }, 114 | "node_modules/@esbuild/freebsd-x64": { 115 | "version": "0.18.20", 116 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 117 | "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 118 | "cpu": [ 119 | "x64" 120 | ], 121 | "dev": true, 122 | "optional": true, 123 | "os": [ 124 | "freebsd" 125 | ], 126 | "engines": { 127 | "node": ">=12" 128 | } 129 | }, 130 | "node_modules/@esbuild/linux-arm": { 131 | "version": "0.18.20", 132 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 133 | "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 134 | "cpu": [ 135 | "arm" 136 | ], 137 | "dev": true, 138 | "optional": true, 139 | "os": [ 140 | "linux" 141 | ], 142 | "engines": { 143 | "node": ">=12" 144 | } 145 | }, 146 | "node_modules/@esbuild/linux-arm64": { 147 | "version": "0.18.20", 148 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 149 | "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 150 | "cpu": [ 151 | "arm64" 152 | ], 153 | "dev": true, 154 | "optional": true, 155 | "os": [ 156 | "linux" 157 | ], 158 | "engines": { 159 | "node": ">=12" 160 | } 161 | }, 162 | "node_modules/@esbuild/linux-ia32": { 163 | "version": "0.18.20", 164 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 165 | "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 166 | "cpu": [ 167 | "ia32" 168 | ], 169 | "dev": true, 170 | "optional": true, 171 | "os": [ 172 | "linux" 173 | ], 174 | "engines": { 175 | "node": ">=12" 176 | } 177 | }, 178 | "node_modules/@esbuild/linux-loong64": { 179 | "version": "0.18.20", 180 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 181 | "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 182 | "cpu": [ 183 | "loong64" 184 | ], 185 | "dev": true, 186 | "optional": true, 187 | "os": [ 188 | "linux" 189 | ], 190 | "engines": { 191 | "node": ">=12" 192 | } 193 | }, 194 | "node_modules/@esbuild/linux-mips64el": { 195 | "version": "0.18.20", 196 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 197 | "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 198 | "cpu": [ 199 | "mips64el" 200 | ], 201 | "dev": true, 202 | "optional": true, 203 | "os": [ 204 | "linux" 205 | ], 206 | "engines": { 207 | "node": ">=12" 208 | } 209 | }, 210 | "node_modules/@esbuild/linux-ppc64": { 211 | "version": "0.18.20", 212 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 213 | "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 214 | "cpu": [ 215 | "ppc64" 216 | ], 217 | "dev": true, 218 | "optional": true, 219 | "os": [ 220 | "linux" 221 | ], 222 | "engines": { 223 | "node": ">=12" 224 | } 225 | }, 226 | "node_modules/@esbuild/linux-riscv64": { 227 | "version": "0.18.20", 228 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 229 | "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 230 | "cpu": [ 231 | "riscv64" 232 | ], 233 | "dev": true, 234 | "optional": true, 235 | "os": [ 236 | "linux" 237 | ], 238 | "engines": { 239 | "node": ">=12" 240 | } 241 | }, 242 | "node_modules/@esbuild/linux-s390x": { 243 | "version": "0.18.20", 244 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 245 | "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 246 | "cpu": [ 247 | "s390x" 248 | ], 249 | "dev": true, 250 | "optional": true, 251 | "os": [ 252 | "linux" 253 | ], 254 | "engines": { 255 | "node": ">=12" 256 | } 257 | }, 258 | "node_modules/@esbuild/linux-x64": { 259 | "version": "0.18.20", 260 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 261 | "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 262 | "cpu": [ 263 | "x64" 264 | ], 265 | "dev": true, 266 | "optional": true, 267 | "os": [ 268 | "linux" 269 | ], 270 | "engines": { 271 | "node": ">=12" 272 | } 273 | }, 274 | "node_modules/@esbuild/netbsd-x64": { 275 | "version": "0.18.20", 276 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 277 | "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 278 | "cpu": [ 279 | "x64" 280 | ], 281 | "dev": true, 282 | "optional": true, 283 | "os": [ 284 | "netbsd" 285 | ], 286 | "engines": { 287 | "node": ">=12" 288 | } 289 | }, 290 | "node_modules/@esbuild/openbsd-x64": { 291 | "version": "0.18.20", 292 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 293 | "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 294 | "cpu": [ 295 | "x64" 296 | ], 297 | "dev": true, 298 | "optional": true, 299 | "os": [ 300 | "openbsd" 301 | ], 302 | "engines": { 303 | "node": ">=12" 304 | } 305 | }, 306 | "node_modules/@esbuild/sunos-x64": { 307 | "version": "0.18.20", 308 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 309 | "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 310 | "cpu": [ 311 | "x64" 312 | ], 313 | "dev": true, 314 | "optional": true, 315 | "os": [ 316 | "sunos" 317 | ], 318 | "engines": { 319 | "node": ">=12" 320 | } 321 | }, 322 | "node_modules/@esbuild/win32-arm64": { 323 | "version": "0.18.20", 324 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 325 | "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 326 | "cpu": [ 327 | "arm64" 328 | ], 329 | "dev": true, 330 | "optional": true, 331 | "os": [ 332 | "win32" 333 | ], 334 | "engines": { 335 | "node": ">=12" 336 | } 337 | }, 338 | "node_modules/@esbuild/win32-ia32": { 339 | "version": "0.18.20", 340 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 341 | "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 342 | "cpu": [ 343 | "ia32" 344 | ], 345 | "dev": true, 346 | "optional": true, 347 | "os": [ 348 | "win32" 349 | ], 350 | "engines": { 351 | "node": ">=12" 352 | } 353 | }, 354 | "node_modules/@esbuild/win32-x64": { 355 | "version": "0.18.20", 356 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 357 | "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 358 | "cpu": [ 359 | "x64" 360 | ], 361 | "dev": true, 362 | "optional": true, 363 | "os": [ 364 | "win32" 365 | ], 366 | "engines": { 367 | "node": ">=12" 368 | } 369 | }, 370 | "node_modules/dat.gui": { 371 | "version": "0.7.9", 372 | "resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.9.tgz", 373 | "integrity": "sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==" 374 | }, 375 | "node_modules/esbuild": { 376 | "version": "0.18.20", 377 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 378 | "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 379 | "dev": true, 380 | "hasInstallScript": true, 381 | "bin": { 382 | "esbuild": "bin/esbuild" 383 | }, 384 | "engines": { 385 | "node": ">=12" 386 | }, 387 | "optionalDependencies": { 388 | "@esbuild/android-arm": "0.18.20", 389 | "@esbuild/android-arm64": "0.18.20", 390 | "@esbuild/android-x64": "0.18.20", 391 | "@esbuild/darwin-arm64": "0.18.20", 392 | "@esbuild/darwin-x64": "0.18.20", 393 | "@esbuild/freebsd-arm64": "0.18.20", 394 | "@esbuild/freebsd-x64": "0.18.20", 395 | "@esbuild/linux-arm": "0.18.20", 396 | "@esbuild/linux-arm64": "0.18.20", 397 | "@esbuild/linux-ia32": "0.18.20", 398 | "@esbuild/linux-loong64": "0.18.20", 399 | "@esbuild/linux-mips64el": "0.18.20", 400 | "@esbuild/linux-ppc64": "0.18.20", 401 | "@esbuild/linux-riscv64": "0.18.20", 402 | "@esbuild/linux-s390x": "0.18.20", 403 | "@esbuild/linux-x64": "0.18.20", 404 | "@esbuild/netbsd-x64": "0.18.20", 405 | "@esbuild/openbsd-x64": "0.18.20", 406 | "@esbuild/sunos-x64": "0.18.20", 407 | "@esbuild/win32-arm64": "0.18.20", 408 | "@esbuild/win32-ia32": "0.18.20", 409 | "@esbuild/win32-x64": "0.18.20" 410 | } 411 | }, 412 | "node_modules/fsevents": { 413 | "version": "2.3.3", 414 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 415 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 416 | "dev": true, 417 | "hasInstallScript": true, 418 | "optional": true, 419 | "os": [ 420 | "darwin" 421 | ], 422 | "engines": { 423 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 424 | } 425 | }, 426 | "node_modules/nanoid": { 427 | "version": "3.3.6", 428 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 429 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 430 | "dev": true, 431 | "funding": [ 432 | { 433 | "type": "github", 434 | "url": "https://github.com/sponsors/ai" 435 | } 436 | ], 437 | "bin": { 438 | "nanoid": "bin/nanoid.cjs" 439 | }, 440 | "engines": { 441 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 442 | } 443 | }, 444 | "node_modules/picocolors": { 445 | "version": "1.0.0", 446 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 447 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 448 | "dev": true 449 | }, 450 | "node_modules/postcss": { 451 | "version": "8.4.31", 452 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", 453 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", 454 | "dev": true, 455 | "funding": [ 456 | { 457 | "type": "opencollective", 458 | "url": "https://opencollective.com/postcss/" 459 | }, 460 | { 461 | "type": "tidelift", 462 | "url": "https://tidelift.com/funding/github/npm/postcss" 463 | }, 464 | { 465 | "type": "github", 466 | "url": "https://github.com/sponsors/ai" 467 | } 468 | ], 469 | "dependencies": { 470 | "nanoid": "^3.3.6", 471 | "picocolors": "^1.0.0", 472 | "source-map-js": "^1.0.2" 473 | }, 474 | "engines": { 475 | "node": "^10 || ^12 || >=14" 476 | } 477 | }, 478 | "node_modules/rollup": { 479 | "version": "3.29.4", 480 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", 481 | "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", 482 | "dev": true, 483 | "bin": { 484 | "rollup": "dist/bin/rollup" 485 | }, 486 | "engines": { 487 | "node": ">=14.18.0", 488 | "npm": ">=8.0.0" 489 | }, 490 | "optionalDependencies": { 491 | "fsevents": "~2.3.2" 492 | } 493 | }, 494 | "node_modules/source-map-js": { 495 | "version": "1.0.2", 496 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 497 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 498 | "dev": true, 499 | "engines": { 500 | "node": ">=0.10.0" 501 | } 502 | }, 503 | "node_modules/three": { 504 | "version": "0.157.0", 505 | "resolved": "https://registry.npmjs.org/three/-/three-0.157.0.tgz", 506 | "integrity": "sha512-CeAwQrf4x3z0/e+MC4F+nXLW5t0gh3pw+L6CCBqpHvOq3bGYIgRYub7Pv0j/9wR+d++OiEglyZzWyuSYbwWGOA==" 507 | }, 508 | "node_modules/vite": { 509 | "version": "4.4.9", 510 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", 511 | "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", 512 | "dev": true, 513 | "dependencies": { 514 | "esbuild": "^0.18.10", 515 | "postcss": "^8.4.27", 516 | "rollup": "^3.27.1" 517 | }, 518 | "bin": { 519 | "vite": "bin/vite.js" 520 | }, 521 | "engines": { 522 | "node": "^14.18.0 || >=16.0.0" 523 | }, 524 | "funding": { 525 | "url": "https://github.com/vitejs/vite?sponsor=1" 526 | }, 527 | "optionalDependencies": { 528 | "fsevents": "~2.3.2" 529 | }, 530 | "peerDependencies": { 531 | "@types/node": ">= 14", 532 | "less": "*", 533 | "lightningcss": "^1.21.0", 534 | "sass": "*", 535 | "stylus": "*", 536 | "sugarss": "*", 537 | "terser": "^5.4.0" 538 | }, 539 | "peerDependenciesMeta": { 540 | "@types/node": { 541 | "optional": true 542 | }, 543 | "less": { 544 | "optional": true 545 | }, 546 | "lightningcss": { 547 | "optional": true 548 | }, 549 | "sass": { 550 | "optional": true 551 | }, 552 | "stylus": { 553 | "optional": true 554 | }, 555 | "sugarss": { 556 | "optional": true 557 | }, 558 | "terser": { 559 | "optional": true 560 | } 561 | } 562 | } 563 | } 564 | } 565 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "waves", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build" 9 | }, 10 | "devDependencies": { 11 | "vite": "^4.4.9" 12 | }, 13 | "dependencies": { 14 | "dat.gui": "^0.7.9", 15 | "three": "^0.157.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /public/waves.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git1029/waves_threejs/4aec76a628c7c84f72c07927fd8c5fc8a91640da/public/waves.jpg -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |