Appearance
快速开始
目标:15 行代码内,在页面上渲染一个 CAD 模型。
1. 准备 canvas
html
<canvas id="viewport" style="width: 100%; height: 480px"></canvas>2. 创建 Viewer 并加载模型
viewer.model.load() 直接接受 URL 字符串(也支持 URL / Uint8Array / Blob / 自定义 Range fetcher):
ts
import { Viewer } from "@modelcubes/viewer-core";
const canvas = document.querySelector<HTMLCanvasElement>("#viewport")!;
const viewer = await Viewer.create(canvas);
await viewer.model.load("/fixtures/demo.fmbv");
viewer.camera.fitView();纯 JavaScript 用户:去掉 <HTMLCanvasElement> 泛型与 ! 即可;顶层 await 需要 <script type="module">(或包在 async 函数里)。
如果字节已经在内存里(比如自己控制下载、或从文件选择器读入),传 Uint8Array 也可以:
ts
const resp = await fetch("/fixtures/demo.fmbv");
const bytes = new Uint8Array(await resp.arrayBuffer());
await viewer.model.load(bytes);示例模型可从本站下载:demo.fmbv(约 230 KB),放到静态资源目录的 fixtures/ 子目录(Vite 项目即 public/fixtures/),或把示例里的 URL 改成你的实际路径。
发生了什么
Viewer.create(canvas)— 初始化渲染器并启动渲染循环,resolve 后 viewer 即可使用。选项里antialias(硬件 MSAA)默认开启,通常无需配置。viewer.model.load(...)— 触发model-loading事件并开始加载。结构树骨架就绪时触发model-skeleton-ready,此时 load 的 Promise 就 resolve 了,模型已可交互;几何分块继续在后台流式到达,期间触发model-geom-progress,全部加载完成后触发model-loaded。加载失败时 Promise 会 reject 一个带code的ViewerError,用try/catch处理即可。viewer.camera.fitView()— 把相机取景到模型整体,默认带 400ms 平滑动画(可经FitViewOptions关闭)。
此时拖拽即可旋转模型,滚轮缩放,右键平移。