状態の保存・再現

シミュレーションを行うと、シーンを構成するオブジェクトの状態が変化する。 ある時刻での状態を保存しておき、再現することができると、数ステップ前に戻ったり、あるステップのシミュレーションを、力を加えた場合と加えない場合で比べたりといった作業ができる。 Springheadでは、ObjectStatesIfを用いることで、以下のようにシーン全体の状態をまとめてメモリ上に保存、再現することができる。

	PHSceneIf* phScene;
	省略:phScene(物理シミュレーションのシーン)の構築
	UTRef<ObjectStatesIf> states;
	states = ObjectStatesIf::Create();	// ObjectStatesオブジェクトの作成
	states->AllocateState(phScene);		// 保存用のメモリ確保
	states->SaveState(phScene);			// 状態の保存
	phScene->Step();					// 仮のシミュレーションを進める
	省略:加速度の取得など
	states->LoadState(phScene);			// 状態の再現
	states->ReleaseState();				// メモリの開放
	省略:力を加えるなどの処理
	phScene->Step();					// 本番のシミュレーションを進める