three+webgl实现飞机引擎运行空气流动粒子动画效果代码
代码语言:html
所属分类:粒子
代码描述:three+webgl实现飞机引擎运行空气流动粒子动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> body { margin: 0; height: 100vh; overflow: hidden; display: flex; align-items: center; justify-content: center; background: #222; } </style> </head> <body > <script type="module"> import * as THREE from "https://threejs.org/build/three.module.js"; import { OrbitControls } from "https://threejs.org/examples/jsm/controls/OrbitControls.js"; let camera, scene, renderer; let mainPropeller, bladeSetA, bladeSetB, bladeSetC; let step = 0; const { PI, random, sin, cos } = Math; const TAU = 2 * PI; const uniforms = { time: { value: 0 } }; const map = (value, sMin, sMax, dMin, dMax) => { return dMin + (value - sMin) / (sMax - sMin) * (dMax - dMin); }; const range = (n, m = 0) => Array(n). fill(m). map((i, j) => i + j); const vec = (x = 0, y = 0, z = 0) => new THREE.Vector3(x, y, z); const polar = (ang, r = 1) => [r * cos(ang), r * sin(ang)]; const bladeGeometry = getBladeGeometry(); function init() { scene = new THREE.Scene(); renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000); camera.position.set(-44.93624743716165, 27.39247486400745, 85.03167637469498); camera.rotation.x = -0.31164690514668836; camera.rotation.y = -0.46605157569574196; camera.rotation.z = -0.1437609504660436; const controls = new OrbitControls(camera, renderer.domElement); addAmbientLight(scene); addDirectionalLight(scene); addResizeHandler(renderer, camera); addObjects(scene); render(); } function render() { update(); renderer.render(scene, camera); requestAnimationFrame(render); } function addObjects(scene) { createAxis(scene); mainPropeller = createMainPropeller(scene); bladeSetB = createBladeSetStageB(scene); bladeSetC = createBladeSetStageC(scene); bladeSetA = createBladeSetStageA(scene); createAirParticles(scene, uniforms); createGasParticles(scene, uniforms); } function update() { mainPropeller.rotation.x += 0.02; bladeSetA.rotation.x += 0.01; bladeSetB.rotation.x -= 0.01; .........完整代码请登录后点击上方下载按钮下载查看
网友评论0