three实现三维骰子转动显示点数效果代码

代码语言:html

所属分类:三维

代码描述:three实现三维骰子转动显示点数效果代码

代码标签: three 三维 骰子 转动 显示 点数

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

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

<head>

  <meta charset="UTF-8">
  

  
  
<style>
body {
	position: relative;
}
em {
	position: absolute;
	font-family: sans-serif;
	font-size: 8px;
	text-transform: uppercase;
	top: 4em;
	left: 50%;
	transform: translateX(-50%);
}
</style>


</head>

<body >
  <em>你可以拖动鼠标旋转我</em>

<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.110.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/anime.3.2.1.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/OrbitControls.108.js"></script>
      <script >


/** Excellent rounded box factory by Paul West:
 * https://discourse.threejs.org/t/round-edged-box/1402
 */
function createBoxWithRoundedEdges(width, height, depth, radius0, smoothness) {
  let shape = new THREE.Shape();
  let eps = 0.00001;
  let radius = radius0 - eps;
  shape.absarc(eps, eps, eps, -Math.PI / 2, -Math.PI, true);
  shape.absarc(eps, height - radius * 2, eps, Math.PI, Math.PI / 2, true);
  shape.absarc(
  width - radius * 2,
  height - radius * 2,
  eps,
  Math.PI / 2,
  0,
  true);

  shape.absarc(width - radius * 2, eps, eps, 0, -Math.PI / 2, true);
  let geometry = new THREE.ExtrudeBufferGeometry(shape, {
    amount: depth - radius0 * 2,
    bevelEnabled: true,
    bevelSegments: smoothness * 2,
    steps: 1,
    bevelSize: radius,
    bevelThickness: radius0,
    curveSegments: smoothness });


  geometry.center();

  return geometry;
}

/**
 * This method could be way more efficient :-/
 */
function createDiceMat(num) {
  const texSize = 256;
  const circSize = 20;

  const canvas = document.createElement("canvas");
  canvas.width = texSize;
  canvas.height = texSize;
  document.body.appendChild(canvas);
  const ctx = canvas.getContext("2d");

  ctx.beginPath();
  ctx.fillStyle = `#f8f8f6`;
  ctx.rect(0, 0, canvas.offsetWidth, canvas.offsetHeight);
  ctx.fill();

  if (num == 1) {
    ctx.fillStyle = `rgb(0, 0, 0)`;
    ctx.beginPath();
    ctx.arc(0.5 * texSize, 0.5 * texSize, circSize, 0, 2 * Math.PI);
    ctx.fill();
  } else if (num == 2) {
    ctx.fillStyle = `rgb(0, 0, 0)`;
    ctx.beginPath();
    ctx.arc(0.5 * texSize + 40, 0.5 * texSize - 40, circSize, 0, 2 * Math.PI);
    ctx.fill();
    ctx.beginPath();
    ctx.arc(0.5 * texSize - 40, 0.5 * texSize + 40, circSize, 0, 2 * Math.PI);
    ctx.fill();
  } else if (num == 3) {
    ctx.fillStyle = `rgb(0, 0, 0)`;
    ctx.beginPath();
    ctx.arc(0.5 * texSize + 40, 0.5 * texSize - 40, circSize, 0, 2 * Math.PI);
    ctx.fill();
    ctx.beginPath();
    ctx.arc(0.5 * texSize - 40, 0.5 * texSize + 40, circSize, 0, 2 * Math.PI);
    ctx.fill();
    ctx.beginPath();
    ctx.arc(0.5 * texSize, 0.5 * texSize, circSize, 0, 2 * Math.PI);
    ctx.fill();
  } else if (num == 4) {
    for (let c = 1; c <= 2; c++) {
      for (let r = 1; r <= 2; r++) {
        ctx.fillStyle = `rgb(0, 0, 0)`;
        ctx.beginPath();
        ctx.arc(c * texSize / 3, r * texSize / 3, circSize, 0, 2 * Math.PI);
        ctx.fill();
      }
    }

    ctx.fillStyle = `rgb(0, 0, 0)`;
    ctx.beginPath();
    ctx.arc(0.5 * texSize, 0.5 * texSize, circSize, 0, 2 * Math.PI);
    ctx.fill();
  } else if (num == 5) {
    for (let c = 1; c <= 2; c++) {
      for (let r = 1; r <= 2; r++) {
  .........完整代码请登录后点击上方下载按钮下载查看

网友评论0