NW' Blog
2026年8月18日 · 指南页面

3DViewer 模型嵌入指南

统一的 3D 模型查看入口,支持 SPZ / GLB / STEP 等格式,并可直接内嵌到页面或博客中。

3DViewer 引导预览

3DViewer 是什么?

3DViewer 是当前博客项目统一的 3D 模型浏览入口,基于 Three.jsOrbitControls 构建,支持直接打开本地或公开 URL 的 SPZGLBSTEP / STP 文件,并提供常用的 相机操作光源控制导出URL 参数 机制。

它的定位不是单一的高斯泼溅播放器,而是统一 3D 模型查看器:无论模型格式是什么,都走同一个入口 /ToolBase/3DViewer/3DViewer.html。这让文章中的嵌入方式保持一致,也避免继续维护旧的 /ToolBase/spz/spzViewer.html 方案。


核心能力

  • 多格式支持.spz.glb.step.stp
  • 交互操作:鼠标旋转 / 平移 / 缩放,适配 OrbitControls
  • 光照调节:主光 / 环境光 / 跟随相机 / 显示方向
  • 辅助网格:参考地面网格可按需隐藏
  • 导出能力:支持导出到 GLB / STEP 等目标格式
  • URL 参数化:可直接嵌入预设相机、光源、UI 状态

最小嵌入方式

直接把 3DViewer.html 作为 iframe 的目标页即可,URL 参数中传入模型地址即可:

html
<div class="splat-viewer-wrapper">
  <iframe
    src="/ToolBase/3DViewer/3DViewer.html?url=%2FToolBase%2F3DViewer%2Fspz%2FDingZheng.spz"
    class="splat-viewer-iframe"
    frameborder="0"
    allowfullscreen
    loading="lazy"
    style="width:100%;height:480px;display:block;border-radius:12px;"
  ></iframe>
</div>

同样适用于 GLB / STEP:

html
/ToolBase/3DViewer/3DViewer.html?url=%2FToolBase%2F3DViewer%2Fstep%2F3D_PCB3_1_2026-08-18.step
/ToolBase/3DViewer/3DViewer.html?url=%2FToolBase%2F3DViewer%2Fglb%2Fexample.glb

实时演示

下面的示例直接展示当前项目自带的 SPZ 模型,说明 3DViewer 的页面嵌入方式。

说明:iframe 中的浏览器会按当前模型文件加载并显示 3D 场景;若资源不可访问,请确认路径和公开权限正确。


常见 URL 参数

3DViewer 支持通过查询参数直接定义初始相机、目标和界面显示状态。下面是常用参数速查:

参数 含义 示例
url模型文件 URL/ToolBase/3DViewer/spz/DingZheng.spz
camera / cameraPos / cameraPosition相机位置camera=18,12,18
target / lookAt观察目标target=0,0,0
ui=0 / hideUI=1 / uiHidden=1隐藏 UI?ui=0
grid=0 / hideGrid=1 / gridHidden=1隐藏参考网格?grid=0
light / lightPosition主光位置light=12,16,8
lightIntensity主光强度lightIntensity=2.4
ambient环境光强度ambient=1.6
lightFollow=1主光跟随相机lightFollow=1

完整示例:

url
/ToolBase/3DViewer/3DViewer.html?url=%2FToolBase%2F3DViewer%2Fstep%2F3D_PCB3_1_2026-08-18.step&camera=18,15,18&target=0,0,0&light=12,18,8&lightIntensity=2.5&ambient=1.3&ui=0&grid=0

点击加载版(省流量)

如果模型较大、首屏不必立刻加载,也可以先渲染一个占位区,再点击后注入 iframe。这个模式常见于演示页和文章中的大模型嵌入;实现思路与 tool-editor-article.astroDOM.spzInsertBtn 的写法一致:先放一个占位盒子,点击时再执行 iframe.src = ...

javascript
const iframe = document.createElement('iframe');
iframe.src = '/ToolBase/3DViewer/3DViewer.html?url=%2FToolBase%2F3DViewer%2Fspz%2FDingZheng.spz';
iframe.className = 'splat-viewer-iframe';
iframe.loading = 'lazy';
container.appendChild(iframe);

推荐写法

  1. 文章中展示 3D 模型时,优先使用统一入口 /ToolBase/3DViewer/3DViewer.html
  2. 如果要展示的是单个 SPZ 模型,仍然使用同一入口,而不是老的 SPZ viewer。
  3. 如果模型较大,使用点击加载占位以减少首屏资源消耗。
  4. 补充一句说明:模型来源、观察重点、加载失败时的替代文本。

评论区 留下您的想法
教程