[[devel]]

(できるところから手を付けていきましょう.手をつけるときはIRCで告知しましょう.)

** [[New Springhead Top Page]] [#i2dd6bc0]
**[[Frameworkを使ったサンプルを作ろう]] [#c5329557]
 
**[[Jointの仕様について]][#c5329557]

**公開に向けて [#k8800cb9]
-Physicsのドキュメント


**そのほか [#rb18e3a3]

* 開発方針的なTODO [#n19098ae]
- 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 [#nb22dfb8]
- 名前変更~
インタフェースにPHSolidIfなどIfが着いていますが,実装のほうにImpをつけて,インタフェースは何もつけないのが最終形態のつもりです.実装のクラス名が実装の内部でいろいろ参照されているので,面倒なので,名前の修正を省略しました.
ある程度固まってきたら,まとめてやりましょう.

* MEMO [#z7360dbe]
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のようにデスクがリンクリストになって,まとめて作成できるが,必要か?

- Physicsの未使用ファイルは一度消しました.

- Solidの重心の位置=Solidの位置とするか,重心をずらせるようにするか.~
ODE,NovodexのAPIを見て一致していたら,それに合わせる.違っていたら検討.~
→ どちらも重心をずらせる.Novodexは慣性テンソルを回転と対角に分けて指定する.
回転部分が重心の座標系という考えになっている.