最小 SOFA XML 场景结构 0-base.scn

XML 复制代码
<Node name="root" dt="0.01" gravity="0 0 0">

    <DefaultAnimationLoop />
    <DefaultVisualManagerLoop />

    <Node name="myObject" bbox="-1 -1 -1 1 1 1">
        ...
    </Node>

</Node>

一个 SOFA 仿真文件 = 一个 root 根节点 + 一些全局组件 + 若干对象节点

1. 最外层 <Node name="root">

这是整个仿真的 根节点 root node

它表示整个仿真场景从这里开始,所有对象、组件、参数,都放在这个 root 里面。

2. dt="0.01" 是时间步

dt 就是 time step,时间步长

dt="0.01" 意思是每点一次 Step,仿真时间前进 0.01 秒。

3. gravity="0 0 0" 是重力加速度

这里的 gravity 不是"重力大小",而是 重力加速度 G

gravity="0 0 0" 意思是:x方向重力 = 0,y方向重力 = 0,z方向重力 = 0

所以这个场景里暂时没有重力。

如果在 root 里设置 gravity,它会影响场景中所有有质量的对象。真正产生的力是:F = m × g

gravity 是加速度,mass 是质量,两者结合才产生重力

4. <DefaultAnimationLoop />

这是 动画循环 / 仿真循环。它负责规定每一个时间步里,SOFA 要按什么流程执行。比如:碰撞检测、力学计算、更新位置、进入下一步。但它自己不真正计算力,它更像一个调度员。

root node 之后应该定义一个 animation loop 。它负责规定:每一个 time step 里面,SOFA 要做哪些计算。

比如你点一次 Step,SOFA 要知道这一小步里该执行什么流程。 animation loop 是负责定义一个时间步内发生什么的组件。

5. <DefaultVisualManagerLoop />

这个是 视觉显示管理循环。它主要负责:把仿真结果显示到 GUI 界面里。这个不需要太纠结,因为即使你不写,SOFA 也可能默认创建它。它和物理计算关系不大,主要服务于显示。

6. <Node name="myObject">

这是一个 子节点 child node。它通常表示场景里的一个对象。比如以后可以是particle、lever、cube、snake、heart、soft robot。现在它里面只有 ... , 说明这个对象还没真正定义内容,后面会一点点往里面加MechanicalObject、Mass、ForceField、Solver、CollisionModel、Mapping......

7.仿真的两种离散化

SOFA 在做仿真时有两种离散化,时间离散化和空间离散化。

时间离散化 就是上面的 dt="0.01":每次仿真往前走 0.01 秒。

空间离散化就是用点、节点、网格来表示一个物体。真实物体是连续的,但计算机只能处理有限个点/单元。

每个 time step 里,SOFA 都会更新物体的位置和位移场。

8.data

XML 复制代码
<Node name="root">
<Node name="myObject">

这里的 name 也是一种 data

在 SOFA 里,data 不是"数据文件"的意思,而是:节点或组件的参数 / 属性。所以这些都属于 data:name="root";dt="0.01";gravity="0 0 0";bbox="-1 -1 -1 1 1 1"

新版 SOFA 右侧 Selection details → Property 里看到的,就是这些 data。

9.给对象/组件命名

可以给 DefaultAnimationLoop 起一个名字,保存、reload 之后,SOFA 的 Scene Graph 里就会显示这个名字。

命名的作用是:以后方便查找对象、以后方便连接对象、以后方便区分多个同类组件。

相关推荐
微石科技1 小时前
医疗设备维保如何从被动维修转向预防管理?宁波微石科技让运行数据提前发信号
java·后端·struts
2601_965798471 小时前
Contractor Web Setup: Deploying Bathrooms & Kitchens Theme Fast
前端·web3·php·wordpress
Dxy12393102161 小时前
Python XPath position() 完整使用指南,避坑合集(lxml适用)
前端·javascript·python
学计算机的计算基1 小时前
TCP 传输层硬核整理:三次握手、四次挥手、拥塞控制一次讲透
java·网络·笔记·网络协议·算法
晴天161 小时前
HarmonyOS 和 React 对比-Day22
前端·华为·harmonyos
都叫我大帅哥1 小时前
@EnableTransactionManagement 详解:Spring 声明式事务的基石
java·spring
2602_959960922 小时前
大厂Java面试:Spring Boot、JVM、Redis、Kafka与Elasticsearch在内容社区UGC场景下的实战拷问
java·jvm·spring boot·redis·面试题
AlienZHOU8 小时前
DeepSeek Harness 插件:HTML 实时可视化编辑
前端·agent·deepseek
St_rive9 小时前
Page Object设计模式
java·开发语言·设计模式
风流 少年10 小时前
Spring AI 2.0:SSE
java·人工智能·spring