three实现三维立体多边形线框旋转动画效果代码

代码语言:html

所属分类:三维

代码描述:three实现三维立体多边形线框旋转动画效果代码,拖动可三维旋转。

代码标签: three 三维 立体 多边形 线框 旋转 动画

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

<!DOCTYPE html>
<html lang="en" >

<head>
 
<meta charset="UTF-8">
 

 
 
 
<style>
body
{
 
overflow: hidden;
 
margin: 0;
 
background-color: black;
}

canvas
{
 
position: absolute;
 
top: 50%;
 
left: 50%;
 
transform: translate(-50%, -50%);
}
</style>


 
</head>

<body translate="no">
 
<script type="importmap">
 
{
   
"imports": {
     
"three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/163/three.module.js",
     
"three/addons/": "//repo.bfw.wiki/bfwrepo/js/module/three/examples/163/jsm/"
   
}
 
}
</script>


<canvas id="cnv"></canvas>
 
     
<script type="module">
import { Scene, PerspectiveCamera, Object3D, Vector3, Euler, Color, Clock, MathUtils } from "three";
import { OrbitControls } from "three/addons/controls/OrbitControls.js";

console.clear();
let mu = MathUtils;

let c = new Color();
let palettes = [
["#FC1FF9", "#BC0EEF", "#443061", "#E42536", "#FC5E31"], //Futurism
["#00F891", "#00D61C", "#021307", "#0346F4", "#05E9E7"], // Radium Bloom
["#FF5BFF", "#D34DEE", "#BF4BF8", "#2AC9F9", "#56F1FF"], // Industrial Glow
["#FE02FF", "#DF21FF", "#8407CE", "#5F03BD", "#2F0049"], // Purple Palm
["#B6FFFE", "#48FDFE", "#F20BF8", "#150390", "#1E0C2D"] // Blacklight
];
let palette = palettes[0];

cnv.offscreenCanvas = document.createElement("canvas");
let offCtx = cnv.offscreenCanvas.getContext("2d");

let u = 0;
let unit = val => u * val;
let resize = () => {
  cnv.height = innerHeight * 0.95;
  cnv.width = innerHeight * 0.95;
  cnv.offscreenCanvas.height = cnv.height;
  cnv.offscreenCanvas.width = cnv.width;
  u = cnv.height * 0.01;

  cnv.style.border = `${unit(1)}px solid ${palette[3]}`;
  cnv.style.borderRadius = `${unit(27.2)}px`;

  drawHole(offCtx);
};
window.addEventListener("resize", resize);
resize();

cnv.addEventListener("dblclick", event => {
  let bcr = event.target.getBoundingClientRect();
  let y = event.clientY - bcr.top;
  let palIdx = Math.floor(y / unit(1) / (100 / palettes.length)); // depends on Y-coord of the click
  palette = palettes[palIdx];
  drawHole(offCtx);
  resize();
  setRingColors();
});

let ctx = cnv.getContext("2d");

let ringsCount = 25;
let rings = Array.from({ length: ringsCount }, (_, idx) => {
  let si.........完整代码请登录后点击上方下载按钮下载查看

网友评论0