three实现三维机器人马拉松跑步动画代码

代码语言:html

所属分类:三维

代码描述:three实现三维机器人马拉松跑步动画代码

代码标签: three 三维 机器人 马拉松 跑步 动画 代码

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

<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<style>
  :root {
    --cyan: #00f0ff;
    --violet: #a600ff;
    --magenta: #ff007c;
    --amber: #ff7c00;
    --text: rgba(226, 248, 255, 0.9);
    --panel: rgba(2, 6, 15, 0.7);
    --border: rgba(0, 240, 255, 0.25);
  }

  html,
  body {
    width: 100%;
    height: 100%;
    margin: 0;
    overflow: hidden;
    background: #010206;
    color: white;
    font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
  }

  #container {
    position: fixed;
    inset: 0;
    width: 100vw;
    height: 100vh;
    cursor: grab;
    background:
      radial-gradient(circle at 50% 40%, rgba(10, 30, 60, 0.35), transparent 45%),
      radial-gradient(circle at 50% 110%, rgba(166, 0, 255, 0.15), transparent 50%),
      #010206;
  }

  #container:active { cursor: grabbing; }
  canvas { display: block; }

  #loading {
    position: fixed;
    inset: 0;
    z-index: 20;
    display: grid;
    place-items: center;
    background:
      radial-gradient(circle at 50% 50%, rgba(5, 15, 35, 0.95), #010206 70%),
      #010206;
    transition: opacity 800ms cubic-bezier(0.16, 1, 0.3, 1), visibility 800ms;
    pointer-events: none;
  }

  #loading.hidden {
    opacity: 0;
    visibility: hidden;
  }

  .loader-card {
    min-width: 320px;
    padding: 30px 32px;
    border: 1px solid var(--border);
    border-radius: 16px;
    background: rgba(1, 4, 12, 0.85);
    box-shadow:
      0 0 50px rgba(0, 240, 255, 0.15),
      inset 0 1px 1px rgba(255, 255, 255, 0.05);
    backdrop-filter: blur(24px);
    text-align: center;
  }

  .loader-title {
    margin: 0 0 16px;
    font-size: 12px;
    font-weight: 800;
    line-height: 1;
    letter-spacing: 0.35em;
    color: #00f0ff;
    text-transform: uppercase;
    text-shadow: 0 0 10px rgba(0, 240, 255, 0.5);
  }

  .loader-line {
    position: relative;
    overflow: hidden;
    height: 3px;
    border-radius: 999px;
    background: rgba(0, 240, 255, 0.08);
    margin-bottom: 16px;
  }

  .loader-line span {
    position: absolute;
    inset: 0 auto 0 0;
    width: 15%;
    border-radius: inherit;
    background: linear-gradient(90deg, transparent, #00f0ff, transparent);
    box-shadow: 0 0 12px #00f0ff;
    animation: loaderSweep 1.5s ease-in-out infinite;
  }

  #loading-progress {
    font-size: 11px;
    font-family: monospace;
    letter-spacing: 0.18em;
    color: rgba(0, 240, 255, 0.75);
  }

  .action-container {
    position: fixed;
    bottom: 35px;
    left: 50%;
    transform: translateX(-50%);
    z-index: 10;
    pointer-events: auto;
  }

  .cyber-btn {
    position: relative;
    background: rgba(1, 4, 15, 0.8);
    border: 1px solid rgba(0, 240, 255, 0.3);
    padding: 14px 32px;
    border-radius: 40px;
    color: #00f0ff;
    font-weight: 800;
    font-family: monospace;
    letter-spacing: 0.25em;
    font-size: 11px;
    text-transform: uppercase;
    cursor: pointer;
    backdrop-filter: blur(16px);
    transition: all 400ms cubic-bezier(0.16, 1, 0.3, 1);
    box-shadow: 
      0 10px 30px rgba(0, 0, 0, 0.5),
      inset 0 1px 0 rgba(255, 255, 255, 0.05);
    display: flex;
    align-items: center;
    gap: 12px;
  }

  .cyber-btn:hover {
    background: rgba(0, 240, 255, 0.12);
    border-color: #00f0ff;
    color: #ffffff;
    box-shadow: 
      0 0 30px rgba(0, 240, 255, 0.25),
      inset 0 0 10px rgba(0, 240, 255, 0.2);
    transform: translateY(-2px);
  }

  .cyber-btn:active {
    transform: translateY(1px);
  }

  .status-pulse {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #00f0ff;
    box-shadow: 0 0 10px #00f0ff;
    animation: modeIndicatorPulse 1s ease-in-out infinite alternate;
  }

  .status-pulse.standing {
    background: #ff007c;
    box-shadow: 0 0 10px #ff007c;
  }

  @keyframes loaderSweep {
    0% { transform: translateX(-100%); width: 10%; }
    50% { width: 60%; }
    100% { transform: translateX(300%); width: 10%; }
  }

  @keyframes modeIndicatorPulse {
    from { transform: scale(0.85); opacity: 0.6; }
    to { transform: scale(1.15); opacity: 1; }
  }
</style>

<script type="importmap">
  {
    "imports": {
      "three": "https://cdn.jsdelivr.net/npm/three@0.174.0/build/three.module.js",
      "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.174.0/examples/jsm/"
    }
  }
</script>

<div id="container"></div>

<div id="loading">
  <div class="loader-card">
    <p class="loader-title">Link Established</p>
    <div class="loader-line"><span></span></div>
    <div id="loading-progress">INITIALIZING QUANTUM ENGINES...</div>
  </div>
</div>

<div class="action-container">
  <button id="toggle-animation-btn" class="cyber-btn">
    <span id="btn-indicator" class="status-pulse"></span>
    <span id="btn-label">MODE: RUN ACTIVE</span>
  </button>
</div>

<script type="module">
  import * as THREE from "three";
  import { OrbitControls } from "three/addons/controls/OrbitControls.js";
  import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
  import { RoomEnvironment } from "three/addons/environments/RoomEnvironment.js";
  import { EffectComposer } from "three/addons/postprocessing/EffectComposer.js";
  import { RenderPass } from "three/addons/postprocessing/RenderPass.js";
  import { UnrealBloomPass } from "three/addons/postprocessing/UnrealBloomPass.js";
  import { ShaderPass } from "three/addons/postprocessing/ShaderPass.js";
  import { OutputPass } from "three/addons/postprocessing/OutputPass.js";

  function fract(x) { return x - Math.floor(x); }
  function vec2(x, y) { return { x, y }; }
  function dot2(a, b) { return a.x * b.x + a.y * b.y; }
  function hashCoords(x, y) {
    return fract(Math.sin(dot2(vec2(x, y), vec2(12.9898, 78.233))) * 43758.5453);
  }

  const container = document.getElementById("container");
  const loadingScreen = document.getElementById("loading");
  const loadingProgress = document.getElementById("loading-progress");
  const toggleBtn = document.getElementById("toggle-animation-btn");
  const btnIndicator = document.getElementById("btn-indicator");
  const btnLabel = document.getElementById("btn-label");

  const PALETTE = {
    background: 0x010206,
    obsidian: 0x03050c,
    deepIndigo: 0x080a1c,
    cyan: 0x00f0ff,
    violet: 0xa600ff,
    magenta: 0xff007c,
    amber: 0xff7c00,
    silver: 0xd2e1ec
  };

  const DEFAULT_CAMERA = new THREE.Vector3(0, 3.5, 14.2);
  const DEFAULT_TARGET = new THREE.Vector3(0, 1.2, -0.2);

  let scene, camera, renderer, controls, composer, bloomPass, finishingPass, clock, mixer;
  let robot, runningAction, standingAction, activeAction;
  let platformGroup, chamberGroup;
  let tvCanvas, tvContext, tvTexture, tvScreen, tvLight, tvGlowFrame;
  
  let techNormalMap, techRoughnessMap;

  const holoPanels = .........完整代码请登录后点击上方下载按钮下载查看

网友评论0