three打造三维粒子合成对号效果

代码语言:html

所属分类:粒子

代码描述:three打造三维粒子合成对号效果

代码标签: 粒子 合成 对号 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">


</head>
<body translate="no">
<script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/three.r118.js"></script>
<script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/dat.gui-min.js"></script>
<script>
// Check it done
// Get early access to Check
// https://usecheck.com

let currentMousePos = new THREE.Vector2(0, 0);
let mousePos = new THREE.Vector2(0, 0);

const settings = {
  ease: 0.06,
  slowdownFactor: 300,
  boxSize: 0.15,
  color: 0x6e7bf2,
  backgroundColor: 0x000000 };


const gui = new dat.GUI({ autoPlace: false });
gui.add(settings, 'ease', 0, 0.2).step(0.01);
gui.add(settings, 'slowdownFactor', 0, 1000).step(10);
gui.
add(settings, 'boxSize', 0.05, 1).
step(0.05).
onChange(boxSize => {
  for (const vertex of geometry.vertices) {
    vertex.x = Math.sign(vertex.x) * boxSize / 2;
    vertex.y = Math.sign(vertex.y) * boxSize / 2;
    vertex.z = Math.sign(vertex.z) * boxSize / 2;
  }
  geometry.verticesNeedUpdate = true;
});
gui.addColor(settings, 'color').onChange(value => {
  material.color.set(value);
});
gui.addColor(settings, 'backgroundColor').onChange(value => {
  renderer.setClearColor(value, 1);
});

let ease = 1 + settings.ease;
let destIndex = 0;

document.addEventListener('mousemove', function (event) {
  currentMousePos = new THREE.Vector2(
  event.clientX / window.innerWidth - 0.5,
  event.clientY / window.innerHeight - 0.5);

});

document.addEventListener('touchmove', function (event) {
  currentMousePos = new THREE.Vector2(
  event.touches[0].clientX / window.innerWidth - 0.5,
  event.touches[0].clientY / window.innerHeight - 0.5);


  if (event.touches.length > 1) {
    destIndex = 1;
    ease = 1 - settings.ease;
    setTimeout(() => {
      ease = 1 + settings.ease;
    }, 200);
  } else {
    destIndex = 0;
    ease = 1 + settings.ease;
  }
});

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(
95,
window.innerWidth / window.innerHeight,
0.1,
1000);

camera.position.z = 30;

const renderer = new THREE.WebGLRenderer({ alpha: true });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(settings.backgroundColor, 1);

const geometry = new THREE.BoxGeometry(settings.boxSize, settings.boxSize, settings.boxSize);
const material = new THREE.MeshBasicMaterial({
  transparent: true,
  color: settings.color,
  opacity: 0.5,
  side: THREE.SingleSide });

const highlight = new THREE.MeshBasicMaterial({
  transparent: true,
  color: 0xff00ff,
  opacity: 0.5,
  side: THREE.SingleSide });


const pitchSegments = 60;
const elevationSegments = pitchSegments / 2;
const particles = pitchSegments * elevationSegments;
const side = Math.pow(particles, 1 / 3);

const radius = 16;

const parentContainer = new THREE.Object3D();
scene.add(parentContainer);

function addParticle(pos, width, height) {
  const particle = new THREE.Mesh(geometry, material);

  parentContainer.add(particle);

  const dest = new THREE.Vector3();
  dest.x = pos.x / width * radius - radius / 2;
  dest.y = pos.y / width * radius - radius / 2;
  dest.z = pos.z / width * radius - radius / 2;

  particle.position.x = Math.random() * 50 - 25;
  particle.position.y = Math.random() * 50 - 25;
  particle.position.z = Math.random() * 50 - 25;
  particle.userData = {
    dests: [dest, particle.position.clone()],
    speed: new THREE.Vector3(),
    position: particle.position.clone() };

}

const img = document.createElement('img');.........完整代码请登录后点击上方下载按钮下载查看

网友评论0