- 仿真介绍
在内部,模拟器将使用额外的中间状态,以便正确地通知脚本或程序接下来会发生什么。 以下状态图说明了模拟器的内部状态:
Simulation Loop(仿真循环)
模拟器通过以恒定时间步长推进模拟时间来运行。 下图说明了主要的模拟循环:
通过尝试使仿真时间与实时同步来支持实时仿真:
以下代表一个非常简化的主要客户端应用程序(为了清晰起见,已省略消息、插件处理和其他细节):
void initializationCallback
{
// do some initialization here
}
void loopCallback
{
if ( (simGetSimulationState()&sim_simulation_advancing)!=0 )
{
if ( (simGetRealTimeSimulation()!=1)||(simIsRealTimeSimulationStepNeeded()==1) )
{
if ((simHandleMainScript()&sim_script_main_script_not_called)==0) simAdvanceSimulationByOneStep();
}
}
}
void deinitializationCallback
{
// do some clean-up here
}
根据仿真的复杂性、计算机的性能和 simulation settings,实时仿真可能并不总是可行
Simulation Speed(仿真速度)
在非实时仿真中,仿真速度(即感知速度)主要取决于两个因素:仿真时间步长(simulation time step)和一次渲染通道的模拟通道数(有关更多详细信息,请参阅仿真对话框)。 在实时仿真的情况下,仿真速度主要取决于实时乘法系数,还取决于一定程度的仿真时间步长(仿真时间步长过小可能与实时性不兼容)。 由于计算机的计算能力有限而导致仿真的特征)。 在仿真过程中,可以使用以下工具栏按钮调整模拟速度:
以某种方式调整仿真速度,以便从不增加初始模拟时间步长(因为这可能会导致例如破坏机制)。 下面两张图说明了仿真速度调节机制:
默认情况下,每个仿真周期由以下顺序操作组成:
- 执行主脚本(main script)
- 渲染场景
- 仿真时间设置对话框
- 点击[菜单栏–>Simulation–>Simulation settings]即可调出仿真对话框
- Time step:即仿真时间步长。主脚本每执行一次,仿真时间增加一个仿真时间步长。使用大仿真步长会加快仿真速度但同时也不准确/不稳定,当然使用小步长会实现更精确的模拟但会花费更长时间。因此建议默认步长。