devel

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

Frameworkを使ったサンプルを作ろう

Jointの仕様について

公開に向けて

  • Physicsのドキュメント

そのほか

開発方針的な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のようにデスクがリンクリストになって,まとめて作成できるが,必要か?
  • Physicsの未使用ファイルは一度消しました.
  • Solidの重心の位置=Solidの位置とするか,重心をずらせるようにするか.
    ODE,NovodexのAPIを見て一致していたら,それに合わせる.違っていたら検討.
    → どちらも重心をずらせる.Novodexは慣性テンソルを回転と対角に分けて指定する. 回転部分が重心の座標系という考えになっている.