前端实现交互式 3D 人体肌肉解剖展示
在前端构建一个交互式的 3D 人体肌肉解剖工具,核心目标是让用户能在浏览器中旋转、缩放模型,并点击任意肌肉查看对应的中英文名称。这比依赖静态图片或昂贵软件的学习方式要直观得多。
技术架构概览
整个方案运行在浏览器端,无需后端服务介入。数据流大致如下:
- 资源层:使用 Draco 压缩的 GLB 模型作为基础资产。
- 渲染层:通过 React Three Fiber (R3F) 管理 Three.js 场景与生命周期。
- 交互层:利用 Raycaster 进行射线检测,配合材质属性变化实现高亮反馈。
- 数据层:维护肌肉 ID 映射表及多语言翻译文件。
模型来源与处理
开源模型准备
我们基于 Z-Anatomy 项目获取原始解剖数据。该 Blender 项目包含完整的人体结构,原始文件较大(约 300MB),包含上千个独立网格对象。为了适应 Web 环境,必须进行导出和压缩。
导出与压缩流程
将 Blender 文件导出为 GLB 格式是关键一步。我们需要编写脚本筛选出肌肉相关的对象,并启用 Draco 压缩算法。
# export_cli.py - Blender 命令行导出脚本
import bpy
# 定义肌肉关键词
muscle_keywords = [
'muscle', 'deltoid', 'bicep', 'tricep',
'pectoralis', 'latissimus', 'trapezius'
]
for obj in bpy.data.objects:
if obj.type == 'MESH':
name_lower = obj.name.lower()
# 仅选中包含关键词的对象
if any(keyword in name_lower for keyword in muscle_keywords):
obj.select_set(True)
# 导出为 GLB,开启 Draco 压缩
bpy.ops.export_scene.gltf(
filepath='muscle-anatomy.glb',
export_format='GLB',
use_selection=True,
export_draco_mesh_compression_enable=True,
export_draco_mesh_compression_level=6,
)
