最小 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 里就会显示这个名字。

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

相关推荐
蓝桉柒717 分钟前
java字面量,变量
java
典典分享指南21 分钟前
一品牌多产品线的 GEO 内容矩阵:从策略到落地
java·c#·bash·symfony
OpenTiny社区24 分钟前
【直播分享】GenUI SDK 技术公开课第二讲 | GenuiChat 核心配置深度解析
前端·github
计算机魔术师24 分钟前
kernel.org 每天 600 万次请求,98% 不是人点的
前端
今日无bug34 分钟前
从0到1手撕流式输出:Vue3 + Vite 实现 LLM 流式响应全解析
前端·vue.js·vite
光影少年1 小时前
react navite跨端项目的痛点、踩过哪些坑、怎么解决
前端·react native·react.js
默_笙1 小时前
🧀 用户访问一个网站到底经历了什么?全栈部署的"城市观光"指南
前端·javascript
aixingpan1 小时前
aixingpan.cn API开发文档:api_docs_trichart_natal_composite_transit2接口指南
前端·php
是立不是利1 小时前
CSS 架构——在混乱中建立秩序
前端·html
用户094248568031 小时前
第3章:OpenJDK从源码到字节码——Class 文件与 javac 管线
java·jvm