devel
(できるところから手を付けていきましょう.手をつけるときはIRCで告知しましょう.)
公開に向けて
そのほか
開発方針的なTODO
- API検討
APIを詰めていく.「testコードを書く → 不便を感じる → OpenDynamicsEngine/Novodexを見ながらAPIを追加する」の繰り返しでAPIを増やしていく.
- 高級言語のラッパー
- 現在Rubyラッパーを作成中。by tazz
- 最低限のレベルは実装完了。現在開発凍結中。引継ぎ手歓迎。by tazz 08/11/08
- GUI検討
- これもRubyが有望
- FXRuby?
- FXRubyによるGUIを途中まで作りましたが凍結中です。すみません by tazz 08/11/08
- メタセコプラグイン?メタセコはあくまでモデラーとして個別に使う方が良い?
保留中のTODO
- 名前変更
インタフェースにPHSolidIfなどIfが着いていますが,実装のほうにImpをつけて,インタフェースは何もつけないのが最終形態のつもりです.実装のクラス名が実装の内部でいろいろ参照されているので,面倒なので,名前の修正を省略しました.
ある程度固まってきたら,まとめてやりましょう.
MEMO
TODOに手をつけたり,終わったときは,こちらに.
- 頂点フォーマットの指定の追加
- 背景:グラフィックス用のシーングラフを作るために,頂点フォーマット指定の仕組みが
必要だった.
- 次のAPIを追加/変更
- GRRenderBaseIf::SetVertexFormat(GRVertexElement* )
- GRRenderBaseIf::DrawDirect
- GRRenderBaseIf::DrawIndexed
- シェーダーの指定ができるようにする.SetVertexShader()が必要.
→ SetShaderFormat()を作りました.
- LoadState/SaveState APIをObjectにつける.:完了
- ConstraintEngine (田崎君):
拘束エンジンを作る.接触判定は今までのものを利用.
- descの修正,stateの導入
Solidなどのオブジェクトは,descを渡してCreateできる.
- descには,オブジェクトの情報(変数)がすべて書かれているようにしたい.
- stateは,シミュレーションを進めると変化する情報(変数)が入る.
- ファイルセーブ・ロードはdescのセーブ・ロードで対応する.オブジェクトにdescのセーブ・ロード機能を付けたい.
- 状態のセーブ・ロード機能をつけて,「5秒前の状態にもどす」などができるようにしたい.オブジェクトにstateをセーブ・ロードする機能が必要.
- Graphicsライブラリの実装
- PHSdk Shapeの修正
- ShapeをSceneで共有できるようにする.
- Shapeを所有するのはPHSdk
- PHSdkがnamesを持つ.PHSdkのnamesに登録.scene->FindObject では検索できない.sdk->FindObjectを使う.
- 毎日のテストへの対応
ビルドができたら,テスト実行をするようにしました.
tests以下のプログラムをテスト実行に対応させてください.毎日のテストは:
- src\tests\Physics\プロジェクト名\Debug\プロジェクト名.exe を実行します.
- 自動的に終了するように作ってください.そうでないと毎日のビルドがそこで止まってしまいます.
- exitが0を返すと成功,それ以外は失敗とみなします.
- 標準出力(std::cout)への出力が Build.log に残ります.
- 標準出力(std::cout)のうち「error」という文字列を含む行が BuildError.log に残ります.
- DSTR への出力はのこりません.
- 配列インタフェース見直し
共通配列インタフェーステンプレートを使ったインタフェース(田崎君)
SolidIf ShapeIf ConvexMeshIf へのインタフェース追加.外部で描画できるように(田崎君)
- 配列のAPI
配列のAPIを実装の都合で変えたくないが, ShapeのFaceについては,変わってしまった.
ShapeはFaceの実体を配列として持つので, CDFaceIf** GetFaces() は実装困難.
汎用配列インタフェースを考えるが,配列クラスから親クラスをアクセスする方法,
親クラスの関数の呼び出し方法などで悩んで頓挫.
配列IF と 配列実装 を作るしかないか.
そうしたとして, iterator を提供できるのか? → strideを明示できるのでできる.
意味があるのか? → virtual のオーバヘッドが重くなってしまうので インデックスでまわすほうが効率よい?
- TPoseを完成させる(大内君)
TPose (Affineと同様姿勢を表す.Quaternion と Vec3で向きと位置を表現する.)
Affineと同様に使えるインタフェース.Affineを返すインタフェースなどが必要.
TQuaternion の from_matrix to_matrix も名前が変なので,動作とあわせて再検討.
- PHPenaltyEngine <- 従来のPHContactEngine
複雑な CollisionEngineとContactEngineの関係はなくした.CollisionEngine廃止.
新PenaltyEngineのStep内=CollisionEngineのStep
- PHSolidIf にAddShapeが必要.
NovodexはShapeを共有しないが,Springheadは共有する.そのため,生成と別にSolidへの追加が必要.
- インタフェースの所有権.ユーザはインタフェースを参照するだけにするか,所有して,使用後にdeleteするか.
どっちでも上手く行く仕組みができた.ユーザはUTRef<PHScene>のように所有してもよいし, PHScene* として参照してもよい.
参照の場合,SDKが消えるとみな消える.Sceneが消えるとSolidも消える.
- descを用意する.PHSolidDescだけは作ってみました.他のクラスも同様にdescが使えると便利だと思います.
→CDConvexMesh のdescは用意した.他は必要に応じて作る.
NovodexはSolidDesc->MeshDesc->MeshDescのようにデスクがリンクリストになって,まとめて作成できるが,必要か?
- Solidの重心の位置=Solidの位置とするか,重心をずらせるようにするか.
ODE,NovodexのAPIを見て一致していたら,それに合わせる.違っていたら検討.
→ どちらも重心をずらせる.Novodexは慣性テンソルを回転と対角に分けて指定する.
回転部分が重心の座標系という考えになっている.