three实现三维发光粒子宇宙银河系星体旋转动画效果代码
代码语言:html
所属分类:三维
代码描述:three实现三维发光粒子宇宙银河系星体旋转动画效果代码,结合lil-gui科修改参数呈现不同的效果。
代码标签: three 三维 发光 粒子 宇宙 银河 星体 旋转 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta charset="UTF-8"> <style> html, body { margin: 0; overflow: hidden; } .webgl { position: fixed; outline: none; width: 100%; height: 100%; } </style> </head> <body > <canvas class="webgl"></canvas> <script type="importmap">{ "imports": { "three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/three.module.js" } }</script> <script type="module"> import GUI from '//repo.bfw.wiki/bfwrepo/js/lil-gui.esm.js'; import { Clock } from "three"; import { OrbitControls } from '//repo.bfw.wiki/bfwrepo/js/module/three/examples/jsm/controls/OrbitControls.js'; import * as THREE from "three"; import { Perlin } from "//repo.bfw.wiki/bfwrepo/js/module/three-noise.js"; const gui = new GUI(); gui.close(); const scene = new THREE.Scene(); /** * Galaxy */ const parameters = { branchCount: 25000, size: 0.01, galaxyRadius: 20, branches: 40, noiseScale: 0.2, turnTheta: Math.PI * 0.75, randomness: 2, randomnessPower: 4.8, insideColor: '#14ffd8', outsideColor: '#ff00f7' }; let geometry = null; let material = null; let points = null; const generateGalaxy = () => { /** * Destroy previous galaxy */ if (points !== null) { geometry.dispose(); material.dispose(); scene.remove(points); } /** * Geometry */ geometry = new THREE.BufferGeometry(); const positions = new Float32Array(parameters.branchCount * 3 * parameters.branches); const colors = new Float32Array(parameters.branchCount * 3 * parameters.branches); const colorInside = new THREE.Color(parameters.insideColor); const outsideColor = new THREE.Color(parameters.outsideColor); const perlin = new Perlin(Math.random()); for (let branch = 0; branch < parameters.branches; branch++) { const theta = branch * ((Math.PI * 2.0) / parameters.branches); let point = new THREE.Vector2(Math.cos(theta) * 0.01, Math.sin(theta) * 0.01); for (let index = 0; index < parameters.branchCount; index++) { // Spin Position // const radius = Math.random() * parameters.galaxyRadius // const spinTheta = radius * parameters.spin // const pointTheta = spinTheta + theta // Noise Position const radius = (parameters.galaxyRadius / parameters.branchCount); const thetaOffset = perlin.get2(point.clone().multiplyScalar(parameters.noiseScale)) * parameters.turnTheta; const pointTheta = (theta + thetaOffset); point = point.add(new THREE.Vector2(Math.cos(pointTheta) * radius, Math.sin(pointTheta) * radius)); const randomX = Math.pow(Math.random(), parameters.randomnessPower) * (Math.random() < 0.5 ? 1 : -1) * parameters.randomness; const randomY = Math.pow(Math.random(), parameters.randomnessPower) * (Math.random() < 0.5 ? 1 : -1) * parameters.randomness; const randomZ = Math.pow(Math.random(), parameters.randomnessPower) * (Math.random() < 0.5 ? 1 : -1) * parameters.randomness; const i3 = (branch * parameters.branchCount * 3) + (index * 3); positions[i3 + 0] =.........完整代码请登录后点击上方下载按钮下载查看
网友评论0