three实现三维人物骨骼节点自动生成调整蒙皮姿态调整导出代码

代码语言:html

所属分类:三维

代码描述:three实现三维人物骨骼节点自动生成调整蒙皮姿态调整导出代码

代码标签: three 三维 人物 骨骼 节点 自动 生成 调整 蒙皮 姿态 调整 导出 代码

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

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
  <title>Three.js 自动骨骼 + 蒙皮绑定 + 姿态编辑</title>
  <style>
    :root {
      --bg: #0f172a;
      --panel: rgba(0,0,0,.65);
      --muted: #9aa0a6;
      --accent: #60a5fa;
    }

    html, body {
      height: 100%;
    }

    body {
      margin: 0;
      overflow: hidden;
      background: #10151e;
      color: #e5e7eb;
      font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, "Microsoft YaHei", sans-serif;
    }

    #panel {
      position: absolute;
      top: 10px;
      left: 10px;
      width: 320px;
      max-height: calc(100% - 20px);
      overflow: auto;
      background: var(--panel);
      backdrop-filter: blur(6px);
      -webkit-backdrop-filter: blur(6px);
      padding: 12px;
      border-radius: 10px;
      box-shadow: 0 6px 20px rgba(0,0,0,.4);
    }

    h3 {
      margin: 0 0 8px 0;
      font-size: 16px;
    }

    .section {
      margin: 10px 0 14px 0;
      padding: 10px;
      border-radius: 8px;
      background: rgba(255,255,255,.06);
    }

    .row {
      display: flex;
      gap: 8px;
      align-items: center;
      margin: 8px 0;
    }

    input[type=file] {
      flex: 1;
    }

    .btn {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      width: 100%;
      padding: 8px;
      border: 0;
      border-radius: 8px;
      background: #334155;
      color: #fff;
      cursor: pointer;
    }

    .btn:hover {
      background: #3b4960;
    }

    .btn.ok {
      background: #16a34a;
    }

    .btn.warn {
      background: #d97706;
    }

    .btn.ghost {
      background: transparent;
      border: 1px solid rgba(255,255,255,.15);
    }

    .btn:disabled {
      opacity: .6;
      cursor: not-allowed;
    }

    .grid-2 {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 8px;
    }

    label.small {
      font-size: 12px;
      color: #cbd5e1;
    }

    .hint {
      font-size: 12px;
      color: #cbd5e1;
      background: rgba(96,165,250,.12);
      padding: 8px;
      border-radius: 8px;
    }

    #status {
      position: absolute;
      bottom: 10px;
      left: 10px;
      background: var(--panel);
      padding: 8px 10px;
      border-radius: 8px;
      font-size: 12px;
    }
  </style>
</head>
<body>
<div id="panel">
  <h3>自动骨骼 + 蒙皮绑定</h3>

  <div class="section">
    <div class="row">
      <b>1) 加载静态角色网格 (GLB/GLTF)</b>
    </div>
    <div class="row">
      <input id="fileModel" type="file" accept=".glb,.gltf"/>
    </div>
    <div class="hint">如果模型没有骨骼,将自动生成人形骨架,拖拽关节进行布置。</div>
  </div>

  <div class="section">
    <div class="row"><b>2) 骨骼操作</b></div>
    <div class="grid-2">
      <button id="modeRig" class="btn warn" disabled>骨架布置(平移)</button>
      <button id="modePose" class="btn" disabled>姿态(旋转)</button>
    </div>
    <div class="grid-2" style="margin-top:8px">
      <button id="rebuildRigBtn" class="btn ghost" disabled>重新生成人形骨架</button>
      <button id="toggleBonesBtn" class="btn ghost" disabled>显示/隐藏骨骼</button>
    </div>
  </div>

  <div class="section">
    <div class="row"><b>3) 蒙皮绑定</b></div>
    <div class="grid-2">
      <button id="bindBtn" class="btn ok" disabled>绑定蒙皮</button>
      <button id="reweightBtn" class="btn" disabled>重算权重</button>
    </div>
    <div class="row" style="gap:10px">
      <label class="small" style="width:90px">衰减指数</label>
      <input id="power" type="range" min="0.8" max="3.0" step="0.1" value="1.6"/>
      <span id="powerVal" class="small" style="width:36px;text-align:right">1.6</span>
    </div>
    <div class="row" style="gap:10px">
      <label class="small" style="width:90px">使用段数</label>
      <input id="neighbors" type="range" min="1" max="3" step="1" value="2"/>
      <span id="neighborsVal" class="small" style="width:36px;text-align:right">2</span>
    </div>
    <div class="hint">算法:按“距离最近的骨段”,对该段的父/子骨按插值权重分配;可选加入次近段,最多 4 骨影响。</div>
  </div>.........完整代码请登录后点击上方下载按钮下载查看

网友评论0