three实现六种三维粒子点线小球旋转动画效果代码
代码语言:html
所属分类:三维
代码描述:three实现六种三维粒子点线小球旋转动画效果代码
代码标签: three 六种 三维 粒子 点线 小球 旋转 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> @import url("https://fonts.googleapis.com/css2?family=Asap&display=swap"); * { margin: 0; padding: 0; box-sizing: border-box; } html, body { background: black; overscroll-behavior-x: none; overscroll-behavior-y: none; } body { font-family: "Asap", sans-serif; position: relative; width: 100vw; min-height: 100vh; text-align: center; overflow-x: hidden; color: white; } canvas { -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; position: fixed; width: 100vw; height: 100vh; top: 0; left: 0; z-index: 0; } </style> </head> <body> <canvas id="canvas"></canvas> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/es-module-shims.1.6.2.js"></script> <script type="importmap"> { "imports": { "three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/154/three.module.js", "three/addons/": "//repo.bfw.wiki/bfwrepo/js/module/three/examples/154/jsm/" } } </script> <script type="module"> /* particle spheres https://codepen.io/wakana-k/pen/mdQLMqx @wakana-k */ import * as THREE from "three"; import { TrackballControls } from "three/addons/controls/TrackballControls.js"; import * as BufferGeometryUtils from "three/addons/utils/BufferGeometryUtils.js"; let camera, scene, renderer, geometry, material, controls; let particles1, particles2, particles3, particles4, particles5, particles6; const d = 0.003; // for animation init(); function init() { camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 2, 20000); camera.position.z = 1600; scene = new THREE.Scene(); //scene.fog = new THREE.FogExp2(0x000000, 0.0005); /////////////////////////////////////// // common setting material = new THREE.PointsMaterial({ color: "pink", size: 13, sizeAttenuation: true }); const radius = 250; const particle_num = 5000; let thickness; let vertex; let colors = []; let color = new THREE.Color(); let random_ratio; /////////////////////////////////// // particle 1 - pink let vertices = []; vertex = new THREE.Vector3(); geometry = new THREE.BufferGeometry(); for (let i = 0; i < particle_num; i++) { const theta = Math.acos(THREE.MathUtils.randFloatSpread(2)); const phi = THREE.MathUtils.randFloatSpread(360); vertex.x = radius * Math.sin(theta) * Math.cos(phi); vertex.y = radius * Math.sin(theta) * Math.sin(phi); vertex.z = radius * Math.cos(theta); vertices.push(vertex.x, vertex.y, vertex.z); } geometry.setAttribute( "position", new THREE.Float32BufferAttribute(vertices, 3)); particles1 = new THREE.Points(geometry, material); particles1.position.set(-radius * 2.2, radius * 1.1, 0); scene.add(particles1); /////////////////////////////////// // particle 2 - blue geometry = new THREE.IcosahedronGeometry(radius, 10); material = material.clone(); material.color.set("skyblue"); particles2 = new THREE.Points(geometry, material); particles2.position.set(radius * 2.2, radius * 1.1, 0); scene.add(particles2); /////////////////////////////////// // particle 3 - yellow geometry = new THREE.SphereGeometry(radius, 100, 20); material = material.clone(); material.color.set("khaki"); particles3 = new THREE.Points(geometry, material); particles3.position.set(0, radius * 1.1, 0); scene.add(particles3); /////////////////////////////////// // particle 4 - green - evenly vertices = []; colors = []; vertex = new THREE.Vector3(); geometry = new THREE.BufferGeometry(); for (let i = 0; i < particle_num; i++) { const theta = Math.acos(THREE.MathUtils.randFloatSpread(2)); const phi = THREE.MathUtils.randFloatSpread(360); // outside vertex.x = radius * Math.sin(theta) * Math.cos(phi); vertex.y = radius * Math.sin(theta) * Math.sin(phi); vertex.z = radius * Math.cos(theta); /* // display outer shield : If you need // vertices.push(vertex.x, vertex.y, vertex.z); color.set("palegreen"); colors.push(color.r, color.g, color.b); */ // inside random_ratio = Math.sqrt(Math.sqrt(Math.random())); vertex.copy(vertex).multiplyScalar(random_ratio); vertices.push(vertex.x, vertex.y, vertex.z); color.setHSL(THREE.MathUtils.randFloat(0.3, 0.65), 1, 0.5); colors.push(color.r, color.g, color.b); } geometry.setAttribute( "position", .........完整代码请登录后点击上方下载按钮下载查看
网友评论0