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