# 柔环 · 四段圆角圆环

从 `segmented_ring.blend` 的 `Violet Ribbon • Reference Ring` 场景通过 Blender MCP 导出，保留四段真实网格、端部圆角、柔和凹槽与紫白斜纹。

在工作区根目录运行 `npm start`，打开 [柔环](http://127.0.0.1:8877/segmented-ring/)。与其余四个实验共用服务、首页、导航和 Three.js 依赖；运行时无需 Blender 或互联网。详见 [工作区说明](../README.md)。

## 操作

- 拖动旋转，滚轮或双指缩放；可切换正面、立体视角或开启自动旋转。
- 点击模型或四个色块选择分段，勾选“只看当前分段”观察端部。
- 展开距离 0–0.8：四段沿各自中间方向平移，保留网格、圆角和条纹。
- 恢复完整圆环会重置分段、展开、独立查看、旋转和相机。
- 下载原始模型获得完整 GLB，包含四段网格与内嵌斜纹纹理。网页调整不会写回 Blender，刷新即复位。

## 文件与导出

- `assets/segmented_ring.glb`：约 2.1 MB，Y 轴朝上，仅包含四段模型。
- `assets/model-info.json`：分段角度、原始名称、展开方向与圆角尺寸。
- `assets/diagonal-stripes.png`：按 Blender 材质的颜色渐变采样生成的 1024 像素纹理，另已嵌入 GLB；浏览器加载 GLB 不依赖外部图片。
- `export_model.py`：在包含圆环场景的 Blender 中运行；通过 MCP 执行时设置 `__file__` 为脚本绝对路径。使用临时场景导出并清理临时对象、材质和图像，不保存或改写原始 Blender 工程，完成后恢复之前的活动场景。
- `ring-controller.js`：仅对原始网格做平移和显隐，不缩放或重新生成圆角。

网页实时灯光与 Blender Cycles 渲染略有差异。条纹转换为可移植的基础颜色纹理，未将灯光与阴影烘焙进模型。

## JavaScript 接口

```js
await window.ringReady;
window.ring.setState({ separation: 0.5 });
window.ring.setState({ selected: 3, isolated: true });
window.ring.getState();
window.ring.reset();
window.addEventListener('ringchange', event => console.log(event.detail));
```

`selected` 为 0–3 的整数，`separation` 为 0–0.8 的有限数值，`isolated` 为布尔值。非法参数整体拒绝且不改变状态；`getState()` 返回副本。

## 验证

根目录运行 `npm test`，或 `node --test segmented-ring/tests/*.test.js`。检查实际 GLB 的四段网格、圆角尺寸、内嵌纹理、展开保持几何、精确复位和非法参数；HTTP 测试覆盖首页入口、全部演示间导航及资源加载。
