最小 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 小时前
深入理解 Web 服务器、Servlet 容器与现代 Java Web 架构
java·服务器·servlet
weixin_399380691 小时前
Tongweb7049m10适配skywalking(by lqw)
java·skywalking
写了20年代码的老程序员1 小时前
企业微信、飞书、钉钉 Webhook 接入,后端代码为什么总是越写越丑
java·微信
用户713874229001 小时前
浏览器安全机制与现代 SPA 认证架构深度解析
前端
Momo__1 小时前
Node Modules Inspector:Vue 团队出品的依赖分析神器
前端·vue.js·npm
kisshyshy1 小时前
从零搭建全栈应用:模块化思想 + 语义化HTML + JSON‑Server快速Mock
前端
解决问题no解决代码问题1 小时前
设计模式分类介绍
java·开发语言·设计模式
yamsfeer1 小时前
电商自动化支付全链路技术拆解:从Playwright到扫码支付的底层原理
前端
DongWook1 小时前
WangEditor渲染标签自定义属性的探索
前端