Spr1の新しい物理エンジンの作り方 をテンプレートにして作成
開始行:
[[Spr1の使い方/マニュアル]]
新しい物理法則エンジンの作成方法について述べる。~
+PhysicsライブラリでSGBehaviorEngineをスーパークラスとした
新しいクラスを作成(作成は、Physicsライブラリのみですべて...
SGBehaviorEngineは<SceneGraph/SGScene.h>で宣言されている...
インクルードが必要。~
~
PHTestEngineクラスを作成すると仮定して話を進める。~
~
そのクラスの記述すべては、
namespace Spr{;
}
で閉じられる必要がある(インクルードは別でよい)。~
クラスの宣言の場所では、名前を登録するためのマクロが必要...
SGOBJECTDEF(PHTestEngine);
と書けばよい。これは<FileIO/FIDocScene.h>で宣言されている...
インクルードが必要。
+クラスの.cppファイルの方に派生関係を登録するマクロを記述。
SGOBJECTIMP(PHTestEngine, SGBehaviorEngine);
+PHTestEngineクラスにメンバ関数を作成。最低限必要なものは、
Step(SGScene *s)。~
+ローダーとセイバーの作成。以下のものが最低限必要な宣言(....
class PHTestEngineLoader:public FIObjectLoader<PHTestEng...
public:
PHTestEngineLoader(){}
virtual bool LoadData(FILoadScene* ctx, PHTestEngine* te...
};
class PHTestEngineSaver:public FIObjectSaver<PHTestEngin...
virtual UTString GetType() const{ return "PHTestEngine"; }
virtual void SaveData(FISaveScene* ctx, FIDocNodeBase* d...
};
+ローダーとセイバーを登録するマクロをローダーとセイバーの...
DEF_REGISTER_BOTH(PHTestEngine);
ここの引数を使って登録するため名前は宣言と合わせること。
+Xファイルで読み込むデータを定義する(Solidなどのデータに...
-Xファイルのデータとクラスで保持するメンバ変数が対になる...
-Xファイルのデータとクラスで保持するメンバ変数が別の形で...
①の場合、定義は、メンバ変数の前に行う(例えばクラスの宣言...
ローダーの宣言の前にする。
DEF_RECORD(XTestEngine,{
//コードの部分は、~\Microsoft Visual Studio\Comm...
GUID Guid(){ return WBGuid("コード"); }
データの宣言;
});
データの宣言では、Xファイルに合わせたデータ型でなければい...
typedef Vec3f Vector;
このように、型を合わせる必要がある。
+データの定義をローダーで登録。
登録はローダーのコンストラクタで行う。
UTRef<FITypeDescDb> db = new FITypeDescDb;
db->SetPrefix("X");
db->REG_FIELD(Vector); //型を合わせたときの宣言型
db->REG_RECORD_PROTO(XTestEngine); //DEF_RECORDの最初の...
+データをメンバ変数に代入。メンバ変数の内容をデータに代入...
①の場合、メンバ変数を
XTestEngine tes;
このように記述。~
②の場合、メンバ変数は自分が必要なように記述。~
代入はローダーのメンバ関数LoadData()で行う。
①の場合、
virtual bool LoadData(FILoadScene* ctx, PHMTestEngine* t...
ctx->docs.Top()->GetWholeData(test->tes);
return true;
}
逆にデータに代入する場合、
virtual void SaveData(FISaveScene* ctx, FIDocNodeBase* d...
doc->SetWholeData(test->tes);
}
②の場合、
virtual bool LoadData(FILoadScene* ctx, PHMTestEngine* t...
XTestEngine tes;
ctx->docs.Top()->GetWholeData(tes);
自分の考えた形でメンバ変数に代入
return true;
}
逆にデータに代入する場合、
virtual void SaveData(FISaveScene* ctx, FIDocNodeBase* d...
XTestEngine tes;
自分の考えた形で上の構造体に代入
doc->SetWholeData(tes);
}
+Solidなどの子オブジェクトへの参照をメンバ変数に代入。~
これにはAddChildObject(SGObject* o, SGScene* s)を利用する...
これはPHTestEngineクラスのメンバ関数として宣言を行う。使...
// if (DCAST([データのクラス名], o)){
// [上のクラス型のメンバ変数].push_back((PHSolid*)o);
// return true;
// }
// return false;
bool PHTestEngine::AddChildObject(SGObject* o, SGScene* ...
if(DCAST(PHSolid, o)){
solid = (PHSolid*)o;
return true;
}
return false;
}
子オブジェクトを持つクラスを保存する場合はSaveData関数は...
Save()を使う。
virtual void Save(FISaveScene* ctx, SGObject* arg){
手動でノードを作成する必要あり
PHTestEngine* test = (PHSolid*)arg;
FIDocNodeBase* doc = ctx->CreateDocNode("TestEngine", te...
ctx->docs.back()->AddChild(doc);
XTestEngine tes;
自分の考えた形で上の構造体に代入
doc->SetWholeData(tes);
子オブジェクトへの参照ノードを作成
if (test->solid){
doc->AddChild(ctx->CreateDocNode("REF", test->solid));
}
}
+最後にPHRegisterLoader.cppに追加したクラスを登録する(登...
同じようにすればよい)。
終了行:
[[Spr1の使い方/マニュアル]]
新しい物理法則エンジンの作成方法について述べる。~
+PhysicsライブラリでSGBehaviorEngineをスーパークラスとした
新しいクラスを作成(作成は、Physicsライブラリのみですべて...
SGBehaviorEngineは<SceneGraph/SGScene.h>で宣言されている...
インクルードが必要。~
~
PHTestEngineクラスを作成すると仮定して話を進める。~
~
そのクラスの記述すべては、
namespace Spr{;
}
で閉じられる必要がある(インクルードは別でよい)。~
クラスの宣言の場所では、名前を登録するためのマクロが必要...
SGOBJECTDEF(PHTestEngine);
と書けばよい。これは<FileIO/FIDocScene.h>で宣言されている...
インクルードが必要。
+クラスの.cppファイルの方に派生関係を登録するマクロを記述。
SGOBJECTIMP(PHTestEngine, SGBehaviorEngine);
+PHTestEngineクラスにメンバ関数を作成。最低限必要なものは、
Step(SGScene *s)。~
+ローダーとセイバーの作成。以下のものが最低限必要な宣言(....
class PHTestEngineLoader:public FIObjectLoader<PHTestEng...
public:
PHTestEngineLoader(){}
virtual bool LoadData(FILoadScene* ctx, PHTestEngine* te...
};
class PHTestEngineSaver:public FIObjectSaver<PHTestEngin...
virtual UTString GetType() const{ return "PHTestEngine"; }
virtual void SaveData(FISaveScene* ctx, FIDocNodeBase* d...
};
+ローダーとセイバーを登録するマクロをローダーとセイバーの...
DEF_REGISTER_BOTH(PHTestEngine);
ここの引数を使って登録するため名前は宣言と合わせること。
+Xファイルで読み込むデータを定義する(Solidなどのデータに...
-Xファイルのデータとクラスで保持するメンバ変数が対になる...
-Xファイルのデータとクラスで保持するメンバ変数が別の形で...
①の場合、定義は、メンバ変数の前に行う(例えばクラスの宣言...
ローダーの宣言の前にする。
DEF_RECORD(XTestEngine,{
//コードの部分は、~\Microsoft Visual Studio\Comm...
GUID Guid(){ return WBGuid("コード"); }
データの宣言;
});
データの宣言では、Xファイルに合わせたデータ型でなければい...
typedef Vec3f Vector;
このように、型を合わせる必要がある。
+データの定義をローダーで登録。
登録はローダーのコンストラクタで行う。
UTRef<FITypeDescDb> db = new FITypeDescDb;
db->SetPrefix("X");
db->REG_FIELD(Vector); //型を合わせたときの宣言型
db->REG_RECORD_PROTO(XTestEngine); //DEF_RECORDの最初の...
+データをメンバ変数に代入。メンバ変数の内容をデータに代入...
①の場合、メンバ変数を
XTestEngine tes;
このように記述。~
②の場合、メンバ変数は自分が必要なように記述。~
代入はローダーのメンバ関数LoadData()で行う。
①の場合、
virtual bool LoadData(FILoadScene* ctx, PHMTestEngine* t...
ctx->docs.Top()->GetWholeData(test->tes);
return true;
}
逆にデータに代入する場合、
virtual void SaveData(FISaveScene* ctx, FIDocNodeBase* d...
doc->SetWholeData(test->tes);
}
②の場合、
virtual bool LoadData(FILoadScene* ctx, PHMTestEngine* t...
XTestEngine tes;
ctx->docs.Top()->GetWholeData(tes);
自分の考えた形でメンバ変数に代入
return true;
}
逆にデータに代入する場合、
virtual void SaveData(FISaveScene* ctx, FIDocNodeBase* d...
XTestEngine tes;
自分の考えた形で上の構造体に代入
doc->SetWholeData(tes);
}
+Solidなどの子オブジェクトへの参照をメンバ変数に代入。~
これにはAddChildObject(SGObject* o, SGScene* s)を利用する...
これはPHTestEngineクラスのメンバ関数として宣言を行う。使...
// if (DCAST([データのクラス名], o)){
// [上のクラス型のメンバ変数].push_back((PHSolid*)o);
// return true;
// }
// return false;
bool PHTestEngine::AddChildObject(SGObject* o, SGScene* ...
if(DCAST(PHSolid, o)){
solid = (PHSolid*)o;
return true;
}
return false;
}
子オブジェクトを持つクラスを保存する場合はSaveData関数は...
Save()を使う。
virtual void Save(FISaveScene* ctx, SGObject* arg){
手動でノードを作成する必要あり
PHTestEngine* test = (PHSolid*)arg;
FIDocNodeBase* doc = ctx->CreateDocNode("TestEngine", te...
ctx->docs.back()->AddChild(doc);
XTestEngine tes;
自分の考えた形で上の構造体に代入
doc->SetWholeData(tes);
子オブジェクトへの参照ノードを作成
if (test->solid){
doc->AddChild(ctx->CreateDocNode("REF", test->solid));
}
}
+最後にPHRegisterLoader.cppに追加したクラスを登録する(登...
同じようにすればよい)。
ページ名:
サイト内検索
and
or
メニュー
Springhead
トップページ
スクリーンショットと紹介
ダウンロード
ドキュメント
開発者向け情報
SprBlender
SprBlender
SprBlenderの特徴
SprBlender使用例
ダウンロード
ドキュメント
Choreonoid Springhead Plugin
CnoidSprPlugin
Counter: 0, today: 0, yesterday: 0