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